From 1d8d9f5510dc5f574e926bd6fadb9d20337daede Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 6 Jul 2006 21:44:48 +0000 Subject: Moving remaining platform/backends code, as previously threatened svn-id: r23380 --- backends/PalmOS/Rsc/Resource.Frk/Starter.rsrc | Bin 53276 -> 0 bytes backends/PalmOS/Rsc/Resource.Frk/builder.rsrc | Bin 17400 -> 0 bytes backends/PalmOS/Rsc/Starter.rsrc | 0 backends/PalmOS/Rsc/StarterRsc.h | 392 -- backends/PalmOS/Rsc/batLow.bmp | Bin 1592 -> 0 bytes backends/PalmOS/Rsc/builder.rsrc | 0 backends/PalmOS/Rsc/builderrsc.h | 93 - backends/PalmOS/Rsc/keyAlt.bmp | Bin 1336 -> 0 bytes backends/PalmOS/Rsc/keyCommand.bmp | Bin 1336 -> 0 bytes backends/PalmOS/Rsc/keyCtrl.bmp | Bin 1336 -> 0 bytes backends/PalmOS/Rsc/modules.rcp | 67 - backends/PalmOS/Rsc/modulesrsc.h | 6 - backends/PalmOS/Rsc/numpad.bmp | Bin 1336 -> 0 bytes backends/PalmOS/Src/args.cpp | 106 - backends/PalmOS/Src/args.h | 43 - backends/PalmOS/Src/base_event.cpp | 333 -- backends/PalmOS/Src/base_gfx.cpp | 280 -- backends/PalmOS/Src/base_mouse.cpp | 72 - backends/PalmOS/Src/be_68k.cpp | 26 - backends/PalmOS/Src/be_68k.h | 26 - backends/PalmOS/Src/be_base.cpp | 116 - backends/PalmOS/Src/be_base.h | 246 - backends/PalmOS/Src/be_os5.cpp | 111 - backends/PalmOS/Src/be_os5.h | 164 - backends/PalmOS/Src/be_os5ex.cpp | 103 - backends/PalmOS/Src/be_os5ex.h | 67 - backends/PalmOS/Src/be_save.cpp | 163 - backends/PalmOS/Src/be_zodiac.cpp | 90 - backends/PalmOS/Src/be_zodiac.h | 90 - backends/PalmOS/Src/builder/b_globals.c | 85 - backends/PalmOS/Src/builder/b_globals.h | 37 - backends/PalmOS/Src/builder/builder.c | 442 -- backends/PalmOS/Src/builder/enum_globals.h | 112 - backends/PalmOS/Src/builder/queen/bq_display.c | 297 -- backends/PalmOS/Src/builder/queen/bq_graphics.c | 302 -- backends/PalmOS/Src/builder/queen/bq_musicdata.c | 1939 -------- backends/PalmOS/Src/builder/queen/bq_restables.c | 1096 ----- backends/PalmOS/Src/builder/queen/bq_talk.c | 518 -- backends/PalmOS/Src/builder/scumm/bl_akos.c | 117 - backends/PalmOS/Src/builder/scumm/bl_charset.c | 689 --- backends/PalmOS/Src/builder/scumm/bl_costume.c | 44 - backends/PalmOS/Src/builder/scumm/bl_dialogs.c | 100 - backends/PalmOS/Src/builder/scumm/bl_gfx.c | 111 - backends/PalmOS/Src/builder/scumm/bl_md5.c | 432 -- backends/PalmOS/Src/builder/scumm/bl_newgui.c | 47 - backends/PalmOS/Src/builder/scumm/bl_player_v2.c | 334 -- backends/PalmOS/Src/builder/scumm/bl_scumm.c | 0 .../builder/scumm/imuse_digi/bl_dimuse_codecs.c | 21 - .../builder/scumm/imuse_digi/bl_dimuse_tables.c | 921 ---- .../PalmOS/Src/builder/scumm/smush/bl_codec47.c | 63 - backends/PalmOS/Src/builder/simon/bs_charset.c | 745 --- backends/PalmOS/Src/builder/simon/bs_simon.c | 377 -- backends/PalmOS/Src/builder/sky/sk_hufftext.c | 2031 -------- backends/PalmOS/Src/builder/sword1/sw1_staticres.c | 3576 -------------- backends/PalmOS/Src/builder/sword1/sw1_staticres.h | 5201 -------------------- backends/PalmOS/Src/cd_aeroplayer.cpp | 166 - backends/PalmOS/Src/cd_aeroplayer.h | 64 - backends/PalmOS/Src/cd_default.cpp | 103 - backends/PalmOS/Src/cd_default.h | 49 - backends/PalmOS/Src/cd_msa.cpp | 260 - backends/PalmOS/Src/cd_msa.h | 66 - backends/PalmOS/Src/cd_pockettunes.cpp | 237 - backends/PalmOS/Src/cd_pockettunes.h | 67 - backends/PalmOS/Src/cdaudio.h | 65 - backends/PalmOS/Src/extend.cpp | 108 - backends/PalmOS/Src/extend.h | 34 - backends/PalmOS/Src/features.h | 17 - backends/PalmOS/Src/globals.h | 142 - backends/PalmOS/Src/i_zodiac.cpp | 41 - backends/PalmOS/Src/i_zodiac.h | 12 - backends/PalmOS/Src/init_golcd.cpp | 121 - backends/PalmOS/Src/init_golcd.h | 22 - backends/PalmOS/Src/init_mathlib.cpp | 29 - backends/PalmOS/Src/init_mathlib.h | 7 - backends/PalmOS/Src/init_pa1lib.cpp | 32 - backends/PalmOS/Src/init_pa1lib.h | 22 - backends/PalmOS/Src/init_palmos.cpp | 171 - backends/PalmOS/Src/init_palmos.h | 41 - backends/PalmOS/Src/init_sony.cpp | 162 - backends/PalmOS/Src/init_sony.h | 39 - backends/PalmOS/Src/init_stuffs.cpp | 130 - backends/PalmOS/Src/init_stuffs.h | 11 - backends/PalmOS/Src/launcher/app.cpp | 374 -- backends/PalmOS/Src/launcher/forms/formCards.cpp | 378 -- backends/PalmOS/Src/launcher/forms/formCards.h | 32 - .../PalmOS/Src/launcher/forms/formEditGame.cpp | 611 --- backends/PalmOS/Src/launcher/forms/formEditGame.h | 38 - backends/PalmOS/Src/launcher/forms/formMisc.cpp | 272 - backends/PalmOS/Src/launcher/forms/formSkins.cpp | 267 - backends/PalmOS/Src/launcher/forms/formUtil.cpp | 60 - backends/PalmOS/Src/launcher/forms/formUtil.h | 21 - backends/PalmOS/Src/launcher/forms/forminfo.cpp | 146 - backends/PalmOS/Src/launcher/forms/formmain.cpp | 363 -- backends/PalmOS/Src/launcher/forms/formmusic.cpp | 387 -- backends/PalmOS/Src/launcher/forms/forms.h | 22 - backends/PalmOS/Src/launcher/forms/formtabs.cpp | 242 - backends/PalmOS/Src/launcher/forms/formtabs.h | 24 - backends/PalmOS/Src/launcher/games.cpp | 530 -- backends/PalmOS/Src/launcher/games.h | 201 - backends/PalmOS/Src/launcher/launch.cpp | 517 -- backends/PalmOS/Src/launcher/skin.cpp | 611 --- backends/PalmOS/Src/launcher/skin.h | 130 - backends/PalmOS/Src/launcher/start.cpp | 366 -- backends/PalmOS/Src/launcher/start.h | 97 - backends/PalmOS/Src/missing/assert.h | 34 - backends/PalmOS/Src/missing/ext_stdio.c | 650 --- backends/PalmOS/Src/missing/ext_stdlib.c | 117 - backends/PalmOS/Src/missing/ext_string.c | 45 - backends/PalmOS/Src/missing/ext_time.c | 85 - backends/PalmOS/Src/missing/ext_unistd.c | 41 - backends/PalmOS/Src/missing/fcntl.h | 42 - backends/PalmOS/Src/missing/math.h | 38 - backends/PalmOS/Src/missing/memory.h | 25 - backends/PalmOS/Src/missing/stdio.h | 103 - backends/PalmOS/Src/missing/stdlib.h | 88 - backends/PalmOS/Src/missing/string.h | 66 - backends/PalmOS/Src/missing/sys/stat.h | 1 - backends/PalmOS/Src/missing/time.h | 55 - backends/PalmOS/Src/missing/unistd.h | 42 - backends/PalmOS/Src/modules.cpp | 251 - backends/PalmOS/Src/modules.h | 22 - backends/PalmOS/Src/native/oscalls.cpp | 47 - backends/PalmOS/Src/native/oscalls.h | 40 - backends/PalmOS/Src/native/pace.h | 102 - backends/PalmOS/Src/native/pnoARM.c | 80 - backends/PalmOS/Src/native/pnoStartup.c | 27 - backends/PalmOS/Src/native/zodiacARM.cpp | 146 - backends/PalmOS/Src/native/zodiacStartup.cpp | 173 - backends/PalmOS/Src/os5_event.cpp | 86 - backends/PalmOS/Src/os5_gfx.cpp | 317 -- backends/PalmOS/Src/os5_mouse.cpp | 175 - backends/PalmOS/Src/os5_overlay.cpp | 88 - backends/PalmOS/Src/os5_renderer.cpp | 156 - backends/PalmOS/Src/os5_sound.cpp | 143 - backends/PalmOS/Src/os5ex_sound.cpp | 37 - backends/PalmOS/Src/palm-scumm-md5.h | 9 - backends/PalmOS/Src/palmdefs.h | 21 - backends/PalmOS/Src/palmversion.h | 19 - backends/PalmOS/Src/prefixes/68k_agi.h | 9 - backends/PalmOS/Src/prefixes/68k_cine.h | 9 - backends/PalmOS/Src/prefixes/68k_gob.h | 9 - backends/PalmOS/Src/prefixes/68k_kyra.h | 9 - backends/PalmOS/Src/prefixes/68k_lure.h | 9 - backends/PalmOS/Src/prefixes/68k_queen.h | 9 - backends/PalmOS/Src/prefixes/68k_saga.h | 9 - backends/PalmOS/Src/prefixes/68k_scumm.h | 12 - backends/PalmOS/Src/prefixes/68k_simon.h | 9 - backends/PalmOS/Src/prefixes/68k_sky.h | 9 - backends/PalmOS/Src/prefixes/68k_sword1.h | 9 - backends/PalmOS/Src/prefixes/68k_sword2.h | 9 - backends/PalmOS/Src/prefixes/compile.h | 59 - backends/PalmOS/Src/prefixes/native_agi.h | 7 - backends/PalmOS/Src/prefixes/native_cine.h | 7 - backends/PalmOS/Src/prefixes/native_common.h | 21 - backends/PalmOS/Src/prefixes/native_gob.h | 7 - backends/PalmOS/Src/prefixes/native_kyra.h | 7 - backends/PalmOS/Src/prefixes/native_lure.h | 7 - backends/PalmOS/Src/prefixes/native_queen.h | 7 - backends/PalmOS/Src/prefixes/native_saga.h | 7 - backends/PalmOS/Src/prefixes/native_scumm.h | 9 - backends/PalmOS/Src/prefixes/native_simon.h | 7 - backends/PalmOS/Src/prefixes/native_sky.h | 7 - backends/PalmOS/Src/prefixes/native_sword1.h | 9 - backends/PalmOS/Src/prefixes/native_sword2.h | 10 - backends/PalmOS/Src/prefixes/prefix_frontend.h | 8 - backends/PalmOS/Src/prefixes/prefix_os5.h | 11 - backends/PalmOS/Src/prefixes/prefix_zodiac.h | 11 - backends/PalmOS/Src/rumble.cpp | 139 - backends/PalmOS/Src/rumble.h | 33 - backends/PalmOS/Src/scumm_globals.cpp | 155 - backends/PalmOS/Src/scumm_globals.h | 91 - backends/PalmOS/Src/snd_pa1.cpp | 113 - backends/PalmOS/Src/stuffs.h | 31 - backends/PalmOS/Src/vibrate.h | 61 - backends/PalmOS/Src/zodiac_event.cpp | 124 - backends/PalmOS/Src/zodiac_gfx.cpp | 322 -- backends/PalmOS/Src/zodiac_mouse.cpp | 153 - backends/PalmOS/Src/zodiac_overlay.cpp | 79 - backends/PalmOS/scummvm.mcp | Bin 1425522 -> 0 bytes backends/gp32/Makefile | 192 - backends/gp32/README.GP32 | 1 - backends/gp32/debug-gdbstub-usb.cpp | 1927 -------- backends/gp32/fontdata.c | 284 -- backends/gp32/gfx_splash.h | 4869 ------------------ backends/gp32/globals.h | 42 - backends/gp32/gp32_launcher.cpp | 190 - backends/gp32/gp32_launcher.h | 34 - backends/gp32/gp32_main.cpp | 91 - backends/gp32/gp32_osys.cpp | 775 --- backends/gp32/gp32_osys.h | 151 - backends/gp32/gp32std.cpp | 338 -- backends/gp32/gp32std.h | 61 - backends/gp32/gp32std_file.cpp | 256 - backends/gp32/gp32std_file.h | 60 - backends/gp32/gp32std_grap.cpp | 148 - backends/gp32/gp32std_grap.h | 47 - backends/gp32/gp32std_input.cpp | 211 - backends/gp32/gp32std_input.h | 52 - backends/gp32/gp32std_memory.cpp | 320 -- backends/gp32/gp32std_memory.h | 35 - backends/gp32/gp32std_sound.cpp | 188 - backends/gp32/gp32std_sound.h | 48 - backends/gp32/gp_asmlib.s | 426 -- backends/gp32/gp_clipped.c | 101 - backends/gp32/memcpy.S | 498 -- backends/gp32/portdefs.h | 117 - backends/gp32/startup.c | 122 - .../platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc | Bin 0 -> 53276 bytes .../platform/PalmOS/Rsc/Resource.Frk/builder.rsrc | Bin 0 -> 17400 bytes backends/platform/PalmOS/Rsc/Starter.rsrc | 0 backends/platform/PalmOS/Rsc/StarterRsc.h | 392 ++ backends/platform/PalmOS/Rsc/batLow.bmp | Bin 0 -> 1592 bytes backends/platform/PalmOS/Rsc/builder.rsrc | 0 backends/platform/PalmOS/Rsc/builderrsc.h | 93 + backends/platform/PalmOS/Rsc/keyAlt.bmp | Bin 0 -> 1336 bytes backends/platform/PalmOS/Rsc/keyCommand.bmp | Bin 0 -> 1336 bytes backends/platform/PalmOS/Rsc/keyCtrl.bmp | Bin 0 -> 1336 bytes backends/platform/PalmOS/Rsc/modules.rcp | 67 + backends/platform/PalmOS/Rsc/modulesrsc.h | 6 + backends/platform/PalmOS/Rsc/numpad.bmp | Bin 0 -> 1336 bytes backends/platform/PalmOS/Src/args.cpp | 106 + backends/platform/PalmOS/Src/args.h | 43 + backends/platform/PalmOS/Src/base_event.cpp | 333 ++ backends/platform/PalmOS/Src/base_gfx.cpp | 280 ++ backends/platform/PalmOS/Src/base_mouse.cpp | 72 + backends/platform/PalmOS/Src/be_68k.cpp | 26 + backends/platform/PalmOS/Src/be_68k.h | 26 + backends/platform/PalmOS/Src/be_base.cpp | 116 + backends/platform/PalmOS/Src/be_base.h | 246 + backends/platform/PalmOS/Src/be_os5.cpp | 111 + backends/platform/PalmOS/Src/be_os5.h | 164 + backends/platform/PalmOS/Src/be_os5ex.cpp | 103 + backends/platform/PalmOS/Src/be_os5ex.h | 67 + backends/platform/PalmOS/Src/be_save.cpp | 163 + backends/platform/PalmOS/Src/be_zodiac.cpp | 90 + backends/platform/PalmOS/Src/be_zodiac.h | 90 + backends/platform/PalmOS/Src/builder/b_globals.c | 85 + backends/platform/PalmOS/Src/builder/b_globals.h | 37 + backends/platform/PalmOS/Src/builder/builder.c | 442 ++ .../platform/PalmOS/Src/builder/enum_globals.h | 112 + .../platform/PalmOS/Src/builder/queen/bq_display.c | 297 ++ .../PalmOS/Src/builder/queen/bq_graphics.c | 302 ++ .../PalmOS/Src/builder/queen/bq_musicdata.c | 1939 ++++++++ .../PalmOS/Src/builder/queen/bq_restables.c | 1096 +++++ .../platform/PalmOS/Src/builder/queen/bq_talk.c | 518 ++ .../platform/PalmOS/Src/builder/scumm/bl_akos.c | 117 + .../platform/PalmOS/Src/builder/scumm/bl_charset.c | 689 +++ .../platform/PalmOS/Src/builder/scumm/bl_costume.c | 44 + .../platform/PalmOS/Src/builder/scumm/bl_dialogs.c | 100 + .../platform/PalmOS/Src/builder/scumm/bl_gfx.c | 111 + .../platform/PalmOS/Src/builder/scumm/bl_md5.c | 432 ++ .../platform/PalmOS/Src/builder/scumm/bl_newgui.c | 47 + .../PalmOS/Src/builder/scumm/bl_player_v2.c | 334 ++ .../platform/PalmOS/Src/builder/scumm/bl_scumm.c | 0 .../builder/scumm/imuse_digi/bl_dimuse_codecs.c | 21 + .../builder/scumm/imuse_digi/bl_dimuse_tables.c | 921 ++++ .../PalmOS/Src/builder/scumm/smush/bl_codec47.c | 63 + .../platform/PalmOS/Src/builder/simon/bs_charset.c | 745 +++ .../platform/PalmOS/Src/builder/simon/bs_simon.c | 377 ++ .../platform/PalmOS/Src/builder/sky/sk_hufftext.c | 2031 ++++++++ .../PalmOS/Src/builder/sword1/sw1_staticres.c | 3576 ++++++++++++++ .../PalmOS/Src/builder/sword1/sw1_staticres.h | 5201 ++++++++++++++++++++ backends/platform/PalmOS/Src/cd_aeroplayer.cpp | 166 + backends/platform/PalmOS/Src/cd_aeroplayer.h | 64 + backends/platform/PalmOS/Src/cd_default.cpp | 103 + backends/platform/PalmOS/Src/cd_default.h | 49 + backends/platform/PalmOS/Src/cd_msa.cpp | 260 + backends/platform/PalmOS/Src/cd_msa.h | 66 + backends/platform/PalmOS/Src/cd_pockettunes.cpp | 237 + backends/platform/PalmOS/Src/cd_pockettunes.h | 67 + backends/platform/PalmOS/Src/cdaudio.h | 65 + backends/platform/PalmOS/Src/extend.cpp | 108 + backends/platform/PalmOS/Src/extend.h | 34 + backends/platform/PalmOS/Src/features.h | 17 + backends/platform/PalmOS/Src/globals.h | 142 + backends/platform/PalmOS/Src/i_zodiac.cpp | 41 + backends/platform/PalmOS/Src/i_zodiac.h | 12 + backends/platform/PalmOS/Src/init_golcd.cpp | 121 + backends/platform/PalmOS/Src/init_golcd.h | 22 + backends/platform/PalmOS/Src/init_mathlib.cpp | 29 + backends/platform/PalmOS/Src/init_mathlib.h | 7 + backends/platform/PalmOS/Src/init_pa1lib.cpp | 32 + backends/platform/PalmOS/Src/init_pa1lib.h | 22 + backends/platform/PalmOS/Src/init_palmos.cpp | 171 + backends/platform/PalmOS/Src/init_palmos.h | 41 + backends/platform/PalmOS/Src/init_sony.cpp | 162 + backends/platform/PalmOS/Src/init_sony.h | 39 + backends/platform/PalmOS/Src/init_stuffs.cpp | 130 + backends/platform/PalmOS/Src/init_stuffs.h | 11 + backends/platform/PalmOS/Src/launcher/app.cpp | 374 ++ .../PalmOS/Src/launcher/forms/formCards.cpp | 378 ++ .../platform/PalmOS/Src/launcher/forms/formCards.h | 32 + .../PalmOS/Src/launcher/forms/formEditGame.cpp | 611 +++ .../PalmOS/Src/launcher/forms/formEditGame.h | 38 + .../PalmOS/Src/launcher/forms/formMisc.cpp | 272 + .../PalmOS/Src/launcher/forms/formSkins.cpp | 267 + .../PalmOS/Src/launcher/forms/formUtil.cpp | 60 + .../platform/PalmOS/Src/launcher/forms/formUtil.h | 21 + .../PalmOS/Src/launcher/forms/forminfo.cpp | 146 + .../PalmOS/Src/launcher/forms/formmain.cpp | 363 ++ .../PalmOS/Src/launcher/forms/formmusic.cpp | 387 ++ .../platform/PalmOS/Src/launcher/forms/forms.h | 22 + .../PalmOS/Src/launcher/forms/formtabs.cpp | 242 + .../platform/PalmOS/Src/launcher/forms/formtabs.h | 24 + backends/platform/PalmOS/Src/launcher/games.cpp | 530 ++ backends/platform/PalmOS/Src/launcher/games.h | 201 + backends/platform/PalmOS/Src/launcher/launch.cpp | 517 ++ backends/platform/PalmOS/Src/launcher/skin.cpp | 611 +++ backends/platform/PalmOS/Src/launcher/skin.h | 130 + backends/platform/PalmOS/Src/launcher/start.cpp | 366 ++ backends/platform/PalmOS/Src/launcher/start.h | 97 + backends/platform/PalmOS/Src/missing/assert.h | 34 + backends/platform/PalmOS/Src/missing/ext_stdio.c | 650 +++ backends/platform/PalmOS/Src/missing/ext_stdlib.c | 117 + backends/platform/PalmOS/Src/missing/ext_string.c | 45 + backends/platform/PalmOS/Src/missing/ext_time.c | 85 + backends/platform/PalmOS/Src/missing/ext_unistd.c | 41 + backends/platform/PalmOS/Src/missing/fcntl.h | 42 + backends/platform/PalmOS/Src/missing/math.h | 38 + backends/platform/PalmOS/Src/missing/memory.h | 25 + backends/platform/PalmOS/Src/missing/stdio.h | 103 + backends/platform/PalmOS/Src/missing/stdlib.h | 88 + backends/platform/PalmOS/Src/missing/string.h | 66 + backends/platform/PalmOS/Src/missing/sys/stat.h | 1 + backends/platform/PalmOS/Src/missing/time.h | 55 + backends/platform/PalmOS/Src/missing/unistd.h | 42 + backends/platform/PalmOS/Src/modules.cpp | 251 + backends/platform/PalmOS/Src/modules.h | 22 + backends/platform/PalmOS/Src/native/oscalls.cpp | 47 + backends/platform/PalmOS/Src/native/oscalls.h | 40 + backends/platform/PalmOS/Src/native/pace.h | 102 + backends/platform/PalmOS/Src/native/pnoARM.c | 80 + backends/platform/PalmOS/Src/native/pnoStartup.c | 27 + backends/platform/PalmOS/Src/native/zodiacARM.cpp | 146 + .../platform/PalmOS/Src/native/zodiacStartup.cpp | 173 + backends/platform/PalmOS/Src/os5_event.cpp | 86 + backends/platform/PalmOS/Src/os5_gfx.cpp | 317 ++ backends/platform/PalmOS/Src/os5_mouse.cpp | 175 + backends/platform/PalmOS/Src/os5_overlay.cpp | 88 + backends/platform/PalmOS/Src/os5_renderer.cpp | 156 + backends/platform/PalmOS/Src/os5_sound.cpp | 143 + backends/platform/PalmOS/Src/os5ex_sound.cpp | 37 + backends/platform/PalmOS/Src/palm-scumm-md5.h | 9 + backends/platform/PalmOS/Src/palmdefs.h | 21 + backends/platform/PalmOS/Src/palmversion.h | 19 + backends/platform/PalmOS/Src/prefixes/68k_agi.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_cine.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_gob.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_kyra.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_lure.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_queen.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_saga.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_scumm.h | 12 + backends/platform/PalmOS/Src/prefixes/68k_simon.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_sky.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_sword1.h | 9 + backends/platform/PalmOS/Src/prefixes/68k_sword2.h | 9 + backends/platform/PalmOS/Src/prefixes/compile.h | 59 + backends/platform/PalmOS/Src/prefixes/native_agi.h | 7 + .../platform/PalmOS/Src/prefixes/native_cine.h | 7 + .../platform/PalmOS/Src/prefixes/native_common.h | 21 + backends/platform/PalmOS/Src/prefixes/native_gob.h | 7 + .../platform/PalmOS/Src/prefixes/native_kyra.h | 7 + .../platform/PalmOS/Src/prefixes/native_lure.h | 7 + .../platform/PalmOS/Src/prefixes/native_queen.h | 7 + .../platform/PalmOS/Src/prefixes/native_saga.h | 7 + .../platform/PalmOS/Src/prefixes/native_scumm.h | 9 + .../platform/PalmOS/Src/prefixes/native_simon.h | 7 + backends/platform/PalmOS/Src/prefixes/native_sky.h | 7 + .../platform/PalmOS/Src/prefixes/native_sword1.h | 9 + .../platform/PalmOS/Src/prefixes/native_sword2.h | 10 + .../platform/PalmOS/Src/prefixes/prefix_frontend.h | 8 + backends/platform/PalmOS/Src/prefixes/prefix_os5.h | 11 + .../platform/PalmOS/Src/prefixes/prefix_zodiac.h | 11 + backends/platform/PalmOS/Src/rumble.cpp | 139 + backends/platform/PalmOS/Src/rumble.h | 33 + backends/platform/PalmOS/Src/scumm_globals.cpp | 155 + backends/platform/PalmOS/Src/scumm_globals.h | 91 + backends/platform/PalmOS/Src/snd_pa1.cpp | 113 + backends/platform/PalmOS/Src/stuffs.h | 31 + backends/platform/PalmOS/Src/vibrate.h | 61 + backends/platform/PalmOS/Src/zodiac_event.cpp | 124 + backends/platform/PalmOS/Src/zodiac_gfx.cpp | 322 ++ backends/platform/PalmOS/Src/zodiac_mouse.cpp | 153 + backends/platform/PalmOS/Src/zodiac_overlay.cpp | 79 + backends/platform/PalmOS/scummvm.mcp | Bin 0 -> 1425522 bytes backends/platform/gp32/Makefile | 192 + backends/platform/gp32/README.GP32 | 1 + backends/platform/gp32/debug-gdbstub-usb.cpp | 1927 ++++++++ backends/platform/gp32/fontdata.c | 284 ++ backends/platform/gp32/gfx_splash.h | 4869 ++++++++++++++++++ backends/platform/gp32/globals.h | 42 + backends/platform/gp32/gp32_launcher.cpp | 190 + backends/platform/gp32/gp32_launcher.h | 34 + backends/platform/gp32/gp32_main.cpp | 91 + backends/platform/gp32/gp32_osys.cpp | 775 +++ backends/platform/gp32/gp32_osys.h | 151 + backends/platform/gp32/gp32std.cpp | 338 ++ backends/platform/gp32/gp32std.h | 61 + backends/platform/gp32/gp32std_file.cpp | 256 + backends/platform/gp32/gp32std_file.h | 60 + backends/platform/gp32/gp32std_grap.cpp | 148 + backends/platform/gp32/gp32std_grap.h | 47 + backends/platform/gp32/gp32std_input.cpp | 211 + backends/platform/gp32/gp32std_input.h | 52 + backends/platform/gp32/gp32std_memory.cpp | 320 ++ backends/platform/gp32/gp32std_memory.h | 35 + backends/platform/gp32/gp32std_sound.cpp | 188 + backends/platform/gp32/gp32std_sound.h | 48 + backends/platform/gp32/gp_asmlib.s | 426 ++ backends/platform/gp32/gp_clipped.c | 101 + backends/platform/gp32/memcpy.S | 498 ++ backends/platform/gp32/portdefs.h | 117 + backends/platform/gp32/startup.c | 122 + backends/platform/ps2/DmaPipe.cpp | 301 ++ backends/platform/ps2/DmaPipe.h | 67 + backends/platform/ps2/Gs2dScreen.cpp | 751 +++ backends/platform/ps2/Gs2dScreen.h | 116 + backends/platform/ps2/GsDefs.h | 226 + backends/platform/ps2/READ_PS2.TXT | 82 + backends/platform/ps2/asyncfio.cpp | 206 + backends/platform/ps2/asyncfio.h | 50 + backends/platform/ps2/cd.c | 53 + backends/platform/ps2/cd.h | 26 + backends/platform/ps2/eecodyvdfs.c | 67 + backends/platform/ps2/eecodyvdfs.h | 52 + backends/platform/ps2/fileio.cpp | 728 +++ backends/platform/ps2/fileio.h | 77 + backends/platform/ps2/icon.cpp | 932 ++++ backends/platform/ps2/iop/CoDyVDfs/Makefile | 30 + .../platform/ps2/iop/CoDyVDfs/common/codyvdirx.h | 38 + backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h | 134 + backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c | 347 ++ backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h | 84 + backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c | 262 + backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h | 37 + backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst | 65 + .../platform/ps2/iop/CoDyVDfs/iop/irx_imports.h | 30 + backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c | 115 + backends/platform/ps2/irxboot.cpp | 215 + backends/platform/ps2/irxboot.h | 84 + backends/platform/ps2/ps2input.cpp | 547 ++ backends/platform/ps2/ps2input.h | 59 + backends/platform/ps2/ps2mutex.cpp | 85 + backends/platform/ps2/ps2pad.cpp | 150 + backends/platform/ps2/ps2pad.h | 66 + backends/platform/ps2/ps2time.cpp | 126 + backends/platform/ps2/savefile.cpp | 801 +++ backends/platform/ps2/savefile.h | 80 + backends/platform/ps2/sdlkeys.h | 264 + backends/platform/ps2/sysdefs.h | 72 + backends/platform/ps2/systemps2.cpp | 798 +++ backends/platform/ps2/systemps2.h | 148 + backends/platform/symbian/.placeholder | 1 + backends/platform/symbian/AdaptAllMMPs.pl | 382 ++ .../symbian/BuildPackageUpload_AllVersions.pl | 637 +++ .../symbian/BuildPackageUpload_LocalSettings.pl | 292 ++ backends/platform/symbian/README | 135 + backends/platform/symbian/S60/BLD.INF.in | 12 + backends/platform/symbian/S60/ScummVM_S60.mmp.in | 104 + backends/platform/symbian/S60/ScummVM_S60_App.mmp | 49 + .../symbian/S60/scummvm-CVS-SymbianS60v1.pkg | 27 + .../symbian/S60/scummvm-CVS-SymbianS60v2.pkg | 27 + backends/platform/symbian/S60v3/BLD.INF.in | 11 + backends/platform/symbian/S60v3/ScummVM_Loc.rss | 22 + .../platform/symbian/S60v3/ScummVM_S60v3.mmp.in | 123 + .../symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg | 33 + backends/platform/symbian/S60v3/scummvm_reg.rss | 18 + backends/platform/symbian/S80/BLD.INF.in | 12 + backends/platform/symbian/S80/ScummVM_S80.mmp.in | 102 + backends/platform/symbian/S80/ScummVM_S80_App.mmp | 49 + .../symbian/S80/scummvm-CVS-SymbianS80.pkg | 27 + backends/platform/symbian/S90/BLD.INF.in | 12 + backends/platform/symbian/S90/Scummvm_S90.mmp.in | 102 + backends/platform/symbian/S90/Scummvm_S90_App.mmp | 49 + .../symbian/S90/scummvm-CVS-SymbianS90.pkg | 27 + backends/platform/symbian/UIQ2/BLD.INF.in | 11 + backends/platform/symbian/UIQ2/ScummVM.rss | 46 + backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in | 106 + backends/platform/symbian/UIQ2/Vibration.sis | Bin 0 -> 2175 bytes backends/platform/symbian/UIQ2/chkstk.obj | Bin 0 -> 329 bytes backends/platform/symbian/UIQ2/lldiv.obj | Bin 0 -> 418 bytes backends/platform/symbian/UIQ2/llmul.obj | Bin 0 -> 300 bytes backends/platform/symbian/UIQ2/llshl.obj | Bin 0 -> 280 bytes .../symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg | 26 + .../symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg | 31 + backends/platform/symbian/UIQ3/BLD.INF.in | 11 + backends/platform/symbian/UIQ3/ScummVM.rss | 49 + backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in | 125 + .../symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg | 33 + backends/platform/symbian/UIQ3/scummvm_loc.rss | 59 + backends/platform/symbian/UIQ3/scummvm_reg.rss | 18 + backends/platform/symbian/mmp/scummvm_agi.mmp.in | 55 + backends/platform/symbian/mmp/scummvm_base.mmp.in | 111 + backends/platform/symbian/mmp/scummvm_cine.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_gob.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_kyra.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_lure.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_queen.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_saga.mmp.in | 54 + backends/platform/symbian/mmp/scummvm_scumm.mmp.in | 70 + backends/platform/symbian/mmp/scummvm_simon.mmp.in | 55 + backends/platform/symbian/mmp/scummvm_sky.mmp.in | 54 + .../platform/symbian/mmp/scummvm_sword1.mmp.in | 54 + .../platform/symbian/mmp/scummvm_sword2.mmp.in | 54 + backends/platform/symbian/res/ScummS.bmp | Bin 0 -> 822 bytes backends/platform/symbian/res/ScummSmall.bmp | Bin 0 -> 1062 bytes backends/platform/symbian/res/ScummVmAif.rss | 43 + backends/platform/symbian/res/scummL.bmp | Bin 0 -> 2102 bytes backends/platform/symbian/res/scummLarge.bmp | Bin 0 -> 4854 bytes backends/platform/symbian/res/scummLargeMask.bmp | Bin 0 -> 918 bytes backends/platform/symbian/res/scummLm.bmp | Bin 0 -> 630 bytes backends/platform/symbian/res/scummSm.bmp | Bin 0 -> 246 bytes backends/platform/symbian/res/scummSmallMask.bmp | Bin 0 -> 334 bytes backends/platform/symbian/res/scummvm.rss | 62 + backends/platform/symbian/res/scummxLarge.bmp | Bin 0 -> 12342 bytes backends/platform/symbian/res/scummxLargeMask.bmp | Bin 0 -> 2166 bytes backends/platform/symbian/src/ScummApp.cpp | 119 + backends/platform/symbian/src/ScummApp.h | 54 + backends/platform/symbian/src/ScummVMApp.cpp | 170 + backends/platform/symbian/src/ScummVMApp.h | 82 + backends/platform/symbian/src/ScummVm.hrh | 30 + backends/platform/symbian/src/SymbianActions.cpp | 189 + backends/platform/symbian/src/SymbianActions.h | 77 + backends/platform/symbian/src/SymbianOS.cpp | 419 ++ backends/platform/symbian/src/SymbianOS.h | 139 + backends/platform/symbian/src/main_features.inl | 66 + backends/platform/symbian/src/portdefs.h | 148 + backends/ps2/DmaPipe.cpp | 301 -- backends/ps2/DmaPipe.h | 67 - backends/ps2/Gs2dScreen.cpp | 751 --- backends/ps2/Gs2dScreen.h | 116 - backends/ps2/GsDefs.h | 226 - backends/ps2/READ_PS2.TXT | 82 - backends/ps2/asyncfio.cpp | 206 - backends/ps2/asyncfio.h | 50 - backends/ps2/cd.c | 53 - backends/ps2/cd.h | 26 - backends/ps2/eecodyvdfs.c | 67 - backends/ps2/eecodyvdfs.h | 52 - backends/ps2/fileio.cpp | 728 --- backends/ps2/fileio.h | 77 - backends/ps2/icon.cpp | 932 ---- backends/ps2/iop/CoDyVDfs/Makefile | 30 - backends/ps2/iop/CoDyVDfs/common/codyvdirx.h | 38 - backends/ps2/iop/CoDyVDfs/iop/cdtypes.h | 134 - backends/ps2/iop/CoDyVDfs/iop/codyvdfs.c | 347 -- backends/ps2/iop/CoDyVDfs/iop/codyvdfs.h | 84 - backends/ps2/iop/CoDyVDfs/iop/fiofs.c | 262 - backends/ps2/iop/CoDyVDfs/iop/fiofs.h | 37 - backends/ps2/iop/CoDyVDfs/iop/imports.lst | 65 - backends/ps2/iop/CoDyVDfs/iop/irx_imports.h | 30 - backends/ps2/iop/CoDyVDfs/iop/rpcfs.c | 115 - backends/ps2/irxboot.cpp | 215 - backends/ps2/irxboot.h | 84 - backends/ps2/ps2input.cpp | 547 -- backends/ps2/ps2input.h | 59 - backends/ps2/ps2mutex.cpp | 85 - backends/ps2/ps2pad.cpp | 150 - backends/ps2/ps2pad.h | 66 - backends/ps2/ps2time.cpp | 126 - backends/ps2/savefile.cpp | 801 --- backends/ps2/savefile.h | 80 - backends/ps2/sdlkeys.h | 264 - backends/ps2/sysdefs.h | 72 - backends/ps2/systemps2.cpp | 798 --- backends/ps2/systemps2.h | 148 - backends/symbian/.placeholder | 1 - backends/symbian/AdaptAllMMPs.pl | 382 -- backends/symbian/BuildPackageUpload_AllVersions.pl | 637 --- .../symbian/BuildPackageUpload_LocalSettings.pl | 292 -- backends/symbian/README | 135 - backends/symbian/S60/BLD.INF.in | 12 - backends/symbian/S60/ScummVM_S60.mmp.in | 104 - backends/symbian/S60/ScummVM_S60_App.mmp | 49 - backends/symbian/S60/scummvm-CVS-SymbianS60v1.pkg | 27 - backends/symbian/S60/scummvm-CVS-SymbianS60v2.pkg | 27 - backends/symbian/S60v3/BLD.INF.in | 11 - backends/symbian/S60v3/ScummVM_Loc.rss | 22 - backends/symbian/S60v3/ScummVM_S60v3.mmp.in | 123 - .../symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg | 33 - backends/symbian/S60v3/scummvm_reg.rss | 18 - backends/symbian/S80/BLD.INF.in | 12 - backends/symbian/S80/ScummVM_S80.mmp.in | 102 - backends/symbian/S80/ScummVM_S80_App.mmp | 49 - backends/symbian/S80/scummvm-CVS-SymbianS80.pkg | 27 - backends/symbian/S90/BLD.INF.in | 12 - backends/symbian/S90/Scummvm_S90.mmp.in | 102 - backends/symbian/S90/Scummvm_S90_App.mmp | 49 - backends/symbian/S90/scummvm-CVS-SymbianS90.pkg | 27 - backends/symbian/UIQ2/BLD.INF.in | 11 - backends/symbian/UIQ2/ScummVM.rss | 46 - backends/symbian/UIQ2/ScummVM_UIQ2.mmp.in | 106 - backends/symbian/UIQ2/Vibration.sis | Bin 2175 -> 0 bytes backends/symbian/UIQ2/chkstk.obj | Bin 329 -> 0 bytes backends/symbian/UIQ2/lldiv.obj | Bin 418 -> 0 bytes backends/symbian/UIQ2/llmul.obj | Bin 300 -> 0 bytes backends/symbian/UIQ2/llshl.obj | Bin 280 -> 0 bytes backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg | 26 - .../symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg | 31 - backends/symbian/UIQ3/BLD.INF.in | 11 - backends/symbian/UIQ3/ScummVM.rss | 49 - backends/symbian/UIQ3/ScummVM_UIQ3.mmp.in | 125 - backends/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg | 33 - backends/symbian/UIQ3/scummvm_loc.rss | 59 - backends/symbian/UIQ3/scummvm_reg.rss | 18 - backends/symbian/mmp/scummvm_agi.mmp.in | 55 - backends/symbian/mmp/scummvm_base.mmp.in | 111 - backends/symbian/mmp/scummvm_cine.mmp.in | 54 - backends/symbian/mmp/scummvm_gob.mmp.in | 54 - backends/symbian/mmp/scummvm_kyra.mmp.in | 54 - backends/symbian/mmp/scummvm_lure.mmp.in | 54 - backends/symbian/mmp/scummvm_queen.mmp.in | 54 - backends/symbian/mmp/scummvm_saga.mmp.in | 54 - backends/symbian/mmp/scummvm_scumm.mmp.in | 70 - backends/symbian/mmp/scummvm_simon.mmp.in | 55 - backends/symbian/mmp/scummvm_sky.mmp.in | 54 - backends/symbian/mmp/scummvm_sword1.mmp.in | 54 - backends/symbian/mmp/scummvm_sword2.mmp.in | 54 - backends/symbian/res/ScummS.bmp | Bin 822 -> 0 bytes backends/symbian/res/ScummSmall.bmp | Bin 1062 -> 0 bytes backends/symbian/res/ScummVmAif.rss | 43 - backends/symbian/res/scummL.bmp | Bin 2102 -> 0 bytes backends/symbian/res/scummLarge.bmp | Bin 4854 -> 0 bytes backends/symbian/res/scummLargeMask.bmp | Bin 918 -> 0 bytes backends/symbian/res/scummLm.bmp | Bin 630 -> 0 bytes backends/symbian/res/scummSm.bmp | Bin 246 -> 0 bytes backends/symbian/res/scummSmallMask.bmp | Bin 334 -> 0 bytes backends/symbian/res/scummvm.rss | 62 - backends/symbian/res/scummxLarge.bmp | Bin 12342 -> 0 bytes backends/symbian/res/scummxLargeMask.bmp | Bin 2166 -> 0 bytes backends/symbian/src/ScummApp.cpp | 119 - backends/symbian/src/ScummApp.h | 54 - backends/symbian/src/ScummVMApp.cpp | 170 - backends/symbian/src/ScummVMApp.h | 82 - backends/symbian/src/ScummVm.hrh | 30 - backends/symbian/src/SymbianActions.cpp | 189 - backends/symbian/src/SymbianActions.h | 77 - backends/symbian/src/SymbianOS.cpp | 419 -- backends/symbian/src/SymbianOS.h | 139 - backends/symbian/src/main_features.inl | 66 - backends/symbian/src/portdefs.h | 148 - 642 files changed, 60220 insertions(+), 60220 deletions(-) delete mode 100644 backends/PalmOS/Rsc/Resource.Frk/Starter.rsrc delete mode 100644 backends/PalmOS/Rsc/Resource.Frk/builder.rsrc delete mode 100644 backends/PalmOS/Rsc/Starter.rsrc delete mode 100644 backends/PalmOS/Rsc/StarterRsc.h delete mode 100644 backends/PalmOS/Rsc/batLow.bmp delete mode 100644 backends/PalmOS/Rsc/builder.rsrc delete mode 100644 backends/PalmOS/Rsc/builderrsc.h delete mode 100644 backends/PalmOS/Rsc/keyAlt.bmp delete mode 100644 backends/PalmOS/Rsc/keyCommand.bmp delete mode 100644 backends/PalmOS/Rsc/keyCtrl.bmp delete mode 100644 backends/PalmOS/Rsc/modules.rcp delete mode 100644 backends/PalmOS/Rsc/modulesrsc.h delete mode 100644 backends/PalmOS/Rsc/numpad.bmp delete mode 100644 backends/PalmOS/Src/args.cpp delete mode 100644 backends/PalmOS/Src/args.h delete mode 100644 backends/PalmOS/Src/base_event.cpp delete mode 100644 backends/PalmOS/Src/base_gfx.cpp delete mode 100644 backends/PalmOS/Src/base_mouse.cpp delete mode 100644 backends/PalmOS/Src/be_68k.cpp delete mode 100644 backends/PalmOS/Src/be_68k.h delete mode 100644 backends/PalmOS/Src/be_base.cpp delete mode 100644 backends/PalmOS/Src/be_base.h delete mode 100644 backends/PalmOS/Src/be_os5.cpp delete mode 100644 backends/PalmOS/Src/be_os5.h delete mode 100644 backends/PalmOS/Src/be_os5ex.cpp delete mode 100644 backends/PalmOS/Src/be_os5ex.h delete mode 100644 backends/PalmOS/Src/be_save.cpp delete mode 100644 backends/PalmOS/Src/be_zodiac.cpp delete mode 100644 backends/PalmOS/Src/be_zodiac.h delete mode 100644 backends/PalmOS/Src/builder/b_globals.c delete mode 100644 backends/PalmOS/Src/builder/b_globals.h delete mode 100644 backends/PalmOS/Src/builder/builder.c delete mode 100644 backends/PalmOS/Src/builder/enum_globals.h delete mode 100644 backends/PalmOS/Src/builder/queen/bq_display.c delete mode 100644 backends/PalmOS/Src/builder/queen/bq_graphics.c delete mode 100644 backends/PalmOS/Src/builder/queen/bq_musicdata.c delete mode 100644 backends/PalmOS/Src/builder/queen/bq_restables.c delete mode 100644 backends/PalmOS/Src/builder/queen/bq_talk.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_akos.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_charset.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_costume.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_dialogs.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_gfx.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_md5.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_newgui.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_player_v2.c delete mode 100644 backends/PalmOS/Src/builder/scumm/bl_scumm.c delete mode 100644 backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c delete mode 100644 backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c delete mode 100644 backends/PalmOS/Src/builder/scumm/smush/bl_codec47.c delete mode 100644 backends/PalmOS/Src/builder/simon/bs_charset.c delete mode 100644 backends/PalmOS/Src/builder/simon/bs_simon.c delete mode 100644 backends/PalmOS/Src/builder/sky/sk_hufftext.c delete mode 100644 backends/PalmOS/Src/builder/sword1/sw1_staticres.c delete mode 100644 backends/PalmOS/Src/builder/sword1/sw1_staticres.h delete mode 100644 backends/PalmOS/Src/cd_aeroplayer.cpp delete mode 100644 backends/PalmOS/Src/cd_aeroplayer.h delete mode 100644 backends/PalmOS/Src/cd_default.cpp delete mode 100644 backends/PalmOS/Src/cd_default.h delete mode 100644 backends/PalmOS/Src/cd_msa.cpp delete mode 100644 backends/PalmOS/Src/cd_msa.h delete mode 100644 backends/PalmOS/Src/cd_pockettunes.cpp delete mode 100644 backends/PalmOS/Src/cd_pockettunes.h delete mode 100644 backends/PalmOS/Src/cdaudio.h delete mode 100644 backends/PalmOS/Src/extend.cpp delete mode 100644 backends/PalmOS/Src/extend.h delete mode 100644 backends/PalmOS/Src/features.h delete mode 100644 backends/PalmOS/Src/globals.h delete mode 100644 backends/PalmOS/Src/i_zodiac.cpp delete mode 100644 backends/PalmOS/Src/i_zodiac.h delete mode 100644 backends/PalmOS/Src/init_golcd.cpp delete mode 100644 backends/PalmOS/Src/init_golcd.h delete mode 100644 backends/PalmOS/Src/init_mathlib.cpp delete mode 100644 backends/PalmOS/Src/init_mathlib.h delete mode 100644 backends/PalmOS/Src/init_pa1lib.cpp delete mode 100644 backends/PalmOS/Src/init_pa1lib.h delete mode 100644 backends/PalmOS/Src/init_palmos.cpp delete mode 100644 backends/PalmOS/Src/init_palmos.h delete mode 100644 backends/PalmOS/Src/init_sony.cpp delete mode 100644 backends/PalmOS/Src/init_sony.h delete mode 100644 backends/PalmOS/Src/init_stuffs.cpp delete mode 100644 backends/PalmOS/Src/init_stuffs.h delete mode 100644 backends/PalmOS/Src/launcher/app.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formCards.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formCards.h delete mode 100644 backends/PalmOS/Src/launcher/forms/formEditGame.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formEditGame.h delete mode 100644 backends/PalmOS/Src/launcher/forms/formMisc.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formSkins.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formUtil.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formUtil.h delete mode 100644 backends/PalmOS/Src/launcher/forms/forminfo.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formmain.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formmusic.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/forms.h delete mode 100644 backends/PalmOS/Src/launcher/forms/formtabs.cpp delete mode 100644 backends/PalmOS/Src/launcher/forms/formtabs.h delete mode 100644 backends/PalmOS/Src/launcher/games.cpp delete mode 100644 backends/PalmOS/Src/launcher/games.h delete mode 100644 backends/PalmOS/Src/launcher/launch.cpp delete mode 100644 backends/PalmOS/Src/launcher/skin.cpp delete mode 100644 backends/PalmOS/Src/launcher/skin.h delete mode 100644 backends/PalmOS/Src/launcher/start.cpp delete mode 100644 backends/PalmOS/Src/launcher/start.h delete mode 100644 backends/PalmOS/Src/missing/assert.h delete mode 100644 backends/PalmOS/Src/missing/ext_stdio.c delete mode 100644 backends/PalmOS/Src/missing/ext_stdlib.c delete mode 100644 backends/PalmOS/Src/missing/ext_string.c delete mode 100644 backends/PalmOS/Src/missing/ext_time.c delete mode 100644 backends/PalmOS/Src/missing/ext_unistd.c delete mode 100644 backends/PalmOS/Src/missing/fcntl.h delete mode 100644 backends/PalmOS/Src/missing/math.h delete mode 100644 backends/PalmOS/Src/missing/memory.h delete mode 100644 backends/PalmOS/Src/missing/stdio.h delete mode 100644 backends/PalmOS/Src/missing/stdlib.h delete mode 100644 backends/PalmOS/Src/missing/string.h delete mode 100644 backends/PalmOS/Src/missing/sys/stat.h delete mode 100644 backends/PalmOS/Src/missing/time.h delete mode 100644 backends/PalmOS/Src/missing/unistd.h delete mode 100644 backends/PalmOS/Src/modules.cpp delete mode 100644 backends/PalmOS/Src/modules.h delete mode 100644 backends/PalmOS/Src/native/oscalls.cpp delete mode 100644 backends/PalmOS/Src/native/oscalls.h delete mode 100644 backends/PalmOS/Src/native/pace.h delete mode 100644 backends/PalmOS/Src/native/pnoARM.c delete mode 100644 backends/PalmOS/Src/native/pnoStartup.c delete mode 100644 backends/PalmOS/Src/native/zodiacARM.cpp delete mode 100644 backends/PalmOS/Src/native/zodiacStartup.cpp delete mode 100644 backends/PalmOS/Src/os5_event.cpp delete mode 100644 backends/PalmOS/Src/os5_gfx.cpp delete mode 100644 backends/PalmOS/Src/os5_mouse.cpp delete mode 100644 backends/PalmOS/Src/os5_overlay.cpp delete mode 100644 backends/PalmOS/Src/os5_renderer.cpp delete mode 100644 backends/PalmOS/Src/os5_sound.cpp delete mode 100644 backends/PalmOS/Src/os5ex_sound.cpp delete mode 100644 backends/PalmOS/Src/palm-scumm-md5.h delete mode 100644 backends/PalmOS/Src/palmdefs.h delete mode 100644 backends/PalmOS/Src/palmversion.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_agi.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_cine.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_gob.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_kyra.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_lure.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_queen.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_saga.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_scumm.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_simon.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_sky.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_sword1.h delete mode 100644 backends/PalmOS/Src/prefixes/68k_sword2.h delete mode 100644 backends/PalmOS/Src/prefixes/compile.h delete mode 100644 backends/PalmOS/Src/prefixes/native_agi.h delete mode 100644 backends/PalmOS/Src/prefixes/native_cine.h delete mode 100644 backends/PalmOS/Src/prefixes/native_common.h delete mode 100644 backends/PalmOS/Src/prefixes/native_gob.h delete mode 100644 backends/PalmOS/Src/prefixes/native_kyra.h delete mode 100644 backends/PalmOS/Src/prefixes/native_lure.h delete mode 100644 backends/PalmOS/Src/prefixes/native_queen.h delete mode 100644 backends/PalmOS/Src/prefixes/native_saga.h delete mode 100644 backends/PalmOS/Src/prefixes/native_scumm.h delete mode 100644 backends/PalmOS/Src/prefixes/native_simon.h delete mode 100644 backends/PalmOS/Src/prefixes/native_sky.h delete mode 100644 backends/PalmOS/Src/prefixes/native_sword1.h delete mode 100644 backends/PalmOS/Src/prefixes/native_sword2.h delete mode 100644 backends/PalmOS/Src/prefixes/prefix_frontend.h delete mode 100644 backends/PalmOS/Src/prefixes/prefix_os5.h delete mode 100644 backends/PalmOS/Src/prefixes/prefix_zodiac.h delete mode 100644 backends/PalmOS/Src/rumble.cpp delete mode 100644 backends/PalmOS/Src/rumble.h delete mode 100644 backends/PalmOS/Src/scumm_globals.cpp delete mode 100644 backends/PalmOS/Src/scumm_globals.h delete mode 100644 backends/PalmOS/Src/snd_pa1.cpp delete mode 100644 backends/PalmOS/Src/stuffs.h delete mode 100644 backends/PalmOS/Src/vibrate.h delete mode 100644 backends/PalmOS/Src/zodiac_event.cpp delete mode 100644 backends/PalmOS/Src/zodiac_gfx.cpp delete mode 100644 backends/PalmOS/Src/zodiac_mouse.cpp delete mode 100644 backends/PalmOS/Src/zodiac_overlay.cpp delete mode 100644 backends/PalmOS/scummvm.mcp delete mode 100644 backends/gp32/Makefile delete mode 100644 backends/gp32/README.GP32 delete mode 100644 backends/gp32/debug-gdbstub-usb.cpp delete mode 100644 backends/gp32/fontdata.c delete mode 100644 backends/gp32/gfx_splash.h delete mode 100644 backends/gp32/globals.h delete mode 100644 backends/gp32/gp32_launcher.cpp delete mode 100644 backends/gp32/gp32_launcher.h delete mode 100644 backends/gp32/gp32_main.cpp delete mode 100644 backends/gp32/gp32_osys.cpp delete mode 100644 backends/gp32/gp32_osys.h delete mode 100644 backends/gp32/gp32std.cpp delete mode 100644 backends/gp32/gp32std.h delete mode 100644 backends/gp32/gp32std_file.cpp delete mode 100644 backends/gp32/gp32std_file.h delete mode 100644 backends/gp32/gp32std_grap.cpp delete mode 100644 backends/gp32/gp32std_grap.h delete mode 100644 backends/gp32/gp32std_input.cpp delete mode 100644 backends/gp32/gp32std_input.h delete mode 100644 backends/gp32/gp32std_memory.cpp delete mode 100644 backends/gp32/gp32std_memory.h delete mode 100644 backends/gp32/gp32std_sound.cpp delete mode 100644 backends/gp32/gp32std_sound.h delete mode 100644 backends/gp32/gp_asmlib.s delete mode 100644 backends/gp32/gp_clipped.c delete mode 100644 backends/gp32/memcpy.S delete mode 100644 backends/gp32/portdefs.h delete mode 100644 backends/gp32/startup.c create mode 100644 backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc create mode 100644 backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc create mode 100644 backends/platform/PalmOS/Rsc/Starter.rsrc create mode 100644 backends/platform/PalmOS/Rsc/StarterRsc.h create mode 100644 backends/platform/PalmOS/Rsc/batLow.bmp create mode 100644 backends/platform/PalmOS/Rsc/builder.rsrc create mode 100644 backends/platform/PalmOS/Rsc/builderrsc.h create mode 100644 backends/platform/PalmOS/Rsc/keyAlt.bmp create mode 100644 backends/platform/PalmOS/Rsc/keyCommand.bmp create mode 100644 backends/platform/PalmOS/Rsc/keyCtrl.bmp create mode 100644 backends/platform/PalmOS/Rsc/modules.rcp create mode 100644 backends/platform/PalmOS/Rsc/modulesrsc.h create mode 100644 backends/platform/PalmOS/Rsc/numpad.bmp create mode 100644 backends/platform/PalmOS/Src/args.cpp create mode 100644 backends/platform/PalmOS/Src/args.h create mode 100644 backends/platform/PalmOS/Src/base_event.cpp create mode 100644 backends/platform/PalmOS/Src/base_gfx.cpp create mode 100644 backends/platform/PalmOS/Src/base_mouse.cpp create mode 100644 backends/platform/PalmOS/Src/be_68k.cpp create mode 100644 backends/platform/PalmOS/Src/be_68k.h create mode 100644 backends/platform/PalmOS/Src/be_base.cpp create mode 100644 backends/platform/PalmOS/Src/be_base.h create mode 100644 backends/platform/PalmOS/Src/be_os5.cpp create mode 100644 backends/platform/PalmOS/Src/be_os5.h create mode 100644 backends/platform/PalmOS/Src/be_os5ex.cpp create mode 100644 backends/platform/PalmOS/Src/be_os5ex.h create mode 100644 backends/platform/PalmOS/Src/be_save.cpp create mode 100644 backends/platform/PalmOS/Src/be_zodiac.cpp create mode 100644 backends/platform/PalmOS/Src/be_zodiac.h create mode 100644 backends/platform/PalmOS/Src/builder/b_globals.c create mode 100644 backends/platform/PalmOS/Src/builder/b_globals.h create mode 100644 backends/platform/PalmOS/Src/builder/builder.c create mode 100644 backends/platform/PalmOS/Src/builder/enum_globals.h create mode 100644 backends/platform/PalmOS/Src/builder/queen/bq_display.c create mode 100644 backends/platform/PalmOS/Src/builder/queen/bq_graphics.c create mode 100644 backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c create mode 100644 backends/platform/PalmOS/Src/builder/queen/bq_restables.c create mode 100644 backends/platform/PalmOS/Src/builder/queen/bq_talk.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_akos.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_charset.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_costume.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_md5.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c create mode 100644 backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c create mode 100644 backends/platform/PalmOS/Src/builder/simon/bs_charset.c create mode 100644 backends/platform/PalmOS/Src/builder/simon/bs_simon.c create mode 100644 backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c create mode 100644 backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c create mode 100644 backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h create mode 100644 backends/platform/PalmOS/Src/cd_aeroplayer.cpp create mode 100644 backends/platform/PalmOS/Src/cd_aeroplayer.h create mode 100644 backends/platform/PalmOS/Src/cd_default.cpp create mode 100644 backends/platform/PalmOS/Src/cd_default.h create mode 100644 backends/platform/PalmOS/Src/cd_msa.cpp create mode 100644 backends/platform/PalmOS/Src/cd_msa.h create mode 100644 backends/platform/PalmOS/Src/cd_pockettunes.cpp create mode 100644 backends/platform/PalmOS/Src/cd_pockettunes.h create mode 100644 backends/platform/PalmOS/Src/cdaudio.h create mode 100644 backends/platform/PalmOS/Src/extend.cpp create mode 100644 backends/platform/PalmOS/Src/extend.h create mode 100644 backends/platform/PalmOS/Src/features.h create mode 100644 backends/platform/PalmOS/Src/globals.h create mode 100644 backends/platform/PalmOS/Src/i_zodiac.cpp create mode 100644 backends/platform/PalmOS/Src/i_zodiac.h create mode 100644 backends/platform/PalmOS/Src/init_golcd.cpp create mode 100644 backends/platform/PalmOS/Src/init_golcd.h create mode 100644 backends/platform/PalmOS/Src/init_mathlib.cpp create mode 100644 backends/platform/PalmOS/Src/init_mathlib.h create mode 100644 backends/platform/PalmOS/Src/init_pa1lib.cpp create mode 100644 backends/platform/PalmOS/Src/init_pa1lib.h create mode 100644 backends/platform/PalmOS/Src/init_palmos.cpp create mode 100644 backends/platform/PalmOS/Src/init_palmos.h create mode 100644 backends/platform/PalmOS/Src/init_sony.cpp create mode 100644 backends/platform/PalmOS/Src/init_sony.h create mode 100644 backends/platform/PalmOS/Src/init_stuffs.cpp create mode 100644 backends/platform/PalmOS/Src/init_stuffs.h create mode 100644 backends/platform/PalmOS/Src/launcher/app.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formCards.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formCards.h create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formEditGame.h create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formUtil.h create mode 100644 backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formmain.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/forms.h create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/forms/formtabs.h create mode 100644 backends/platform/PalmOS/Src/launcher/games.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/games.h create mode 100644 backends/platform/PalmOS/Src/launcher/launch.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/skin.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/skin.h create mode 100644 backends/platform/PalmOS/Src/launcher/start.cpp create mode 100644 backends/platform/PalmOS/Src/launcher/start.h create mode 100644 backends/platform/PalmOS/Src/missing/assert.h create mode 100644 backends/platform/PalmOS/Src/missing/ext_stdio.c create mode 100644 backends/platform/PalmOS/Src/missing/ext_stdlib.c create mode 100644 backends/platform/PalmOS/Src/missing/ext_string.c create mode 100644 backends/platform/PalmOS/Src/missing/ext_time.c create mode 100644 backends/platform/PalmOS/Src/missing/ext_unistd.c create mode 100644 backends/platform/PalmOS/Src/missing/fcntl.h create mode 100644 backends/platform/PalmOS/Src/missing/math.h create mode 100644 backends/platform/PalmOS/Src/missing/memory.h create mode 100644 backends/platform/PalmOS/Src/missing/stdio.h create mode 100644 backends/platform/PalmOS/Src/missing/stdlib.h create mode 100644 backends/platform/PalmOS/Src/missing/string.h create mode 100644 backends/platform/PalmOS/Src/missing/sys/stat.h create mode 100644 backends/platform/PalmOS/Src/missing/time.h create mode 100644 backends/platform/PalmOS/Src/missing/unistd.h create mode 100644 backends/platform/PalmOS/Src/modules.cpp create mode 100644 backends/platform/PalmOS/Src/modules.h create mode 100644 backends/platform/PalmOS/Src/native/oscalls.cpp create mode 100644 backends/platform/PalmOS/Src/native/oscalls.h create mode 100644 backends/platform/PalmOS/Src/native/pace.h create mode 100644 backends/platform/PalmOS/Src/native/pnoARM.c create mode 100644 backends/platform/PalmOS/Src/native/pnoStartup.c create mode 100644 backends/platform/PalmOS/Src/native/zodiacARM.cpp create mode 100644 backends/platform/PalmOS/Src/native/zodiacStartup.cpp create mode 100644 backends/platform/PalmOS/Src/os5_event.cpp create mode 100644 backends/platform/PalmOS/Src/os5_gfx.cpp create mode 100644 backends/platform/PalmOS/Src/os5_mouse.cpp create mode 100644 backends/platform/PalmOS/Src/os5_overlay.cpp create mode 100644 backends/platform/PalmOS/Src/os5_renderer.cpp create mode 100644 backends/platform/PalmOS/Src/os5_sound.cpp create mode 100644 backends/platform/PalmOS/Src/os5ex_sound.cpp create mode 100644 backends/platform/PalmOS/Src/palm-scumm-md5.h create mode 100644 backends/platform/PalmOS/Src/palmdefs.h create mode 100644 backends/platform/PalmOS/Src/palmversion.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_agi.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_cine.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_gob.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_kyra.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_lure.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_queen.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_saga.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_scumm.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_simon.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_sky.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_sword1.h create mode 100644 backends/platform/PalmOS/Src/prefixes/68k_sword2.h create mode 100644 backends/platform/PalmOS/Src/prefixes/compile.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_agi.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_cine.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_common.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_gob.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_kyra.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_lure.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_queen.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_saga.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_scumm.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_simon.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_sky.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_sword1.h create mode 100644 backends/platform/PalmOS/Src/prefixes/native_sword2.h create mode 100644 backends/platform/PalmOS/Src/prefixes/prefix_frontend.h create mode 100644 backends/platform/PalmOS/Src/prefixes/prefix_os5.h create mode 100644 backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h create mode 100644 backends/platform/PalmOS/Src/rumble.cpp create mode 100644 backends/platform/PalmOS/Src/rumble.h create mode 100644 backends/platform/PalmOS/Src/scumm_globals.cpp create mode 100644 backends/platform/PalmOS/Src/scumm_globals.h create mode 100644 backends/platform/PalmOS/Src/snd_pa1.cpp create mode 100644 backends/platform/PalmOS/Src/stuffs.h create mode 100644 backends/platform/PalmOS/Src/vibrate.h create mode 100644 backends/platform/PalmOS/Src/zodiac_event.cpp create mode 100644 backends/platform/PalmOS/Src/zodiac_gfx.cpp create mode 100644 backends/platform/PalmOS/Src/zodiac_mouse.cpp create mode 100644 backends/platform/PalmOS/Src/zodiac_overlay.cpp create mode 100644 backends/platform/PalmOS/scummvm.mcp create mode 100644 backends/platform/gp32/Makefile create mode 100644 backends/platform/gp32/README.GP32 create mode 100644 backends/platform/gp32/debug-gdbstub-usb.cpp create mode 100644 backends/platform/gp32/fontdata.c create mode 100644 backends/platform/gp32/gfx_splash.h create mode 100644 backends/platform/gp32/globals.h create mode 100644 backends/platform/gp32/gp32_launcher.cpp create mode 100644 backends/platform/gp32/gp32_launcher.h create mode 100644 backends/platform/gp32/gp32_main.cpp create mode 100644 backends/platform/gp32/gp32_osys.cpp create mode 100644 backends/platform/gp32/gp32_osys.h create mode 100644 backends/platform/gp32/gp32std.cpp create mode 100644 backends/platform/gp32/gp32std.h create mode 100644 backends/platform/gp32/gp32std_file.cpp create mode 100644 backends/platform/gp32/gp32std_file.h create mode 100644 backends/platform/gp32/gp32std_grap.cpp create mode 100644 backends/platform/gp32/gp32std_grap.h create mode 100644 backends/platform/gp32/gp32std_input.cpp create mode 100644 backends/platform/gp32/gp32std_input.h create mode 100644 backends/platform/gp32/gp32std_memory.cpp create mode 100644 backends/platform/gp32/gp32std_memory.h create mode 100644 backends/platform/gp32/gp32std_sound.cpp create mode 100644 backends/platform/gp32/gp32std_sound.h create mode 100644 backends/platform/gp32/gp_asmlib.s create mode 100644 backends/platform/gp32/gp_clipped.c create mode 100644 backends/platform/gp32/memcpy.S create mode 100644 backends/platform/gp32/portdefs.h create mode 100644 backends/platform/gp32/startup.c create mode 100644 backends/platform/ps2/DmaPipe.cpp create mode 100644 backends/platform/ps2/DmaPipe.h create mode 100644 backends/platform/ps2/Gs2dScreen.cpp create mode 100644 backends/platform/ps2/Gs2dScreen.h create mode 100644 backends/platform/ps2/GsDefs.h create mode 100644 backends/platform/ps2/READ_PS2.TXT create mode 100644 backends/platform/ps2/asyncfio.cpp create mode 100644 backends/platform/ps2/asyncfio.h create mode 100644 backends/platform/ps2/cd.c create mode 100644 backends/platform/ps2/cd.h create mode 100644 backends/platform/ps2/eecodyvdfs.c create mode 100644 backends/platform/ps2/eecodyvdfs.h create mode 100644 backends/platform/ps2/fileio.cpp create mode 100644 backends/platform/ps2/fileio.h create mode 100644 backends/platform/ps2/icon.cpp create mode 100644 backends/platform/ps2/iop/CoDyVDfs/Makefile create mode 100644 backends/platform/ps2/iop/CoDyVDfs/common/codyvdirx.h create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/irx_imports.h create mode 100644 backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c create mode 100644 backends/platform/ps2/irxboot.cpp create mode 100644 backends/platform/ps2/irxboot.h create mode 100644 backends/platform/ps2/ps2input.cpp create mode 100644 backends/platform/ps2/ps2input.h create mode 100644 backends/platform/ps2/ps2mutex.cpp create mode 100644 backends/platform/ps2/ps2pad.cpp create mode 100644 backends/platform/ps2/ps2pad.h create mode 100644 backends/platform/ps2/ps2time.cpp create mode 100644 backends/platform/ps2/savefile.cpp create mode 100644 backends/platform/ps2/savefile.h create mode 100644 backends/platform/ps2/sdlkeys.h create mode 100644 backends/platform/ps2/sysdefs.h create mode 100644 backends/platform/ps2/systemps2.cpp create mode 100644 backends/platform/ps2/systemps2.h create mode 100644 backends/platform/symbian/.placeholder create mode 100644 backends/platform/symbian/AdaptAllMMPs.pl create mode 100644 backends/platform/symbian/BuildPackageUpload_AllVersions.pl create mode 100644 backends/platform/symbian/BuildPackageUpload_LocalSettings.pl create mode 100644 backends/platform/symbian/README create mode 100644 backends/platform/symbian/S60/BLD.INF.in create mode 100644 backends/platform/symbian/S60/ScummVM_S60.mmp.in create mode 100644 backends/platform/symbian/S60/ScummVM_S60_App.mmp create mode 100644 backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg create mode 100644 backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg create mode 100644 backends/platform/symbian/S60v3/BLD.INF.in create mode 100644 backends/platform/symbian/S60v3/ScummVM_Loc.rss create mode 100644 backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in create mode 100644 backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg create mode 100644 backends/platform/symbian/S60v3/scummvm_reg.rss create mode 100644 backends/platform/symbian/S80/BLD.INF.in create mode 100644 backends/platform/symbian/S80/ScummVM_S80.mmp.in create mode 100644 backends/platform/symbian/S80/ScummVM_S80_App.mmp create mode 100644 backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg create mode 100644 backends/platform/symbian/S90/BLD.INF.in create mode 100644 backends/platform/symbian/S90/Scummvm_S90.mmp.in create mode 100644 backends/platform/symbian/S90/Scummvm_S90_App.mmp create mode 100644 backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg create mode 100644 backends/platform/symbian/UIQ2/BLD.INF.in create mode 100644 backends/platform/symbian/UIQ2/ScummVM.rss create mode 100644 backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in create mode 100644 backends/platform/symbian/UIQ2/Vibration.sis create mode 100644 backends/platform/symbian/UIQ2/chkstk.obj create mode 100644 backends/platform/symbian/UIQ2/lldiv.obj create mode 100644 backends/platform/symbian/UIQ2/llmul.obj create mode 100644 backends/platform/symbian/UIQ2/llshl.obj create mode 100644 backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg create mode 100644 backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg create mode 100644 backends/platform/symbian/UIQ3/BLD.INF.in create mode 100644 backends/platform/symbian/UIQ3/ScummVM.rss create mode 100644 backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in create mode 100644 backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg create mode 100644 backends/platform/symbian/UIQ3/scummvm_loc.rss create mode 100644 backends/platform/symbian/UIQ3/scummvm_reg.rss create mode 100644 backends/platform/symbian/mmp/scummvm_agi.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_base.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_cine.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_gob.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_kyra.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_lure.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_queen.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_saga.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_scumm.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_simon.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_sky.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_sword1.mmp.in create mode 100644 backends/platform/symbian/mmp/scummvm_sword2.mmp.in create mode 100644 backends/platform/symbian/res/ScummS.bmp create mode 100644 backends/platform/symbian/res/ScummSmall.bmp create mode 100644 backends/platform/symbian/res/ScummVmAif.rss create mode 100644 backends/platform/symbian/res/scummL.bmp create mode 100644 backends/platform/symbian/res/scummLarge.bmp create mode 100644 backends/platform/symbian/res/scummLargeMask.bmp create mode 100644 backends/platform/symbian/res/scummLm.bmp create mode 100644 backends/platform/symbian/res/scummSm.bmp create mode 100644 backends/platform/symbian/res/scummSmallMask.bmp create mode 100644 backends/platform/symbian/res/scummvm.rss create mode 100644 backends/platform/symbian/res/scummxLarge.bmp create mode 100644 backends/platform/symbian/res/scummxLargeMask.bmp create mode 100644 backends/platform/symbian/src/ScummApp.cpp create mode 100644 backends/platform/symbian/src/ScummApp.h create mode 100644 backends/platform/symbian/src/ScummVMApp.cpp create mode 100644 backends/platform/symbian/src/ScummVMApp.h create mode 100644 backends/platform/symbian/src/ScummVm.hrh create mode 100644 backends/platform/symbian/src/SymbianActions.cpp create mode 100644 backends/platform/symbian/src/SymbianActions.h create mode 100644 backends/platform/symbian/src/SymbianOS.cpp create mode 100644 backends/platform/symbian/src/SymbianOS.h create mode 100644 backends/platform/symbian/src/main_features.inl create mode 100644 backends/platform/symbian/src/portdefs.h delete mode 100644 backends/ps2/DmaPipe.cpp delete mode 100644 backends/ps2/DmaPipe.h delete mode 100644 backends/ps2/Gs2dScreen.cpp delete mode 100644 backends/ps2/Gs2dScreen.h delete mode 100644 backends/ps2/GsDefs.h delete mode 100644 backends/ps2/READ_PS2.TXT delete mode 100644 backends/ps2/asyncfio.cpp delete mode 100644 backends/ps2/asyncfio.h delete mode 100644 backends/ps2/cd.c delete mode 100644 backends/ps2/cd.h delete mode 100644 backends/ps2/eecodyvdfs.c delete mode 100644 backends/ps2/eecodyvdfs.h delete mode 100644 backends/ps2/fileio.cpp delete mode 100644 backends/ps2/fileio.h delete mode 100644 backends/ps2/icon.cpp delete mode 100644 backends/ps2/iop/CoDyVDfs/Makefile delete mode 100644 backends/ps2/iop/CoDyVDfs/common/codyvdirx.h delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/cdtypes.h delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/codyvdfs.c delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/codyvdfs.h delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/fiofs.c delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/fiofs.h delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/imports.lst delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/irx_imports.h delete mode 100644 backends/ps2/iop/CoDyVDfs/iop/rpcfs.c delete mode 100644 backends/ps2/irxboot.cpp delete mode 100644 backends/ps2/irxboot.h delete mode 100644 backends/ps2/ps2input.cpp delete mode 100644 backends/ps2/ps2input.h delete mode 100644 backends/ps2/ps2mutex.cpp delete mode 100644 backends/ps2/ps2pad.cpp delete mode 100644 backends/ps2/ps2pad.h delete mode 100644 backends/ps2/ps2time.cpp delete mode 100644 backends/ps2/savefile.cpp delete mode 100644 backends/ps2/savefile.h delete mode 100644 backends/ps2/sdlkeys.h delete mode 100644 backends/ps2/sysdefs.h delete mode 100644 backends/ps2/systemps2.cpp delete mode 100644 backends/ps2/systemps2.h delete mode 100644 backends/symbian/.placeholder delete mode 100644 backends/symbian/AdaptAllMMPs.pl delete mode 100644 backends/symbian/BuildPackageUpload_AllVersions.pl delete mode 100644 backends/symbian/BuildPackageUpload_LocalSettings.pl delete mode 100644 backends/symbian/README delete mode 100644 backends/symbian/S60/BLD.INF.in delete mode 100644 backends/symbian/S60/ScummVM_S60.mmp.in delete mode 100644 backends/symbian/S60/ScummVM_S60_App.mmp delete mode 100644 backends/symbian/S60/scummvm-CVS-SymbianS60v1.pkg delete mode 100644 backends/symbian/S60/scummvm-CVS-SymbianS60v2.pkg delete mode 100644 backends/symbian/S60v3/BLD.INF.in delete mode 100644 backends/symbian/S60v3/ScummVM_Loc.rss delete mode 100644 backends/symbian/S60v3/ScummVM_S60v3.mmp.in delete mode 100644 backends/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg delete mode 100644 backends/symbian/S60v3/scummvm_reg.rss delete mode 100644 backends/symbian/S80/BLD.INF.in delete mode 100644 backends/symbian/S80/ScummVM_S80.mmp.in delete mode 100644 backends/symbian/S80/ScummVM_S80_App.mmp delete mode 100644 backends/symbian/S80/scummvm-CVS-SymbianS80.pkg delete mode 100644 backends/symbian/S90/BLD.INF.in delete mode 100644 backends/symbian/S90/Scummvm_S90.mmp.in delete mode 100644 backends/symbian/S90/Scummvm_S90_App.mmp delete mode 100644 backends/symbian/S90/scummvm-CVS-SymbianS90.pkg delete mode 100644 backends/symbian/UIQ2/BLD.INF.in delete mode 100644 backends/symbian/UIQ2/ScummVM.rss delete mode 100644 backends/symbian/UIQ2/ScummVM_UIQ2.mmp.in delete mode 100644 backends/symbian/UIQ2/Vibration.sis delete mode 100644 backends/symbian/UIQ2/chkstk.obj delete mode 100644 backends/symbian/UIQ2/lldiv.obj delete mode 100644 backends/symbian/UIQ2/llmul.obj delete mode 100644 backends/symbian/UIQ2/llshl.obj delete mode 100644 backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg delete mode 100644 backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg delete mode 100644 backends/symbian/UIQ3/BLD.INF.in delete mode 100644 backends/symbian/UIQ3/ScummVM.rss delete mode 100644 backends/symbian/UIQ3/ScummVM_UIQ3.mmp.in delete mode 100644 backends/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg delete mode 100644 backends/symbian/UIQ3/scummvm_loc.rss delete mode 100644 backends/symbian/UIQ3/scummvm_reg.rss delete mode 100644 backends/symbian/mmp/scummvm_agi.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_base.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_cine.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_gob.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_kyra.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_lure.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_queen.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_saga.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_scumm.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_simon.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_sky.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_sword1.mmp.in delete mode 100644 backends/symbian/mmp/scummvm_sword2.mmp.in delete mode 100644 backends/symbian/res/ScummS.bmp delete mode 100644 backends/symbian/res/ScummSmall.bmp delete mode 100644 backends/symbian/res/ScummVmAif.rss delete mode 100644 backends/symbian/res/scummL.bmp delete mode 100644 backends/symbian/res/scummLarge.bmp delete mode 100644 backends/symbian/res/scummLargeMask.bmp delete mode 100644 backends/symbian/res/scummLm.bmp delete mode 100644 backends/symbian/res/scummSm.bmp delete mode 100644 backends/symbian/res/scummSmallMask.bmp delete mode 100644 backends/symbian/res/scummvm.rss delete mode 100644 backends/symbian/res/scummxLarge.bmp delete mode 100644 backends/symbian/res/scummxLargeMask.bmp delete mode 100644 backends/symbian/src/ScummApp.cpp delete mode 100644 backends/symbian/src/ScummApp.h delete mode 100644 backends/symbian/src/ScummVMApp.cpp delete mode 100644 backends/symbian/src/ScummVMApp.h delete mode 100644 backends/symbian/src/ScummVm.hrh delete mode 100644 backends/symbian/src/SymbianActions.cpp delete mode 100644 backends/symbian/src/SymbianActions.h delete mode 100644 backends/symbian/src/SymbianOS.cpp delete mode 100644 backends/symbian/src/SymbianOS.h delete mode 100644 backends/symbian/src/main_features.inl delete mode 100644 backends/symbian/src/portdefs.h (limited to 'backends') diff --git a/backends/PalmOS/Rsc/Resource.Frk/Starter.rsrc b/backends/PalmOS/Rsc/Resource.Frk/Starter.rsrc deleted file mode 100644 index 026c42d300..0000000000 Binary files a/backends/PalmOS/Rsc/Resource.Frk/Starter.rsrc and /dev/null differ diff --git a/backends/PalmOS/Rsc/Resource.Frk/builder.rsrc b/backends/PalmOS/Rsc/Resource.Frk/builder.rsrc deleted file mode 100644 index 18adade224..0000000000 Binary files a/backends/PalmOS/Rsc/Resource.Frk/builder.rsrc and /dev/null differ diff --git a/backends/PalmOS/Rsc/Starter.rsrc b/backends/PalmOS/Rsc/Starter.rsrc deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/backends/PalmOS/Rsc/StarterRsc.h b/backends/PalmOS/Rsc/StarterRsc.h deleted file mode 100644 index 0f2d7476f2..0000000000 --- a/backends/PalmOS/Rsc/StarterRsc.h +++ /dev/null @@ -1,392 +0,0 @@ -#ifndef STARTERRSC_H -#define STARTERRSC_H - -// Header generated by Constructor for Palm OS (R) 1.9.1 -// -// Generated at 20:53:03 on lundi 5 juin 2006 -// -// Generated for file: Starter.rsrc -// -// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE -// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST -// -// Palm App Name: "ScummVM" -// -// Palm App Version: "1.0" - - -// Resource: tFRM 1000 -#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) -#define MainCardsButton 1003 //(Left Origin = 135, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 0, Font = Standard) -#define MainAboutButton 1012 //(Left Origin = 148, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 1, Font = Standard) -#define MainMSBitMap 1100 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1100, Usable = 0) -#define MainMSNoneBitMap 1110 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1110, Usable = 0) -#define MainUnnamed1010BitMap 2000 //(Left Origin = 148, Top Origin = 1, Bitmap Resource ID = 2000, Usable = 1) - -// Resource: tFRM 1200 -#define SkinsForm 1200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1203) -#define SkinsOKButton 1202 //(Left Origin = 5, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define SkinsCancelButton 1203 //(Left Origin = 43, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define SkinsDeleteButton 1205 //(Left Origin = 119, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define SkinsBeamButton 1206 //(Left Origin = 81, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define SkinsSoundClickCheckbox 1204 //(Left Origin = 5, Top Origin = 118, Width = 93, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define SkinsSkinList 1201 //(Left Origin = 5, Top Origin = 17, Width = 146, Usable = 1, Font = Standard, Visible Items = 9) - -// Resource: tFRM 1500 -#define CardSlotForm 1500 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define CardSlotOkButton 1510 //(Left Origin = 3, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define CardSlotCancelButton 1511 //(Left Origin = 44, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) - -// Resource: tFRM 2700 -#define MiscForm 2700 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define MiscOKButton 2710 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define MiscCancelButton 2711 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) - -// Resource: tFRM 2000 -#define ConvertForm 2000 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define ConvertUnnamed2001Label 2001 //(Left Origin = 7, Top Origin = 4, Usable = 1, Font = Standard) -#define ConvertUnnamed2002Label 2002 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold) - -// Resource: tFRM 2100 -#define BeamForm 2100 //(Left Origin = 2, Top Origin = 72, Width = 156, Height = 86, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define BeamSendButton 2105 //(Left Origin = 5, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define BeamCancelButton 2106 //(Left Origin = 47, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define BeamMathlibCheckbox 2101 //(Left Origin = 4, Top Origin = 28, Width = 55, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) -#define BeamGamesCheckbox 2103 //(Left Origin = 4, Top Origin = 40, Width = 86, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) -#define BeamSkinCheckbox 2104 //(Left Origin = 4, Top Origin = 52, Width = 84, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) -#define BeamUnnamed2102Label 2102 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold) - -// Resource: tFRM 2200 -#define MusicForm 2200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define MusicOKButton 2210 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define MusicCancelButton 2211 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) - -// Resource: tFRM 2300 -#define TabMusicForm 2300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabMusicMusicCheckbox 2301 //(Left Origin = 4, Top Origin = 12, Width = 100, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) -#define TabMusicMultiMidiCheckbox 2308 //(Left Origin = 4, Top Origin = 24, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMusicTempoField 2302 //(Left Origin = 54, Top Origin = 36, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabMusicTitleLabel 2303 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) -#define TabMusicUnnamed2304Label 2304 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard) -#define TabMusicUnnamed2305Label 2305 //(Left Origin = 16, Top Origin = 60, Usable = 1, Font = Standard) -#define TabMusicUnnamed2306Label 2306 //(Left Origin = 18, Top Origin = 36, Usable = 1, Font = Standard) -#define TabMusicUnnamed2307Label 2307 //(Left Origin = 72, Top Origin = 36, Usable = 1, Font = Standard) -#define TabMusicUnnamed2309Label 2309 //(Left Origin = 28, Top Origin = 72, Usable = 1, Font = Standard) -#define TabMusicRateList 2311 //(Left Origin = 54, Top Origin = 73, Width = 55, Usable = 0, Font = Standard, Visible Items = 3) -#define TabMusicQualityList 2313 //(Left Origin = 54, Top Origin = 60, Width = 60, Usable = 0, Font = Standard, Visible Items = 3) -#define TabMusicDriverList 2331 //(Left Origin = 54, Top Origin = 24, Width = 65, Usable = 0, Font = Standard, Visible Items = 4) -#define TabMusicRatePopTrigger 2310 //(Left Origin = 54, Top Origin = 72, Width = 55, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2311) -#define TabMusicQualityPopTrigger 2312 //(Left Origin = 54, Top Origin = 60, Width = 50, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2313) -#define TabMusicDriverPopTrigger 2330 //(Left Origin = 54, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2331) - -// Resource: tFRM 2500 -#define TabAudioCDForm 2500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabAudioCDMP3Checkbox 2502 //(Left Origin = 4, Top Origin = 12, Width = 125, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabAudioCDLengthSecsField 2504 //(Left Origin = 112, Top Origin = 60, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabAudioCDFirstTrackField 2507 //(Left Origin = 112, Top Origin = 50, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabAudioCDUnnamed2501Label 2501 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) -#define TabAudioCDUnnamed2503Label 2503 //(Left Origin = 20, Top Origin = 60, Usable = 1, Font = Standard) -#define TabAudioCDUnnamed2505Label 2505 //(Left Origin = 130, Top Origin = 61, Usable = 1, Font = Standard) -#define TabAudioCDUnnamed2506Label 2506 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard) -#define TabAudioCDUnnamed2508Label 2508 //(Left Origin = 25, Top Origin = 24, Usable = 1, Font = Standard) -#define TabAudioCDUnnamed2511Label 2511 //(Left Origin = 21, Top Origin = 36, Usable = 1, Font = Standard) -#define TabAudioCDUnnamed2514Label 2514 //(Left Origin = 4, Top Origin = 80, Usable = 1, Font = Standard) -#define TabAudioCDDriverList 2510 //(Left Origin = 58, Top Origin = 24, Width = 90, Usable = 0, Font = Standard, Visible Items = 4) -#define TabAudioCDFormatList 2513 //(Left Origin = 58, Top Origin = 36, Width = 70, Usable = 0, Font = Standard, Visible Items = 2) -#define TabAudioCDDriverPopTrigger 2509 //(Left Origin = 58, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2510) -#define TabAudioCDFormatPopTrigger 2512 //(Left Origin = 58, Top Origin = 36, Width = 70, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2513) - -// Resource: tFRM 2600 -#define TabVolumeForm 2600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabVolumeUnnamed2601Label 2601 //(Left Origin = 29, Top Origin = 69, Usable = 1, Font = Standard) -#define TabVolumeUnnamed2603Label 2603 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) -#define TabVolumeUnnamed2606Label 2606 //(Left Origin = 26, Top Origin = 15, Usable = 1, Font = Standard) -#define TabVolumeUnnamed2607Label 2607 //(Left Origin = 12, Top Origin = 30, Usable = 1, Font = Standard) -#define TabVolumeUnnamed2608Label 2608 //(Left Origin = 20, Top Origin = 45, Usable = 1, Font = Standard) -#define TabVolumeUnnamed2610Label 2610 //(Left Origin = 14, Top Origin = 84, Usable = 1, Font = Standard) -#define TabVolumeMusicSliderControl 2602 //(Left Origin = 58, Top Origin = 12, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) -#define TabVolumeSfxSliderControl 2604 //(Left Origin = 58, Top Origin = 27, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) -#define TabVolumePalmSliderControl 2605 //(Left Origin = 58, Top Origin = 66, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) -#define TabVolumeSpeechSliderControl 2609 //(Left Origin = 58, Top Origin = 42, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) -#define TabVolumeAudioCDSliderControl 2611 //(Left Origin = 58, Top Origin = 81, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) - -// Resource: tFRM 2800 -#define TabMiscPalmOSForm 2800 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabMiscPalmOSVibratorCheckbox 2802 //(Left Origin = 4, Top Origin = 12, Width = 128, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSNoAutoOffCheckbox 2803 //(Left Origin = 4, Top Origin = 24, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSStdPaletteCheckbox 2804 //(Left Origin = 4, Top Origin = 84, Width = 146, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSLargerStackCheckbox 2805 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSAdvancedCheckbox 2806 //(Left Origin = 4, Top Origin = 96, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSArrowCheckbox 2807 //(Left Origin = 4, Top Origin = 72, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSExitLauncherCheckbox 2810 //(Left Origin = 4, Top Origin = 48, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSStylusClickCheckbox 2811 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscPalmOSTabTitlePalmLabel 2801 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) - -// Resource: tFRM 2900 -#define TabMiscScummVMForm 2900 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 90, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabMiscScummVMAutosaveCheckbox 2902 //(Left Origin = 4, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscScummVMDebugCheckbox 2904 //(Left Origin = 4, Top Origin = 12, Width = 90, Height = 12, Usable = 0, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscScummVMDemoCheckbox 2905 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscScummVMCopyProtectionCheckbox 2906 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscScummVMAltIntroCheckbox 2908 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscScummVMDebugLevelField 2907 //(Left Origin = 101, Top Origin = 12, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 1, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabMiscScummVMAutosaveField 2910 //(Left Origin = 101, Top Origin = 24, Width = 20, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabMiscScummVMTabTitleScummLabel 2901 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabMiscScummVMUnnamed2903Label 2903 //(Left Origin = 97, Top Origin = 12, Usable = 1, Font = Standard) -#define TabMiscScummVMUnnamed2909Label 2909 //(Left Origin = 97, Top Origin = 24, Usable = 1, Font = Standard) -#define TabMiscScummVMUnnamed2911Label 2911 //(Left Origin = 123, Top Origin = 24, Usable = 1, Font = Standard) - -// Resource: tFRM 3000 -#define GameEditForm 3000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1411) -#define GameEditOKButton 3020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define GameEditCancelButton 3021 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define GameEditDeleteButton 3023 //(Left Origin = 109, Top Origin = 139, Width = 42, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define GameEditUnnamed3022GraffitiShift 3022 //(Left Origin = 87, Top Origin = 140) - -// Resource: tFRM 3100 -#define TabGameInfoForm 3100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabGameInfoEntryNameField 3102 //(Left Origin = 4, Top Origin = 12, Width = 151, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 50, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) -#define TabGameInfoPathField 3104 //(Left Origin = 37, Top Origin = 38, Width = 118, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 150, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) -#define TabGameInfoGameField 3106 //(Left Origin = 37, Top Origin = 64, Width = 52, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 15, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) -#define TabGameInfoUnnamed3101Label 3101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabGameInfoUnnamed3103Label 3103 //(Left Origin = 11, Top Origin = 38, Usable = 1, Font = Standard) -#define TabGameInfoUnnamed3105Label 3105 //(Left Origin = 6, Top Origin = 64, Usable = 1, Font = Standard) -#define TabGameInfoUnnamed3107Label 3107 //(Left Origin = 4, Top Origin = 79, Usable = 1, Font = Standard) -#define TabGameInfoEngineList 3109 //(Left Origin = 37, Top Origin = 57, Width = 115, Usable = 0, Font = Standard, Visible Items = 3) -#define TabGameInfoBrowsePushButton 3110 //(Left Origin = 11, Top Origin = 50, Width = 22, Height = 12, Usable = 1, Group ID = 0, Font = Standard) -#define TabGameInfoEnginePopTrigger 3108 //(Left Origin = 37, Top Origin = 79, Width = 115, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3109) - -// Resource: tFRM 3200 -#define TabGameDisplayForm 3200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 95, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabGameDisplayFilterCheckbox 3205 //(Left Origin = 4, Top Origin = 36, Width = 80, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) -#define TabGameDisplayFullscreenCheckbox 3206 //(Left Origin = 4, Top Origin = 60, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameDisplayAspectRatioCheckbox 3207 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameDisplayUnnamed3201Label 3201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabGameDisplayUnnamed3202Label 3202 //(Left Origin = 5, Top Origin = 24, Usable = 1, Font = Standard) -#define TabGameDisplayUnnamed3208Label 3208 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) -#define TabGameDisplayGfxListList 3204 //(Left Origin = 38, Top Origin = 12, Width = 75, Usable = 0, Font = Standard, Visible Items = 2) -#define TabGameDisplayRenderList 3210 //(Left Origin = 38, Top Origin = 24, Width = 75, Usable = 0, Font = Standard, Visible Items = 6) -#define TabGameDisplayGfxPopupPopTrigger 3203 //(Left Origin = 38, Top Origin = 12, Width = 80, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3204) -#define TabGameDisplayRenderPopTrigger 3209 //(Left Origin = 38, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3209) - -// Resource: tFRM 3300 -#define TabGameOptionsForm 3300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabGameOptionsLoadSlotCheckbox 3302 //(Left Origin = 4, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameOptionsStartRoomCheckbox 3303 //(Left Origin = 4, Top Origin = 36, Width = 84, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameOptionsAmigaCheckbox 3306 //(Left Origin = 4, Top Origin = 48, Width = 81, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameOptionsSubtitlesCheckbox 3307 //(Left Origin = 4, Top Origin = 60, Width = 82, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameOptionsTalkSpeedCheckbox 3308 //(Left Origin = 4, Top Origin = 12, Width = 66, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabGameOptionsLoadSlotField 3304 //(Left Origin = 92, Top Origin = 24, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 2, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabGameOptionsStartRoomField 3305 //(Left Origin = 92, Top Origin = 36, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabGameOptionsTalkSpeedField 3309 //(Left Origin = 92, Top Origin = 12, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabGameOptionsUnnamed3301Label 3301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabGameOptionsUnnamed3314Label 3314 //(Left Origin = 88, Top Origin = 24, Usable = 1, Font = Standard) -#define TabGameOptionsUnnamed3315Label 3315 //(Left Origin = 88, Top Origin = 36, Usable = 1, Font = Standard) -#define TabGameOptionsUnnamed3316Label 3316 //(Left Origin = 88, Top Origin = 12, Usable = 1, Font = Standard) -#define TabGameOptionsUnnamed3317Label 3317 //(Left Origin = 88, Top Origin = 48, Usable = 1, Font = Standard) -#define TabGameOptionsUnnamed3318Label 3318 //(Left Origin = 88, Top Origin = 60, Usable = 1, Font = Standard) -#define TabGameOptionsLanguageList 3311 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 5) -#define TabGameOptionsPlatformList 3313 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 4) -#define TabGameOptionsLanguagePopTrigger 3310 //(Left Origin = 90, Top Origin = 60, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3311) -#define TabGameOptionsPlatformPopTrigger 3312 //(Left Origin = 90, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3313) - -// Resource: tFRM 3400 -#define ImportForm 3400 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define ImportUnnamed3401Label 3401 //(Left Origin = 4, Top Origin = 4, Usable = 1, Font = Standard) -#define ImportUnnamed3402Label 3402 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold) - -// Resource: tFRM 1400 -#define EngineForm 1400 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define EngineOkButton 1403 //(Left Origin = 4, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define EngineCancelButton 1420 //(Left Origin = 45, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define EngineUnnamed1402Label 1402 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold) -#define EngineListList 1401 //(Left Origin = 4, Top Origin = 30, Width = 148, Usable = 1, Font = Standard, Visible Items = 9) - -// Resource: tFRM 4000 -#define InfoForm 4000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define InfoOKButton 4020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) - -// Resource: tFRM 4100 -#define TabInfoAboutForm 4100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 125, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabInfoAboutTabTitleAboutLabel 4101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabInfoAboutUnnamed4103Label 4103 //(Left Origin = 23, Top Origin = 58, Usable = 1, Font = Bold) -#define TabInfoAboutUnnamed4104Label 4104 //(Left Origin = 34, Top Origin = 70, Usable = 1, Font = Standard) -#define TabInfoAboutUnnamed4105Label 4105 //(Left Origin = 8, Top Origin = 82, Usable = 1, Font = Bold) - -// Resource: tFRM 4200 -#define TabInfoVersionForm 4200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabInfoVersionTabTitleAboutLabel 4201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabInfoVersionUnnamed4202Label 4202 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) -#define TabInfoVersionUnnamed4203Label 4203 //(Left Origin = 24, Top Origin = 24, Usable = 1, Font = Standard) -#define TabInfoVersionUnnamed4204Label 4204 //(Left Origin = 4, Top Origin = 42, Usable = 1, Font = Bold) -#define TabInfoVersionUnnamed4205Label 4205 //(Left Origin = 5, Top Origin = 53, Usable = 1, Font = Standard) -#define TabInfoVersionUnnamed4206Label 4206 //(Left Origin = 4, Top Origin = 72, Usable = 1, Font = Bold) -#define TabInfoVersionUnnamed4207Label 4207 //(Left Origin = 4, Top Origin = 84, Usable = 1, Font = Standard) - -// Resource: tFRM 4300 -#define TabInfoSystemForm 4300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabInfoSystemTabTitleAboutLabel 4301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabInfoSystemUnnamed4302Label 4302 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) -#define TabInfoSystemUnnamed4303Label 4303 //(Left Origin = 13, Top Origin = 24, Usable = 1, Font = Standard) -#define TabInfoSystemUnnamed4304Label 4304 //(Left Origin = 5, Top Origin = 36, Usable = 1, Font = Standard) -#define TabInfoSystemUnnamed4305Label 4305 //(Left Origin = 96, Top Origin = 0, Usable = 1, Font = Standard) -#define TabInfoSystemUnnamed4306Label 4306 //(Left Origin = 132, Top Origin = 0, Usable = 1, Font = Standard) - -// Resource: tFRM 1600 -#define TabCardConfigForm 1600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabCardConfigCacheCheckbox 1604 //(Left Origin = 4, Top Origin = 62, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabCardConfigLedCheckbox 1608 //(Left Origin = 4, Top Origin = 50, Width = 130, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabCardConfigCacheSizeField 1606 //(Left Origin = 68, Top Origin = 74, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) -#define TabCardConfigTabTitleAboutLabel 1601 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabCardConfigUnnamed1605Label 1605 //(Left Origin = 21, Top Origin = 74, Usable = 1, Font = Standard) -#define TabCardConfigUnnamed1607Label 1607 //(Left Origin = 88, Top Origin = 74, Usable = 1, Font = Standard) -#define TabCardConfigSlotList 1620 //(Left Origin = 7, Top Origin = 14, Width = 146, Usable = 1, Font = Standard, Visible Items = 3) - -// Resource: tFRM 1700 -#define TabCardGameListForm 1700 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabCardGameListMoveCheckbox 1702 //(Left Origin = 4, Top Origin = 12, Width = 143, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabCardGameListDeleteCheckbox 1703 //(Left Origin = 4, Top Origin = 24, Width = 142, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabCardGameListConfirmCheckbox 1704 //(Left Origin = 4, Top Origin = 36, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabCardGameListUnnamed1701Label 1701 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) - -// Resource: tFRM 3500 -#define TabMiscExtsForm 3500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 80, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define TabMiscExtsLightspeedCheckbox 3502 //(Left Origin = 4, Top Origin = 24, Width = 95, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscExtsGolcdCheckbox 3505 //(Left Origin = 4, Top Origin = 12, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) -#define TabMiscExtsTabTitleMoreLabel 3501 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) -#define TabMiscExtsNothingLabel 3506 //(Left Origin = 4, Top Origin = 36, Usable = 0, Font = Standard) -#define TabMiscExtsLightspeedList 3504 //(Left Origin = 96, Top Origin = 24, Width = 50, Usable = 0, Font = Standard, Visible Items = 3) -#define TabMiscExtsLightspeedPopTrigger 3503 //(Left Origin = 96, Top Origin = 24, Width = 60, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3504) - - -// Resource: Talt 1001 -#define RomIncompatibleAlert 1001 -#define RomIncompatibleOK 0 - -// Resource: Talt 1000 -#define FrmWarnAlert 1000 -#define FrmWarnOK 0 - -// Resource: Talt 1100 -#define FrmErrorAlert 1100 -#define FrmErrorCancel 0 - -// Resource: Talt 1300 -#define FrmConfirmAlert 1300 -#define FrmConfirmYes 0 -#define FrmConfirmNo 1 - -// Resource: Talt 1400 -#define FrmInfoAlert 1400 -#define FrmInfoOK 0 - - -// Resource: MBAR 1000 -#define MainFormMenuBar 1000 - - -// Resource: MENU 1000 -#define MainOptionsMenu 1000 -#define MainOptionsMisc 1000 // Command Key: I -#define MainOptionsSkins 1001 -#define MainOptionsBeam 1003 -#define MainOptionsAbout 1005 - -// Resource: MENU 1100 -#define MainGamesMenu 1100 -#define MainGamesNew 1100 // Command Key: N -#define MainGamesEdit 1101 // Command Key: E -#define MainGamesMusicSound 1102 // Command Key: M -#define MainGamesDelete 1103 -#define MainGamesMemoryCard 1105 // Command Key: C - - -// Resource: tSTR 9991 -#define ClieCatString 9991 // "32779" - -// Resource: tSTR 9990 -#define ClieDescString 9990 // "Play your favorite Point'n'Click games" - - -// Resource: PICT 1001 -#define Bitmap 1001 - -// Resource: PICT 1002 -#define Bitmap2 1002 - -// Resource: PICT 1008 -#define Bitmap3 1008 - -// Resource: PICT 1011 -#define Bitmap4 1011 - -// Resource: PICT 1012 -#define Bitmap5 1012 - -// Resource: PICT 1018 -#define Bitmap6 1018 - -// Resource: PICT 2000 -#define infoBitmap 2000 - -// Resource: PICT 1100 -#define msOnBitmap 1100 - -// Resource: PICT 1009 -#define Bitmap7 1009 - -// Resource: PICT 1010 -#define Bitmap8 1010 - -// Resource: PICT 1110 -#define msNoneBitmap 1110 - -// Resource: PICT 1020 -#define BitmapID1020Bitmap 1020 - -// Resource: PICT 1019 -#define BitmapID1019Bitmap 1019 - -// Resource: PICT 1200 -#define msOnD2Bitmap 1200 - -// Resource: PICT 1300 -#define msNoneD2Bitmap 1300 - -// Resource: PICT 2100 -#define infoD2Bitmap 2100 - -// Resource: PICT 1501 -#define ScummVMlogoD1Bitmap 1501 - -// Resource: PICT 1502 -#define ScummVMlogoD2Bitmap 1502 - -// Resource: PICT 1000 -#define icon16bitD2Bitmap 1000 - - -// Resource: tbmf 1000 -#define Icon_infoBitmapFamily 1000 - -// Resource: tbmf 1100 -#define MsOnBitmapFamily 1100 - -// Resource: tbmf 2000 -#define InfoBitmapFamily 2000 - -// Resource: tbmf 1110 -#define MsNoneBitmapFamily 1110 - -// Resource: tbmf 1200 -#define LogoBitmapFamily 1200 - - -// Resource: taif 1000 -#define Largeicons12and8bitsAppIconFamily 1000 - -// Resource: taif 1001 -#define Smallicons12and8bitsAppIconFamily 1001 - - -#endif // STARTERRSC_H diff --git a/backends/PalmOS/Rsc/batLow.bmp b/backends/PalmOS/Rsc/batLow.bmp deleted file mode 100644 index 1d18131450..0000000000 Binary files a/backends/PalmOS/Rsc/batLow.bmp and /dev/null differ diff --git a/backends/PalmOS/Rsc/builder.rsrc b/backends/PalmOS/Rsc/builder.rsrc deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/backends/PalmOS/Rsc/builderrsc.h b/backends/PalmOS/Rsc/builderrsc.h deleted file mode 100644 index ae91f3b924..0000000000 --- a/backends/PalmOS/Rsc/builderrsc.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef BUILDERRSC_H -#define BUILDERRSC_H - -// Header generated by Constructor for Palm OS (R) 1.9.1 -// -// Generated at 17:44:44 on mardi 16 mars 2004 -// -// Generated for file: Builder.rsrc -// -// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE -// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST -// -// Palm App Name: "ScummBuilder" -// -// Palm App Version: "1.0" - - -// Resource: tFRM 1000 -#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) -#define MainBuildButton 1001 //(Left Origin = 58, Top Origin = 138, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define MainUnnamed1002Label 1002 //(Left Origin = 0, Top Origin = 17, Usable = 1, Font = Standard) - -// Resource: tFRM 1100 -#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) -#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) -#define AboutTitleLabel 1102 //(Left Origin = 61, Top Origin = 23, Usable = 1, Font = Large) -#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) -#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) - - -// Resource: Talt 1001 -#define RomIncompatibleAlert 1001 -#define RomIncompatibleOK 0 - -// Resource: Talt 1000 -#define TestAlert 1000 -#define TestOK 0 - - -// Resource: MBAR 1000 -#define MainFormMenuBar 1000 - - -// Resource: MENU 1000 -#define MainOptionsMenu 1000 -#define MainOptionsAboutStarterApp 1000 - - -// Resource: PICT 1001 -#define Largeicon1bitBitmap 1001 - -// Resource: PICT 1002 -#define Largeicon2bitBitmap 1002 - -// Resource: PICT 1008 -#define Largeicon8bitBitmap 1008 - -// Resource: PICT 1011 -#define Smallicon1bitBitmap 1011 - -// Resource: PICT 1012 -#define Smallicon2bitBitmap 1012 - -// Resource: PICT 1018 -#define Smallicon8bitBitmap 1018 - -// Resource: PICT 21001 -#define LargeiconX21bitBitmap 21001 - -// Resource: PICT 21002 -#define LargeiconX22bitBitmap 21002 - -// Resource: PICT 21008 -#define LargeiconX28bitBitmap 21008 - -// Resource: PICT 21011 -#define SmalliconX21bitBitmap 21011 - -// Resource: PICT 21018 -#define SmalliconX28bitBitmap 21018 - -// Resource: PICT 21012 -#define SmalliconX22bitBitmap 21012 - - -// Resource: taif 1000 -#define Largeicons12and8bitsAppIconFamily 1000 - -// Resource: taif 1001 -#define Smallicons12and8bitsAppIconFamily 1001 - - -#endif // BUILDERRSC_H diff --git a/backends/PalmOS/Rsc/keyAlt.bmp b/backends/PalmOS/Rsc/keyAlt.bmp deleted file mode 100644 index 28165394f8..0000000000 Binary files a/backends/PalmOS/Rsc/keyAlt.bmp and /dev/null differ diff --git a/backends/PalmOS/Rsc/keyCommand.bmp b/backends/PalmOS/Rsc/keyCommand.bmp deleted file mode 100644 index 1324037cd3..0000000000 Binary files a/backends/PalmOS/Rsc/keyCommand.bmp and /dev/null differ diff --git a/backends/PalmOS/Rsc/keyCtrl.bmp b/backends/PalmOS/Rsc/keyCtrl.bmp deleted file mode 100644 index fed20fd8d0..0000000000 Binary files a/backends/PalmOS/Rsc/keyCtrl.bmp and /dev/null differ diff --git a/backends/PalmOS/Rsc/modules.rcp b/backends/PalmOS/Rsc/modules.rcp deleted file mode 100644 index 7a7afe96be..0000000000 --- a/backends/PalmOS/Rsc/modules.rcp +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -BITMAP ID 3100 -BEGIN - BITMAP "keyCommand.bmp" BPP 1 DENSITY 2 -END -BITMAP ID 3101 -BEGIN - BITMAP "keyAlt.bmp" BPP 1 DENSITY 2 -END -BITMAP ID 3102 -BEGIN - BITMAP "keyCtrl.bmp" BPP 1 DENSITY 2 -END -BITMAP ID 3120 -BEGIN - BITMAP "batLow.bmp" BPP 1 DENSITY 2 -END -BITMAP ID 3130 -BEGIN - BITMAP "numpad.bmp" BPP 1 DENSITY 2 -END - -/* -BITMAP ID 3100 "keyCommand.bmp" DENSITY 2 -BITMAP ID 3101 "keyAlt.bmp" DENSITY 2 -BITMAP ID 3102 "keyCtrl.bmp" DENSITY 2 -BITMAP ID 3120 "batLow.bmp" DENSITY 2 -BITMAP ID 3130 "numpad.bmp" DENSITY 2 -*/ -BITMAP ID 3000 "keyCommand.bmp" DENSITY 1 -BITMAP ID 3001 "keyAlt.bmp" DENSITY 1 -BITMAP ID 3002 "keyCtrl.bmp" DENSITY 1 -BITMAP ID 3020 "batLow.bmp" DENSITY 1 -BITMAP ID 3030 "numpad.bmp" DENSITY 1 - -ALERT ID 1200 - DEFAULTBUTTON 0 - ERROR -BEGIN - TITLE "ScummVM Fatal Error" - MESSAGE "^1" - BUTTONS "Exit" -END - diff --git a/backends/PalmOS/Rsc/modulesrsc.h b/backends/PalmOS/Rsc/modulesrsc.h deleted file mode 100644 index 14b32ee0b6..0000000000 --- a/backends/PalmOS/Rsc/modulesrsc.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef MODULESRSC_H -#define MODULESRSC_H - -#define FrmFatalErrorAlert 1200 - -#endif diff --git a/backends/PalmOS/Rsc/numpad.bmp b/backends/PalmOS/Rsc/numpad.bmp deleted file mode 100644 index 7763d76c05..0000000000 Binary files a/backends/PalmOS/Rsc/numpad.bmp and /dev/null differ diff --git a/backends/PalmOS/Src/args.cpp b/backends/PalmOS/Src/args.cpp deleted file mode 100644 index 941072aff8..0000000000 --- a/backends/PalmOS/Src/args.cpp +++ /dev/null @@ -1,106 +0,0 @@ -#include -#include "palmdefs.h" -#include "args.h" -#include "pace.h" -#include "endianutils.h" - -Char **ArgsInit() { - // first 4 bytes keep the real address of the chunk - MemHandle argvH = MemHandleNew(sizeof(Char *) + (MAX_ARG * sizeof(Char **) + 2)); - // real addr - Char *lockP = (Char *)MemHandleLock(argvH); - // 4byte aligned - Char **argvP = (Char **)ALIGN_4BYTE(lockP); - // save real addr - argvP[0] = lockP; - // initial position - argvP++; - - for(UInt8 count = 0; count < MAX_ARG; count++) - argvP[count] = NULL; - - return argvP; -} - -void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP) { - if (argP) { - MemHandle newArg; - UInt16 len2 = 0; - UInt16 len1 = StrLen(argP); - - if (len1 > 0) { - if (parmP) - len2 = StrLen(parmP); - - (*countArgP)++; - newArg = MemHandleNew(len1 + len2 + 1); // +1 = NULL CHAR - *argvP = (Char *)MemHandleLock(newArg); - StrCopy(*argvP, argP); - - if (parmP) - StrCat(*argvP, parmP); - } - } -} - -void ArgsFree(Char **argvP) { - if (!argvP) - return; - - MemHandle oldH; - - for(UInt8 count = 0; count < MAX_ARG; count++) - if (argvP[count]) { - oldH = MemPtrRecoverHandle(argvP[count]); - MemHandleUnlock(oldH); - MemHandleFree(oldH); - } - - argvP--; - oldH = MemPtrRecoverHandle(argvP[0]); - MemHandleUnlock(oldH); - MemHandleFree(oldH); -} - -void ArgsSetOwner(Char **argvP, UInt16 owner) { - if (!argvP) - return; - - MemHandle oldH; - - for(UInt8 count = 0; count < MAX_ARG; count++) - if (argvP[count]) { - oldH = MemPtrRecoverHandle(argvP[count]); - MemHandleSetOwner(oldH, owner); - } - - argvP--; - oldH = MemPtrRecoverHandle(argvP[0]); - MemHandleSetOwner(oldH, owner); -} - -void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm) { - if (arm) { - for(UInt8 count = 0; count < MAX_ARG; count++) - if (argvP[count]) - argvP[count] = (Char *)ByteSwap32(argvP[count]); - } - - FtrSet(appFileCreator, ftrArgsData , (UInt32)argvP); - FtrSet(appFileCreator, ftrArgsCount, (UInt32)countArg); -} - -void ArgsExportRelease(Boolean arm) { - if (arm) { - Char **argvP; - Err e = FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP); - - if (argvP) - for(UInt8 count = 0; count < MAX_ARG; count++) - if (argvP[count]) - argvP[count] = (Char *)ByteSwap32(argvP[count]); - } - - FtrUnregister(appFileCreator, ftrArgsCount); - FtrUnregister(appFileCreator, ftrArgsData); -} diff --git a/backends/PalmOS/Src/args.h b/backends/PalmOS/Src/args.h deleted file mode 100644 index f8b5cb9aa0..0000000000 --- a/backends/PalmOS/Src/args.h +++ /dev/null @@ -1,43 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef ARGS_H -#define ARGS_H - -#define MAX_ARG 25 - -#define ftrArgsData 1300 -#define ftrArgsCount 1301 -#define ftrVars 1302 -#define ftrStack 1303 - -Char **ArgsInit(); -void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP); -void ArgsFree(Char **argvP); -void ArgsSetOwner(Char **argvP, UInt16 owner); - -void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm); -void ArgsExportRelease(Boolean arm); - -#endif diff --git a/backends/PalmOS/Src/base_event.cpp b/backends/PalmOS/Src/base_event.cpp deleted file mode 100644 index 9a5e972bbd..0000000000 --- a/backends/PalmOS/Src/base_event.cpp +++ /dev/null @@ -1,333 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_base.h" - -#if defined(COMPILE_OS5) && defined(PALMOS_ARM) -extern "C" void SysEventGet(EventType *eventP, Int32 timeout); -extern "C" void SysEventAddToQueue (const EventType *eventP); -#endif - -void OSystem_PalmBase::timer_handler() { - UInt32 msecs = getMillis(); - - if (_timer.active && (msecs >= _timer.nextExpiry)) { - _timer.duration = _timer.callback(_timer.duration); - _timer.nextExpiry = msecs + _timer.duration; - } -} - -void OSystem_PalmBase::battery_handler() { - // check battery level every 15secs - if ((TimGetTicks() - _batCheckLast) > _batCheckTicks) { - UInt16 voltage, warnThreshold, criticalThreshold; - Boolean pluggedIn; - voltage = SysBatteryInfoV20(false, &warnThreshold, &criticalThreshold, NULL, NULL, &pluggedIn); - - if (!pluggedIn) { - if (voltage <= warnThreshold) { - if (!_showBatLow) { - _showBatLow = true; - draw_osd(kDrawBatLow, _screenDest.w - 18, -16, true, 2); - displayMessageOnOSD("Battery low."); - } - } else { - if (_showBatLow) { - _showBatLow = false; - draw_osd(kDrawBatLow, _screenDest.w - 18, -16, false); - } - } - - if (voltage <= criticalThreshold) { - ::EventType event; - event.eType = keyDownEvent; - event.data.keyDown.chr = vchrPowerOff; - event.data.keyDown.modifiers = commandKeyMask; -#if defined(COMPILE_OS5) && defined(PALMOS_ARM) - SysEventAddToQueue(&event); -#else - EvtAddEventToQueue(&event); -#endif - } - } - - _batCheckLast = TimGetTicks(); - } -} - -bool OSystem_PalmBase::pollEvent(Event &event) { - ::EventType ev; - Boolean handled; - UInt32 keyCurrentState; - Coord x, y; - - battery_handler(); - timer_handler(); - sound_handler(); - - for(;;) { -#if defined(COMPILE_OS5) && defined(PALMOS_ARM) - SysEventGet(&ev, evtNoWait); -#else - EvtGetEvent(&ev, evtNoWait); -#endif - // check for hardkey repeat for mouse emulation - keyCurrentState = KeyCurrentState(); - // check_hard_keys(); - - if (!(keyCurrentState & _keyMouseMask)) { - _lastKeyRepeat = 0; - } else { - if (getMillis() >= (_keyMouseRepeat + _keyMouseDelay)) { - _keyMouseRepeat = getMillis(); - - if (gVars->arrowKeys) { - if (keyCurrentState & _keyMouse.bitUp) - event.kbd.keycode = 273; - else if (keyCurrentState & _keyMouse.bitDown) - event.kbd.keycode = 274; - else if (keyCurrentState & _keyMouse.bitLeft) - event.kbd.keycode = 276; - else if (keyCurrentState & _keyMouse.bitRight) - event.kbd.keycode = 275; - else if (keyCurrentState & _keyMouse.bitButLeft) - event.kbd.keycode = chrLineFeed; - - event.type = EVENT_KEYDOWN; - event.kbd.ascii = event.kbd.keycode; - event.kbd.flags = 0; - - } else { - Int8 sx = 0; - Int8 sy = 0; - - if (keyCurrentState & _keyMouse.bitUp) - sy = -1; - else if (keyCurrentState & _keyMouse.bitDown) - sy = +1; - - if (keyCurrentState & _keyMouse.bitLeft) - sx = -1; - else if (keyCurrentState & _keyMouse.bitRight) - sx = +1; - - if (sx || sy) { - simulate_mouse(event, sx, sy, &x, &y); - event.type = EVENT_MOUSEMOVE; - _lastKey = kKeyMouseMove; - - } else { - x = _mouseCurState.x; - y = _mouseCurState.y; - - if (keyCurrentState & _keyMouse.bitButLeft) { - event.type = EVENT_LBUTTONDOWN; - _lastKey = kKeyMouseLButton; - - } else if (_lastKey == kKeyMouseLButton) { - event.type = EVENT_LBUTTONUP; - _lastKey = kKeyNone; - } - } - - event.mouse.x = x; - event.mouse.y = y; - warpMouse(x, y); - // updateCD(); - } - return true; - } - } - - if (ev.eType == keyDownEvent) { - switch (ev.data.keyDown.chr) { - // ESC key - case vchrLaunch: - _lastKey = kKeyNone; - event.type = EVENT_KEYDOWN; - event.kbd.keycode = 27; - event.kbd.ascii = 27; - event.kbd.flags = 0; - return true; - - // F5 = menu - case vchrMenu: - _lastKey = kKeyNone; - event.type = EVENT_KEYDOWN; - event.kbd.keycode = 319; - event.kbd.ascii = 319; - event.kbd.flags = 0; - return true; - - // if hotsync pressed, etc... - case vchrHardCradle: - case vchrHardCradle2: - case vchrLowBattery: - case vchrFind: -// case vchrBrightness: // volume control on Zodiac, let other backends disable it - case vchrContrast: - // do nothing - _lastKey = kKeyNone; - return true; - } - } - - if (check_event(event, &ev)) - return true; - _lastKey = kKeyNone; - - // prevent crash when alarm is raised - handled = ((ev.eType == keyDownEvent) && - (ev.data.keyDown.modifiers & commandKeyMask) && - ((ev.data.keyDown.chr == vchrAttnStateChanged) || - (ev.data.keyDown.chr == vchrAttnUnsnooze))); - - // graffiti strokes, auto-off, etc... - if (!handled) - if (SysHandleEvent(&ev)) - continue; - - switch(ev.eType) { - case penMoveEvent: - get_coordinates(&ev, x, y); - - if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) - return false; - - if (_lastEvent != penMoveEvent && (abs(y - event.mouse.y) <= 2 || abs(x - event.mouse.x) <= 2)) // move only if - return false; - - _lastEvent = penMoveEvent; - event.type = EVENT_MOUSEMOVE; - event.mouse.x = x; - event.mouse.y = y; - warpMouse(x, y); - return true; - - case penDownEvent: - get_coordinates(&ev, x, y); - - // indy fight mode - if (_useNumPad && !_overlayVisible) { - char num = '1'; - num += 9 - - (3 - (3 * x / _screenWidth )) - - (3 * (3 * y / _screenHeight)); - - event.type = EVENT_KEYDOWN; - event.kbd.keycode = num; - event.kbd.ascii = num; - event.kbd.flags = 0; - - _lastEvent = keyDownEvent; - return true; - } - - _lastEvent = penDownEvent; - if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) - return false; - - event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONDOWN : EVENT_MOUSEMOVE); - event.mouse.x = x; - event.mouse.y = y; - warpMouse(x, y); - return true; - - case penUpEvent: - get_coordinates(&ev, x, y); - - event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONUP : EVENT_MOUSEMOVE); - if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) - return false; - - event.mouse.x = x; - event.mouse.y = y; - warpMouse(x, y); - return true; - - case keyDownEvent: - if (ev.data.keyDown.chr == vchrCommand && - (ev.data.keyDown.modifiers & commandKeyMask)) { - - _lastKeyModifier++; - _lastKeyModifier %= kModifierCount; - - if (_lastKeyModifier) - draw_osd((kDrawKeyState + _lastKeyModifier - 1), 2, _screenDest.h + 2, true); - else - draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false); - - return false; - } - - char mask = 0; - UInt16 key = ev.data.keyDown.chr; - - if (_lastKeyModifier == kModifierNone) { - // for keyboard mode - if (ev.data.keyDown.modifiers & shiftKeyMask) mask |= KBD_SHIFT; - if (ev.data.keyDown.modifiers & controlKeyMask) mask |= KBD_CTRL; - if (ev.data.keyDown.modifiers & optionKeyMask) mask |= KBD_ALT; - if (ev.data.keyDown.modifiers & commandKeyMask) mask |= KBD_CTRL|KBD_ALT; - } else { - // for grafiti mode - if (_lastKeyModifier == kModifierCommand) mask = KBD_CTRL|KBD_ALT; - if (_lastKeyModifier == kModifierAlt) mask = KBD_ALT; - if (_lastKeyModifier == kModifierCtrl) mask = KBD_CTRL; - } - - if (_lastKeyModifier) - draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false); - _lastKeyModifier = kModifierNone; - - // F1 -> F10 key - if (key >= '0' && key <= '9' && mask == (KBD_CTRL|KBD_ALT)) { - key = (key == '0') ? 324 : (315 + key - '1'); - mask = 0; - - // exit - } else if ((key == 'z' && mask == KBD_CTRL) || (mask == KBD_ALT && key == 'x')) { - event.type = EVENT_QUIT; - return true; - - // num pad (indy fight mode) - } else if (key == 'n' && mask == (KBD_CTRL|KBD_ALT) && !_overlayVisible) { - _useNumPad = !_useNumPad; - draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, _useNumPad, 1); - displayMessageOnOSD(_useNumPad ? "Fight mode on." : "Fight mode off."); - return false; - } - - // other keys - event.type = EVENT_KEYDOWN; - event.kbd.keycode = key; - event.kbd.ascii = key; - event.kbd.flags = mask; - return true; - - default: - return false; - }; - } -} diff --git a/backends/PalmOS/Src/base_gfx.cpp b/backends/PalmOS/Src/base_gfx.cpp deleted file mode 100644 index f9d3db5d4a..0000000000 --- a/backends/PalmOS/Src/base_gfx.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_base.h" - -#ifdef PALMOS_68K -# include -#endif - -/* - * Graphics modes - * - */ - -static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { - {"1x", "Normal", GFX_NORMAL}, - {"wide", "Wide", GFX_WIDE}, - {0, 0, 0} -}; - -int OSystem_PalmBase::getDefaultGraphicsMode() const { - return GFX_NORMAL; -} - -const OSystem::GraphicsMode *OSystem_PalmBase::getSupportedGraphicsModes() const { - return int_getSupportedGraphicsModes(); -} - -const OSystem::GraphicsMode *OSystem_PalmBase::int_getSupportedGraphicsModes() const { - return s_supportedGraphicsModes; -} - -int OSystem_PalmBase::getGraphicsMode() const { - return _mode; -} - -bool OSystem_PalmBase::setGraphicsMode(int mode) { - switch(mode) { - case GFX_NORMAL: - case GFX_WIDE: - _setMode = mode; - break; - - default: - warning("unknown gfx mode %d", mode); - _setMode = GFX_NORMAL; - return false; - } - - return true; -} - -/* - * Init - * - */ - -void OSystem_PalmBase::initSize(uint w, uint h) { - _screenWidth = w; - _screenHeight = h; - - _screenDest.w = _screenWidth; - _screenDest.h = _screenHeight; - - unload_gfx_mode(); - _mode = _setMode; - load_gfx_mode(); - - warpMouse(200, 150); - int_initSize(w, h); -} - -/* - * Palette - * - */ -void OSystem_PalmBase::setPalette(const byte *colors, uint start, uint num) { - RGBColorType *base = _currentPalette + start; - - for(uint i = 0; i < num; i++) { - base[i].r = colors[0]; - base[i].g = colors[1]; - base[i].b = colors[2]; - - extras_palette(i + start, colors[0], colors[1], colors[2]); - colors += 4; - } - - if (start < _paletteDirtyStart) - _paletteDirtyStart = start; - - if (start + num > _paletteDirtyEnd) - _paletteDirtyEnd = start + num; -} - -void OSystem_PalmBase::grabPalette(byte *colors, uint start, uint num) { - const RGBColorType *base = _currentPalette + start; - - for (uint i = 0; i < num; ++i) { - colors[i * 4] = base[i].r; - colors[i * 4 + 1] = base[i].g; - colors[i * 4 + 2] = base[i].b; - colors[i * 4 + 3] = 0xFF; - } -} - -/* - * Screen - * - */ - -void OSystem_PalmBase::setShakePos(int shakeOffset) { - _new_shake_pos = shakeOffset; - int_setShakePos(shakeOffset); -} - -void OSystem_PalmBase::updateScreen() { - // Check whether the palette was changed in the meantime and update the - // screen surface accordingly. - if (_paletteDirtyEnd != 0 && _setPalette) { - WinSetDrawWindow(WinGetDisplayWindow()); - WinPalette(winPaletteSet, _paletteDirtyStart, _paletteDirtyEnd - _paletteDirtyStart, _currentPalette + _paletteDirtyStart); - _paletteDirtyEnd = 0; - //_redawOSD = true; - -#ifdef PALMOS_68Ks - UInt8 oldCol; - oldCol = gVars->indicator.on; - gVars->indicator.on = RGBToColor(0,255,0); - - if (oldCol != gVars->indicator.on) - _redrawOSD = true; - -/* { - // redraw if needed - if (_lastKeyModifier) - draw1BitGfx((kDrawKeyState + _lastKeyModifier - 1), 2, getHeight() + 2, true); - - if(_useNumPad) - draw1BitGfx(kDrawNumPad, (getWidth() >> 1) - 32, getHeight() + 2, true); - - if (_showBatLow) - draw1BitGfx(kDrawBatLow, (getWidth() >> 1), -16, true); - }*/ -#endif - } - if (_redawOSD) { - _redawOSD = false; - draw_osd(kDrawBatLow, _screenDest.w - 18, -16, _showBatLow, 2); - draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, (_useNumPad && !_overlayVisible), 1); - } - int_updateScreen(); - -} - -void OSystem_PalmBase::clearScreen() { - WinSetDrawWindow(WinGetDisplayWindow()); - WinSetBackColor(RGBToColor(0,0,0)); - WinEraseWindow(); -} - -void OSystem_PalmBase::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { -//return; - -#ifdef PALMOS_68K - MemHandle hTemp = DmGetResource(bitmapRsc, id); -#else - MemHandle hTemp = DmGetResource('abmp', id + 100); -#endif - - if (hTemp) { - /*static const UInt32 pal[3] = { - (TwGfxComponentsToPackedRGB(0,255,0)), - (TwGfxComponentsToPackedRGB(255,255,0)), - (TwGfxComponentsToPackedRGB(255,0,0)) - };*/ - - BitmapType *bmTemp; - bmTemp = (BitmapType *)MemHandleLock(hTemp); - - Coord w, h; -#ifdef PALMOS_68K - BmpGlueGetDimensions(bmTemp, &w, &h, 0); -#else - BmpGetDimensions(bmTemp, &w, &h, 0); -#endif - PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; - RectangleType r = { dst.x, dst.y, w, h }; - - RectangleType c; - - UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); - WinGetClip(&c); - WinResetClip(); - if (show) { - WinSetDrawWindow(_screenH); - WinSetBackColor(0); - WinSetForeColor(120); // pal[color] - WinFillRectangle(&r, 0); - WinSetDrawMode(winOverlay); - WinDrawBitmap(bmTemp, 0, 0); - WinSetDrawMode(winPaint); - - } else { - WinSetBackColor(0); - WinFillRectangle(&r, 0); - } - WinSetClip(&c); - WinSetCoordinateSystem(old); - - MemPtrUnlock(bmTemp); - DmReleaseResource(hTemp); - } - -/* MemHandle hTemp = DmGetResource(bitmapRsc, id); - - if (hTemp) { - BitmapType *bmTemp; - UInt32 *bmData; - UInt8 ih, iw, ib; - Coord w, h; - Int16 blocks, next; - - UInt8 *scr = _screenP + x + _screenPitch * y; - bmTemp = (BitmapType *)MemHandleLock(hTemp); - bmData = (UInt32 *)BmpGetBits(bmTemp); - -#ifdef PALMOS_68K - BmpGlueGetDimensions(bmTemp, &w, &h, 0); -#else - BmpGetDimensions(bmTemp, &w, &h, 0); -#endif - - blocks = w >> 5; - next = w - (blocks << 5); - - if (next) - blocks++; - - for (ih = 0; ih < h; ih++) { // line - for (ib = 0; ib < blocks; ib++) { // 32pix block - next = w - (ib << 5); - next = MIN(next, (Coord)32); - - for (iw = 0; iw < next; iw++) { // row - *scr++ = ((*bmData & (1 << (31 - iw))) && show) ? - gVars->indicator.on : - gVars->indicator.off; - } - - bmData++; - } - scr += _screenPitch - w; - } - - MemHandleUnlock(hTemp); - DmReleaseResource(hTemp); - }*/ -} diff --git a/backends/PalmOS/Src/base_mouse.cpp b/backends/PalmOS/Src/base_mouse.cpp deleted file mode 100644 index 1fb00e1551..0000000000 --- a/backends/PalmOS/Src/base_mouse.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_base.h" - -void OSystem_PalmBase::warpMouse(int x, int y) { - if (x != _mouseCurState.x || y != _mouseCurState.y) { - _mouseCurState.x = x; - _mouseCurState.y = y; - undraw_mouse(); - } -} - -bool OSystem_PalmBase::showMouse(bool visible) { - if (_mouseVisible == visible) - return visible; - - bool last = _mouseVisible; - _mouseVisible = visible; - - if (visible) - draw_mouse(); - else - undraw_mouse(); - - return last; -} - -void OSystem_PalmBase::simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr) { - Int16 x = _mouseCurState.x; - Int16 y = _mouseCurState.y; - Int16 slow; - - _lastKeyRepeat++; - - if (_lastKeyRepeat > 32) - _lastKeyRepeat = 32; - - slow = (iHoriz && iVert) ? 2 : 1; - - x += iHoriz * (_lastKeyRepeat >> 2) / slow; - y += iVert * (_lastKeyRepeat >> 2) / slow; - - x = (x < 0 ) ? 0 : x; - x = (x >= _screenWidth ) ? _screenWidth - 1 : x; - y = (y < 0 ) ? 0 : y; - y = (y >= _screenHeight ) ? _screenHeight - 1 : y; - - *xr = x; - *yr = y; -} diff --git a/backends/PalmOS/Src/be_68k.cpp b/backends/PalmOS/Src/be_68k.cpp deleted file mode 100644 index 102f8da397..0000000000 --- a/backends/PalmOS/Src/be_68k.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2005 The ScummVM project - * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -/* More to come */ diff --git a/backends/PalmOS/Src/be_68k.h b/backends/PalmOS/Src/be_68k.h deleted file mode 100644 index 102f8da397..0000000000 --- a/backends/PalmOS/Src/be_68k.h +++ /dev/null @@ -1,26 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2005 The ScummVM project - * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -/* More to come */ diff --git a/backends/PalmOS/Src/be_base.cpp b/backends/PalmOS/Src/be_base.cpp deleted file mode 100644 index 938b3b98c6..0000000000 --- a/backends/PalmOS/Src/be_base.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_base.h" -#include "common/config-file.h" -#include "common/config-manager.h" - -OSystem_PalmBase::OSystem_PalmBase() { - _overlayVisible = false; - - _current_shake_pos = 0; - _new_shake_pos = 0; - - _paletteDirtyStart = 0; - _paletteDirtyEnd = 0; - - _gfxLoaded = false; - _modeChanged = false; - _setMode = GFX_NORMAL; - _mode = _setMode; - _redawOSD = false; - _setPalette = true; - - _offScreenH = NULL; - _screenH = NULL; - _offScreenP = NULL; - _screenP = NULL; - _screenPitch = gVars->screenPitch; - - _lastEvent = nilEvent; - _lastKey = kKeyNone; - _lastKeyModifier = kModifierNone; - _lastKeyRepeat = 100; - _useNumPad = false; - _showBatLow = false; - _batCheckTicks = SysTicksPerSecond() * 15; - _batCheckLast = TimGetTicks(); - - _mouseDataH = NULL; - _mouseDataP = NULL; - _mouseVisible = false; - _mouseDrawn = false; - MemSet(&_keyMouse, sizeof(_keyMouse), 0); - MemSet(&_mouseCurState, sizeof(_mouseCurState), 0); - MemSet(&_mouseOldState, sizeof(_mouseOldState), 0); - MemSet(&_timer, sizeof(TimerType), 0); - MemSet(&_sound, sizeof(SoundType), 0); - - _keyMouseRepeat = 0; - _keyMouseDelay = (gVars->arrowKeys) ? computeMsecs(125) : computeMsecs(25); -} - -void OSystem_PalmBase::initBackend() { - if (gVars->autoSave != -1) - ConfMan.setInt("autosave_period", gVars->autoSave); - - _keyMouse.bitUp = keyBitPageUp; - _keyMouse.bitDown = keyBitPageDown; - _keyMouse.bitLeft = keyBitHard1; - _keyMouse.bitRight = keyBitHard2; - _keyMouse.bitButLeft= keyBitHard3; - _keyMouse.hasMore = false; - - int_initBackend(); - _keyMouseMask = (_keyMouse.bitUp | _keyMouse.bitDown | _keyMouse.bitLeft | _keyMouse.bitRight | _keyMouse.bitButLeft); -} - -uint32 OSystem_PalmBase::getMillis() { - return TimGetTicks() * 1000 / SysTicksPerSecond(); -} - -void OSystem_PalmBase::delayMillis(uint msecs) { - Int32 delay = computeMsecs(msecs); - - if (delay > 0) - SysTaskDelay(delay); -} - -void OSystem_PalmBase::setTimerCallback(TimerProc callback, int timer) { - if (callback != NULL) { - _timer.duration = timer; - _timer.nextExpiry = getMillis() + timer; - _timer.callback = callback; - _timer.active = true; - } else { - _timer.active = false; - } -} - -void OSystem_PalmBase::quit() { - int_quit(); - clearSoundCallback(); - unload_gfx_mode(); - exit(0); -} diff --git a/backends/PalmOS/Src/be_base.h b/backends/PalmOS/Src/be_base.h deleted file mode 100644 index bfbe8e9b23..0000000000 --- a/backends/PalmOS/Src/be_base.h +++ /dev/null @@ -1,246 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef BE_BASE_H -#define BE_BASE_H - -#include "common/stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" - -enum { - GFX_NORMAL = 0, - GFX_WIDE, -}; - -// OSD key state -enum { - kModifierNone = 0, - kModifierCommand, - kModifierAlt, - kModifierCtrl, - kModifierCount -}; - -// OSD resource id -#define kDrawKeyState 3000 -#define kDrawNumPad 3010 -#define kDrawBatLow 3020 -#define kDrawFight 3030 - -#define computeMsecs(x) ((SysTicksPerSecond() * x) / 1000) - -typedef struct { - UInt32 duration, nextExpiry; - Boolean active; - OSystem::TimerProc callback; -} TimerType, *TimerPtr; - -typedef struct { - Boolean active; - void *proc; - void *param; -} SoundType, *SoundPtr; - -class OSystem_PalmBase : public OSystem { -private: - virtual void int_initBackend() { } - - virtual const GraphicsMode *int_getSupportedGraphicsModes() const; - virtual void int_updateScreen() = 0; - virtual void int_initSize(uint w, uint h) = 0; - virtual void int_setShakePos(int shakeOffset) { } - - virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { } - virtual void int_quit() { } - - virtual void unload_gfx_mode() = 0; - virtual void load_gfx_mode() = 0; - - virtual void draw_mouse() = 0; - virtual void undraw_mouse() = 0; - -// virtual bool check_hard_keys() = 0; - virtual bool check_event(Event &event, EventPtr ev) = 0; - - virtual void timer_handler(); - void battery_handler(); - virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y) = 0; - void simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr); - virtual void sound_handler() = 0; - -protected: - virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); - - enum { - kKeyNone = 0, - kKeyMouseMove = 1 << 0, - kKeyMouseLButton = 1 << 1, - - kKeyCalc = 1 << 30, - kKeyAny = 1 << 31 - }; - enum { - MAX_MOUSE_W = 40, - MAX_MOUSE_H = 40 - }; - struct MousePos { - int16 x,y,w,h; - }; - - TimerType _timer; - SoundType _sound; - - RGBColorType _currentPalette[256]; - uint _paletteDirtyStart, _paletteDirtyEnd; - - int _mode, _setMode; - int16 _screenWidth, _screenHeight; - Boolean _modeChanged, _gfxLoaded; - UInt32 _screenPitch; - - PointType _screenOffset; - struct { - Coord w, h; - } _screenDest; - byte *_screenP, *_offScreenP; - WinHandle _screenH, _offScreenH; - - int _current_shake_pos; - int _new_shake_pos; - - Boolean _overlayVisible; - Boolean _redawOSD, _setPalette; - - UInt32 _keyMouseMask, _keyMouseRepeat, _keyMouseDelay; - struct { - UInt32 bitUp; - UInt32 bitDown; - UInt32 bitLeft; - UInt32 bitRight; - UInt32 bitButLeft; - Boolean hasMore; - } _keyMouse; - - bool _mouseVisible; - bool _mouseDrawn; - MousePos _mouseCurState; - MousePos _mouseOldState; - int16 _mouseHotspotX; - int16 _mouseHotspotY; - byte _mouseKeyColor; - byte *_mouseDataP, *_mouseBackupP; - WinHandle _mouseDataH, _mouseBackupH; - - eventsEnum _lastEvent; - WChar _lastKey; - UInt8 _lastKeyModifier; - UInt32 _lastKeyRepeat; - Boolean _useNumPad, _showBatLow; - UInt32 _batCheckTicks, _batCheckLast; - - int _samplesPerSec; - -public: - OSystem_PalmBase(); - void initBackend(); - -/* - virtual void setFeatureState(Feature f, bool enable) {}; - - - bool hasFeature(Feature f); - bool getFeatureState(Feature f); - - virtual void beginGFXTransaction(); - virtual void endGFXTransaction(); - - virtual int16 getOverlayHeight(); - virtual int16 getOverlayWidth(); - virtual int screenToOverlayX(int x); - virtual int screenToOverlayY(int y); - virtual int overlayToScreenX(int x); - virtual int overlayToScreenY(int y); - - virtual OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b); - virtual void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b); - - virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); - - virtual void displayMessageOnOSD(const char *msg); -*/ - const GraphicsMode *getSupportedGraphicsModes() const; - int getGraphicsMode() const; - virtual int getDefaultGraphicsMode() const; - virtual bool setGraphicsMode(int mode); - virtual bool grabRawScreen(Graphics::Surface *surf) { return false; } - - void initSize(uint w, uint h); - int16 getWidth() { return _screenWidth; } - int16 getHeight() { return _screenHeight; } - - void setShakePos(int shakeOffset); - virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) = 0; - virtual void updateScreen(); - virtual void clearScreen(); - - bool showMouse(bool visible); - void warpMouse(int x, int y); - virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) = 0; - - virtual void showOverlay() = 0; - virtual void hideOverlay() = 0; - virtual void clearOverlay() = 0; - virtual void grabOverlay(OverlayColor *buf, int pitch) = 0; - virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) = 0; - - void setPalette(const byte *colors, uint start, uint num); - void grabPalette(byte *colors, uint start, uint num); - virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b) = 0; - virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) = 0; - - bool pollEvent(Event &event); - - virtual uint32 getMillis(); - virtual void delayMillis(uint msecs); - - virtual void setTimerCallback(TimerProc callback, int interval); - - virtual MutexRef createMutex() { return NULL; } - virtual void lockMutex(MutexRef mutex) {} - virtual void unlockMutex(MutexRef mutex) {} - virtual void deleteMutex(MutexRef mutex) {} - - virtual bool setSoundCallback(SoundProc proc, void *param) = 0; - virtual void clearSoundCallback() = 0; - int getOutputSampleRate() const { return _samplesPerSec; } - - void quit(); - virtual void setWindowCaption(const char *caption) = 0; - - Common::SaveFileManager *getSavefileManager(); -}; - -#endif diff --git a/backends/PalmOS/Src/be_os5.cpp b/backends/PalmOS/Src/be_os5.cpp deleted file mode 100644 index 6b00351f49..0000000000 --- a/backends/PalmOS/Src/be_os5.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" - -#ifndef __TWKEYS_H__ -#include -#include -#endif - -OSystem_PalmOS5::OSystem_PalmOS5() : OSystem_PalmBase() { - _sound.active = false; - _setPalette = false; - - _workScreenH = NULL; - _overlayH = NULL; - _isSwitchable = false; - _wasRotated = false; - - MemSet(&_soundEx, sizeof(SoundExType), 0); - _soundEx.sound = &_sound; -} - -void OSystem_PalmOS5::int_initBackend() { - if (OPTIONS_TST(kOpt5WayNavigatorV1)) { - _keyMouse.bitUp = keyBitPageUp; - _keyMouse.bitDown = keyBitPageDown; - _keyMouse.bitLeft = keyBitNavLeft; - _keyMouse.bitRight = keyBitNavRight; - _keyMouse.bitButLeft= keyBitNavSelect; - _keyMouse.hasMore = true; - - } else if (OPTIONS_TST(kOpt5WayNavigatorV2)) { - _keyMouse.bitUp = keyBitRockerUp|keyBitPageUp; - _keyMouse.bitDown = keyBitRockerDown|keyBitPageDown; - _keyMouse.bitLeft = keyBitRockerLeft; - _keyMouse.bitRight = keyBitRockerRight; - _keyMouse.bitButLeft= keyBitRockerCenter; - _keyMouse.hasMore = true; - } -} - -void OSystem_PalmOS5::setWindowCaption(const char *caption) { - Err e; - Char buf[64]; - Coord w, y, h = FntLineHeight() + 2; - const Char *loading = "Loading, please wait\0"; - - // allocate bitmap - BitmapTypeV3 *bmp2P; - BitmapType *bmp1P = BmpCreate(320, (h * 3), 8, NULL, &e); - WinHandle tmpH = WinCreateBitmapWindow(bmp1P, &e); - - WinSetDrawWindow(tmpH); - WinSetBackColor(0); - WinSetTextColor(255); - WinEraseWindow(); - - // loading message - FntSetFont(boldFont); - w = FntCharsWidth(loading, StrLen(loading)); - w = (320 - w) / 2; - WinDrawChars(loading, StrLen(loading), w, 0 + h); - - // caption - FntSetFont(stdFont); - w = FntCharsWidth(caption, StrLen(caption)); - w = (320 - w) / 2; - WinDrawChars(caption, StrLen(caption), w, 0); - - // memory size - StrPrintF(buf, "memory : %ld KB", gVars->startupMemory); - w = FntCharsWidth(buf, StrLen(buf)); - w = (320 - w) / 2; - WinDrawChars(buf, StrLen(buf), w, h * 2); - - // set the bitmap as v3 - bmp2P = BmpCreateBitmapV3(bmp1P, kDensityDouble, BmpGetBits(bmp1P), NULL); - y = (80 - (h / 4) - 5); - - // draw it - WinSetDrawWindow(WinGetDisplayWindow()); - WinEraseWindow(); - WinDrawBitmap((BitmapPtr)bmp2P, 0, y); - - // free - WinDeleteWindow(tmpH, 0); - BmpDelete((BitmapPtr)bmp2P); - BmpDelete(bmp1P); -} diff --git a/backends/PalmOS/Src/be_os5.h b/backends/PalmOS/Src/be_os5.h deleted file mode 100644 index 40a8340820..0000000000 --- a/backends/PalmOS/Src/be_os5.h +++ /dev/null @@ -1,164 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef BE_OS5_H -#define BE_OS5_H - -#include "be_base.h" - -#if !defined(SYSTEM_CALLBACK) || defined(PALMOS_68K) -# define SYSTEM_CALLBACK -# ifdef PALMOS_ARM -# define CALLBACK_PROLOGUE \ - __asm { \ - stmfd r13!,{r9,r10}; \ - ldr r9,[r0]; \ - ldr r10,[r0,#4]; \ - } -# define CALLBACK_EPILOGUE __asm { ldmfd r13!,{r9,r10} } -# define CALLBACK_INIT(regs) \ - __asm { \ - ldr r0, = regs; \ - add r0,r0,r10; \ - str r9,[r0]; \ - str r10,[r0,#4]; \ - } -# else -# define CALLBACK_PROLOGUE \ - asm ( \ - movem.l a4-a5, -(sp); \ - move.l UserDataP, a0; \ - move.l 0(a0), a4; \ - move.l 4(a0), a5; \ - ); -# define CALLBACK_EPILOGUE asm ( movem.l (sp)+, a4-a5 ); -# define CALLBACK_INIT(regs) \ - { \ - void *ptr = ®s; \ - asm ( \ - move.l ptr, a0; \ - move.l a4, 0(a0); \ - move.l a5, 4(a0); \ - ); \ - } -# endif -#else -# define CALLBACK_PROLOGUE -# define CALLBACK_EPILOGUE -# define CALLBACK_INIT(regs) -#endif - -// TODO : change / remove this -#define gfxMakeDisplayRGB_BigEndian(_r,_g,_b) \ - ( (((_g) & 0xFC) << 11) | (((_b) & 0xF8) << 5) | ((_r) & 0xF8) | (((_g) & 0xFF) >> 5) ) - -#define gfxMakeDisplayRGB_LittleEndian(_r,_g,_b) \ - ( (((_r) & 0xF8) << 8) | (((_g) & 0xFC) << 3) | (((_b) & 0xF8) >> 3) ) - -#if CPU_TYPE == CPU_68K -#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_BigEndian(_r,_g,_b) -#else -#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_LittleEndian(_r,_g,_b) -#endif - -typedef struct { - // for real thread version only - UInt32 __reg1; - UInt32 __reg2; - - // no real thread version - Boolean set; - UInt32 size; - void *dataP; - - // default sound stuff - SndStreamRef handle; - SoundPtr sound; -} SoundExType, *SoundExPtr; -extern SoundExType _soundEx; - -class OSystem_PalmOS5 : public OSystem_PalmBase { -private: - typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p); - RendererProc _render; - - OverlayColor *_overlayP; - WinHandle _overlayH, _workScreenH; - int16 _nativePal[256]; - int16 *_workScreenP; - - Boolean _isSwitchable, _wasRotated; - - virtual void int_initBackend(); - virtual void int_updateScreen(); - virtual void int_initSize(uint w, uint h); - - virtual void unload_gfx_mode(); - virtual void load_gfx_mode(); - virtual void hotswap_gfx_mode(int mode); - - void draw_mouse(); - void undraw_mouse(); - virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y); - virtual bool check_event(Event &event, EventPtr ev); - virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b); - - void render_landscape(RectangleType &r, PointType &p); - void render_portrait(RectangleType &r, PointType &p); - void render_1x(RectangleType &r, PointType &p); - WinHandle alloc_screen(Coord w, Coord h); - virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); - - virtual SndStreamVariableBufferCallback sound_callback(); - virtual void sound_handler(); - -protected: - UInt16 _sysOldCoord, _sysOldOrientation; - Boolean _stretched; - -public: - OSystem_PalmOS5(); - static OSystem *create(); - - void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); - void clearScreen(); - - void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale); - - void showOverlay(); - void hideOverlay(); - virtual void clearOverlay(); - virtual void grabOverlay(OverlayColor *buf, int pitch); - virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); - virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); - virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); - - virtual bool setSoundCallback(SoundProc proc, void *param); - void clearSoundCallback(); - - void setWindowCaption(const char *caption); - -}; - -#endif diff --git a/backends/PalmOS/Src/be_os5ex.cpp b/backends/PalmOS/Src/be_os5ex.cpp deleted file mode 100644 index f6f95ac06e..0000000000 --- a/backends/PalmOS/Src/be_os5ex.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -// for DAL.h -#define ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS - -#include "be_os5ex.h" -#include "palmdefs.h" - -#include -#include - -static TimerExType _timerEx; - -OSystem_PalmOS5Ex::OSystem_PalmOS5Ex() : OSystem_PalmOS5() { - _timerEx.timerID = 0; - _timerEx.timer = &_timer; - _timerEx.ticks = SysTicksPerSecond(); -} -/* -static SYSTEM_CALLBACK void timer_handler(void *userDataP) { - CALLBACK_PROLOGUE - TimerExPtr _timerEx = (TimerExPtr)userDataP; - TimerPtr _timer = _timerEx->timer; - _timer->duration = _timer->callback(_timer->duration); - KALTimerSet(_timerEx->timerID, (_timer->duration * _timerEx->ticks / 1000)); - CALLBACK_EPILOGUE -} - -void OSystem_PalmOS5Ex::setTimerCallback(TimerProc callback, int timer) { - if (_timer.active && _timerEx.timerID) - KALTimerDelete(_timerEx.timerID); - - if (callback != NULL) { - Err e; - CALLBACK_INIT(_timerEx); - _timer.duration = timer; - _timer.callback = callback; - - // create the timer - e = KALTimerCreate(&_timerEx.timerID, appFileCreator, &::timer_handler, &_timerEx); - if (!e) { - e = KALTimerSet(_timerEx.timerID, (timer * _timerEx.ticks / 1000)); - if (e) KALTimerDelete(_timerEx.timerID); - } - _timer.active = (!e); - - } else { - _timer.active = false; - } - - if (!_timer.active) - _timerEx.timerID = 0; -} -*/ -OSystem::MutexRef OSystem_PalmOS5Ex::createMutex() { - UInt32 mutexID; - Err e = KALMutexCreate(&mutexID, appFileCreator); - return (MutexRef)(e ? NULL : mutexID); - -} - -void OSystem_PalmOS5Ex::lockMutex(MutexRef mutex) { - if (mutex) - KALMutexReserve((UInt32)mutex); -} - -void OSystem_PalmOS5Ex::unlockMutex(MutexRef mutex) { - if (mutex) - KALMutexRelease((UInt32)mutex, 0); -} - -void OSystem_PalmOS5Ex::deleteMutex(MutexRef mutex) { - if (mutex) - KALMutexDelete((UInt32)mutex); -} -/* -void OSystem_PalmOS5Ex::int_quit() { - if (_timerEx.timerID) - KALTimerDelete(_timerEx.timerID); -} -*/ \ No newline at end of file diff --git a/backends/PalmOS/Src/be_os5ex.h b/backends/PalmOS/Src/be_os5ex.h deleted file mode 100644 index fb4027ccce..0000000000 --- a/backends/PalmOS/Src/be_os5ex.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef BE_OS5EX_H -#define BE_OS5EX_H - -#include "be_os5.h" - -#undef dprintf // fix compilation in Zodiac mode - -#ifndef PALMOS_ARM -// Not usable with 68k mode (?), so ... -#define OSystem_PalmOS5Ex OSystem_PalmOS5 -#else - -typedef struct { - UInt32 __r9; - UInt32 __r10; - UInt32 timerID; - UInt32 ticks; - - TimerPtr timer; -} TimerExType, *TimerExPtr; - -class OSystem_PalmOS5Ex : public OSystem_PalmOS5 { -private: -// void timer_handler() {}; - void sound_handler() {}; -// void int_quit(); - - SndStreamVariableBufferCallback sound_callback(); - -public: - OSystem_PalmOS5Ex(); - static OSystem *create(); - -// void setTimerCallback(TimerProc callback, int interval); - - MutexRef createMutex(); - void lockMutex(MutexRef mutex); - void unlockMutex(MutexRef mutex); - void deleteMutex(MutexRef mutex); -}; -#endif - -#endif diff --git a/backends/PalmOS/Src/be_save.cpp b/backends/PalmOS/Src/be_save.cpp deleted file mode 100644 index a96770f437..0000000000 --- a/backends/PalmOS/Src/be_save.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_base.h" -#include "common/savefile.h" - -// SaveFile class - -class PalmSaveFile : public Common::SaveFile { -private: - FILE *fh; -public: - PalmSaveFile(const char *filename, bool saveOrLoad) { - fh = ::fopen(filename, (saveOrLoad? "wb" : "rb")); - } - ~PalmSaveFile() { - if (fh) ::fclose(fh); - } - - bool eos() const { return feof(fh) != 0; } - bool ioFailed() const { return ferror(fh) != 0; } - void clearIOFailed() { clearerr(fh); } - - bool isOpen() const { return fh != NULL; } - - uint32 read(void *buf, uint32 size); - uint32 write(const void *buf, uint32 size); - - uint32 pos() const { - assert(fh); - return ftell(fh); - } - uint32 size() const { - assert(fh); - uint32 oldPos = ftell(fh); - fseek(fh, 0, SEEK_END); - uint32 length = ftell(fh); - fseek(fh, oldPos, SEEK_SET); - return length; - } - void seek(int32 offs, int whence = SEEK_SET) { - assert(fh); - fseek(fh, offs, whence); - } -}; - -uint32 PalmSaveFile::read(void *buf, uint32 size) { - // we must return the size, where fread return nitems upon success ( 1 <=> size) - if (fh) return (::fread(buf, 1, size, fh)); - return 0; -} - -uint32 PalmSaveFile::write(const void *buf, uint32 size) { - // we must return the size, where fwrite return nitems upon success ( 1 <=> size) - if (fh) return ::fwrite(buf, 1, size, fh); - return 0; -} - - - - - -// SaveFileManager class - -class PalmSaveFileManager : public Common::SaveFileManager { -public: - virtual Common::OutSaveFile *openForSaving(const char *filename) { - return openSavefile(filename, true); - } - virtual Common::InSaveFile *openForLoading(const char *filename) { - return openSavefile(filename, false); - } - - Common::SaveFile *openSavefile(const char *filename, bool saveOrLoad); - void listSavefiles(const char *prefix, bool *marks, int num); - -protected: - Common::SaveFile *makeSaveFile(const char *filename, bool saveOrLoad); -}; - -Common::SaveFile *PalmSaveFileManager::openSavefile(const char *filename, bool saveOrLoad) { - char buf[256]; - - strcpy(buf, getSavePath()); - strcat(buf, "/"); - strcat(buf, filename); - - return makeSaveFile(buf, saveOrLoad); -} - -void PalmSaveFileManager::listSavefiles(const char *prefix, bool *marks, int num) { - FileRef fileRef; - // try to open the dir - Err e = VFSFileOpen(gVars->VFS.volRefNum, getSavePath(), vfsModeRead, &fileRef); - memset(marks, false, num*sizeof(bool)); - - if (e != errNone) - return; - - // enumerate all files - UInt32 dirEntryIterator = vfsIteratorStart; - Char filename[32]; - FileInfoType info = {0, filename, 32}; - UInt16 length = StrLen(prefix); - int slot = 0; - - while (dirEntryIterator != vfsIteratorStop) { - e = VFSDirEntryEnumerate (fileRef, &dirEntryIterator, &info); - - if (e != expErrEnumerationEmpty) { // there is something - - if (StrLen(info.nameP) == (length + 2)) { // consider max 99, filename length is ok - if (StrNCaselessCompare(prefix, info.nameP, length) == 0) { // this seems to be a save file - if (isdigit(info.nameP[length]) && isdigit(info.nameP[length+1])) { - - slot = StrAToI(filename + length); - if (slot >= 0 && slot < num) - *(marks+slot) = true; - - } - } - } - - } - } - - VFSFileClose(fileRef); -} - -Common::SaveFile *PalmSaveFileManager::makeSaveFile(const char *filename, bool saveOrLoad) { - PalmSaveFile *sf = new PalmSaveFile(filename, saveOrLoad); - - if (!sf->isOpen()) { - delete sf; - sf = 0; - } - return sf; -} - -Common::SaveFileManager *OSystem_PalmBase::getSavefileManager() { - return new PalmSaveFileManager(); -} diff --git a/backends/PalmOS/Src/be_zodiac.cpp b/backends/PalmOS/Src/be_zodiac.cpp deleted file mode 100644 index 6fd8c5cc06..0000000000 --- a/backends/PalmOS/Src/be_zodiac.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_zodiac.h" - -OSystem_PalmZodiac::OSystem_PalmZodiac() : OSystem_PalmOS5Ex() { - _gfxH = NULL; - _overlayP = NULL; - _palmScreenP = NULL; - _tmpScreenP = NULL; - _stretched = false; -} - -void OSystem_PalmZodiac::int_initBackend() { - _keyMouse.bitUp = keyBitRockerUp; - _keyMouse.bitDown = keyBitRockerDown; - _keyMouse.bitLeft = keyBitRockerLeft; - _keyMouse.bitRight = keyBitRockerRight; - _keyMouse.bitButLeft= keyBitRockerCenter; - _keyMouse.hasMore = true; -} - -void OSystem_PalmZodiac::calc_rect(Boolean fullscreen) { - Int32 w, h; - - if (fullscreen) { - w = (_ratio.adjustAspect == kRatioWidth) ? _ratio.width : gVars->screenFullWidth; - h = (_ratio.adjustAspect == kRatioHeight) ? _ratio.height : gVars->screenFullHeight; - - _screenOffset.x = (_ratio.adjustAspect == kRatioWidth) ? (gVars->screenFullWidth - _ratio.width) / 2 : 0; - _screenOffset.y = (_ratio.adjustAspect == kRatioHeight) ? (gVars->screenFullHeight - _ratio.height) / 2 : 0; - - } else { - w = gVars->screenWidth; - h = gVars->screenHeight - MIN_OFFSET * 2; - - _screenOffset.x = 0; - _screenOffset.y = MIN_OFFSET; - } - - _dstRect.x = _screenOffset.x; - _dstRect.y = _screenOffset.y; - _dstRect.w = w; - _dstRect.h = h; - - _screenDest.w = _dstRect.w; - _screenDest.h = _dstRect.h; -} - -void OSystem_PalmZodiac::setFeatureState(Feature f, bool enable) { - switch (f) { -/* case kFeatureFullscreenMode: - if (_gfxLoaded) - if (OPTIONS_TST(kOptModeWide) && _initMode != GFX_WIDE) { - _fullscreen = enable; - hotswap_gfx_mode(_mode); - } - break; -*/ - case kFeatureAspectRatioCorrection: - if (_mode == GFX_WIDE) { - _ratio.adjustAspect = (_ratio.adjustAspect + 1) % 3; - calc_rect(true); - TwGfxSetClip(_palmScreenP, &_dstRect); - clearScreen(); - } - break; - } -} diff --git a/backends/PalmOS/Src/be_zodiac.h b/backends/PalmOS/Src/be_zodiac.h deleted file mode 100644 index 7f5290bed1..0000000000 --- a/backends/PalmOS/Src/be_zodiac.h +++ /dev/null @@ -1,90 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef BE_ZODIAC_H -#define BE_ZODIAC_H - -#include -#include "be_os5ex.h" - -#define MIN_OFFSET 20 - -class OSystem_PalmZodiac : public OSystem_PalmOS5Ex { -private: - enum { - kRatioNone = 0, - kRatioHeight, - kRatioWidth - }; - struct { - UInt8 adjustAspect; - Coord width; // (width x 320) - Coord height; // (480 x height) - } _ratio; - - TwGfxType *_gfxH; - TwGfxSurfaceType *_palmScreenP, *_tmpScreenP; - TwGfxSurfaceType *_overlayP; - UInt16 _nativePal[256]; - Boolean _fullscreen; - - TwGfxPointType _srcPos; - TwGfxRectType _srcRect, _dstRect; - TwGfxBitmapType _srcBmp; - - void int_initBackend(); - void int_setShakePos(int shakeOffset); - - void draw_mouse(); - void undraw_mouse(); - - void unload_gfx_mode(); - void load_gfx_mode(); - void hotswap_gfx_mode(int mode); - - void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b); - void calc_rect(Boolean fullscreen); - void get_coordinates(EventPtr ev, Coord &x, Coord &y); - bool check_event(Event &event, EventPtr ev); - void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); - -public: - OSystem_PalmZodiac(); - - static OSystem *create(); - - void setFeatureState(Feature f, bool enable); - int getDefaultGraphicsMode() const; - - void updateScreen(); - bool grabRawScreen(Graphics::Surface *surf); - - void clearOverlay(); - void grabOverlay(OverlayColor *buf, int pitch); - void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); - OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); - void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); -}; - -#endif diff --git a/backends/PalmOS/Src/builder/b_globals.c b/backends/PalmOS/Src/builder/b_globals.c deleted file mode 100644 index dec25e96b4..0000000000 --- a/backends/PalmOS/Src/builder/b_globals.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include "b_globals.h" - - -//#define BUILD_COMMON -//#define BUILD_SIMON -#define BUILD_SCUMM -//#define BUILD_SKY -//#define BUILD_QUEEN -//#define BUILD_SWORD1 - -#ifdef BUILD_COMMON -# define BUILD_RES GBVARS_COMMON -# define BUILD_NAME "Common" -#else -# define BUILD_RES GBVARS_ENGINE -# define BUILD_NAME "Engine" -#endif - -DmOpenRef dbP[GBVARS_COUNT]; -/////////////////////////////////////////////////////////////////// - -void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID) { - Err e; - - MemHandle recordH = DmNewRecord(dbP[dbID], &index, size); - MemPtr save = MemHandleLock(recordH); - e = DmWrite(save, 0, ptr, size); - MemHandleUnlock(recordH); - DmReleaseRecord (dbP[dbID], index, 0); -} -/////////////////////////////////////////////////////////////////// - -void buildAll() { - Err err; - LocalID olddb; - - olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); - if (olddb) { - DmDeleteDatabase(0,olddb); - FrmCustomAlert(1000,"delete old " BUILD_NAME " DB",0,0); - } - err = DmCreateDatabase (0, "Glbs::" BUILD_NAME, 'ScVM', 'GLBS', false); - olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); - dbP[BUILD_RES] = DmOpenDatabase(0, olddb, dmModeReadWrite); - -#if defined(BUILD_COMMON) - addNewGui(); - -#elif defined(BUILD_SCUMM) - addDimuseTables(); - // temp removed - // TODO ::scummvm use sizeof(OLD256_MIDI_HACK) so i need to fix it - // directly in the code or call MemHandleSize but it may slow down - // code execution - addAkos(); - addDimuseCodecs(); - addCodec47(); - addGfx(); - addDialogs(); - addCharset(); - addCostume(); - addPlayerV2(); - addScummTables(); - -#elif defined(BUILD_SIMON) - addSimon(); - Simon_addCharset(); - -#elif defined(BUILD_SKY) - Sky_addHufftext(); - -#elif defined(BUILD_QUEEN) - Queen_addTalk(); - Queen_addRestables(); - Queen_addGraphics(); - Queen_addDisplay(); - Queen_addMusicdata(); - -#elif defined(BUILD_SWORD1) - Sword1_addStaticres(); -#endif - - DmCloseDatabase(dbP[BUILD_RES]); -} diff --git a/backends/PalmOS/Src/builder/b_globals.h b/backends/PalmOS/Src/builder/b_globals.h deleted file mode 100644 index 6954a50999..0000000000 --- a/backends/PalmOS/Src/builder/b_globals.h +++ /dev/null @@ -1,37 +0,0 @@ -#include "enum_globals.h" - -typedef unsigned char byte; -typedef UInt32 uint; -typedef Int32 int32; -typedef UInt32 uint32; - - -void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID); -void buildAll(); - -void addNewGui(); -void addGraphics(); -///////////////////////////////// -void addDimuseTables(); -void addAkos(); -void addDimuseCodecs(); -void addCodec47(); -void addGfx(); -void addDialogs(); -void addCharset(); -void addCostume(); -void addPlayerV2(); -void addScummTables(); -///////////////////////////////// -void addSimon(); -void Simon_addCharset(); -///////////////////////////////// -void Queen_addTalk(); -void Queen_addRestables(); -void Queen_addGraphics(); -void Queen_addDisplay(); -void Queen_addMusicdata(); -///////////////////////////////// -void Sky_addHufftext(); -///////////////////////////////// -void Sword1_addStaticres(); diff --git a/backends/PalmOS/Src/builder/builder.c b/backends/PalmOS/Src/builder/builder.c deleted file mode 100644 index 8b30707b81..0000000000 --- a/backends/PalmOS/Src/builder/builder.c +++ /dev/null @@ -1,442 +0,0 @@ -#include -#include "BuilderRsc.h" - - -/*********************************************************************** - * - * Entry Points - * - ***********************************************************************/ - -void buildAll(); -/*********************************************************************** - * - * Internal Structures - * - ***********************************************************************/ -typedef struct - { - UInt8 replaceme; - } StarterPreferenceType; - -typedef struct - { - UInt8 replaceme; - } StarterAppInfoType; - -typedef StarterAppInfoType* StarterAppInfoPtr; - - -/*********************************************************************** - * - * Global variables - * - ***********************************************************************/ -//static Boolean HideSecretRecords; - - -/*********************************************************************** - * - * Internal Constants - * - ***********************************************************************/ -#define appFileCreator 'STRT' // register your own at http://www.palmos.com/dev/creatorid/ -#define appVersionNum 0x01 -#define appPrefID 0x00 -#define appPrefVersionNum 0x01 - -// Define the minimum OS version we support. -#define ourMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0) -#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) - - -/*********************************************************************** - * - * Internal Functions - * - ***********************************************************************/ - - -/*********************************************************************** - * - * FUNCTION: RomVersionCompatible - * - * DESCRIPTION: This routine checks that a ROM version is meet your - * minimum requirement. - * - * PARAMETERS: requiredVersion - minimum rom version required - * (see sysFtrNumROMVersion in SystemMgr.h - * for format) - * launchFlags - flags that indicate if the application - * UI is initialized. - * - * RETURNED: error code or zero if rom is compatible - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) -{ - UInt32 romVersion; - - // See if we're on in minimum required version of the ROM or later. - FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); - if (romVersion < requiredVersion) - { - if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == - (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) - { - FrmAlert (RomIncompatibleAlert); - - // Palm OS 1.0 will continuously relaunch this app unless we switch to - // another safe one. - if (romVersion <= kPalmOS10Version) - { - AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); - } - } - - return sysErrRomIncompatible; - } - - return errNone; -} - - -/*********************************************************************** - * - * FUNCTION: GetObjectPtr - * - * DESCRIPTION: This routine returns a pointer to an object in the current - * form. - * - * PARAMETERS: formId - id of the form to display - * - * RETURNED: void * - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void * GetObjectPtr(UInt16 objectID) -{ - FormPtr frmP; - - frmP = FrmGetActiveForm(); - return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)); -} - - -/*********************************************************************** - * - * FUNCTION: MainFormInit - * - * DESCRIPTION: This routine initializes the MainForm form. - * - * PARAMETERS: frm - pointer to the MainForm form. - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void MainFormInit(FormPtr /*frmP*/) -{ -} - - -/*********************************************************************** - * - * FUNCTION: MainFormDoCommand - * - * DESCRIPTION: This routine performs the menu command specified. - * - * PARAMETERS: command - menu item id - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Boolean MainFormDoCommand(UInt16 command) -{ - Boolean handled = false; - FormPtr frmP; - - switch (command) - { - case MainOptionsAboutStarterApp: - MenuEraseStatus(0); // Clear the menu status from the display. - frmP = FrmInitForm (AboutForm); - FrmDoDialog (frmP); // Display the About Box. - FrmDeleteForm (frmP); - handled = true; - break; - - } - - return handled; -} - - -/*********************************************************************** - * - * FUNCTION: MainFormHandleEvent - * - * DESCRIPTION: This routine is the event handler for the - * "MainForm" of this application. - * - * PARAMETERS: eventP - a pointer to an EventType structure - * - * RETURNED: true if the event has handle and should not be passed - * to a higher level handler. - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Boolean MainFormHandleEvent(EventPtr eventP) -{ - Boolean handled = false; - FormPtr frmP; - - switch (eventP->eType) - { - case menuEvent: - return MainFormDoCommand(eventP->data.menu.itemID); - - case frmOpenEvent: - frmP = FrmGetActiveForm(); - MainFormInit( frmP); - FrmDrawForm ( frmP); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case MainBuildButton: - buildAll(); - break; - } - handled = true; - break; - - case frmUpdateEvent: - // To do any custom drawing here, first call FrmDrawForm(), then do your - // drawing, and then set handled to true. - break; - - default: - break; - - } - - return handled; -} - - -/*********************************************************************** - * - * FUNCTION: AppHandleEvent - * - * DESCRIPTION: This routine loads form resources and set the event - * handler for the form loaded. - * - * PARAMETERS: event - a pointer to an EventType structure - * - * RETURNED: true if the event has handle and should not be passed - * to a higher level handler. - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Boolean AppHandleEvent(EventPtr eventP) -{ - UInt16 formId; - FormPtr frmP; - - if (eventP->eType == frmLoadEvent) - { - // Load the form resource. - formId = eventP->data.frmLoad.formID; - frmP = FrmInitForm(formId); - FrmSetActiveForm(frmP); - - // Set the event handler for the form. The handler of the currently - // active form is called by FrmHandleEvent each time is receives an - // event. - switch (formId) - { - case MainForm: - FrmSetEventHandler(frmP, MainFormHandleEvent); - break; - - default: -// ErrFatalDisplay("Invalid Form Load Event"); - break; - - } - return true; - } - - return false; -} - - -/*********************************************************************** - * - * FUNCTION: AppEventLoop - * - * DESCRIPTION: This routine is the event loop for the application. - * - * PARAMETERS: nothing - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void AppEventLoop(void) -{ - UInt16 error; - EventType event; - - do { - EvtGetEvent(&event, evtWaitForever); - - if (! SysHandleEvent(&event)) - if (! MenuHandleEvent(0, &event, &error)) - if (! AppHandleEvent(&event)) - FrmDispatchEvent(&event); - - } while (event.eType != appStopEvent); -} - - -/*********************************************************************** - * - * FUNCTION: AppStart - * - * DESCRIPTION: Get the current application's preferences. - * - * PARAMETERS: nothing - * - * RETURNED: Err value 0 if nothing went wrong - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Err AppStart(void) -{ - StarterPreferenceType prefs; - UInt16 prefsSize; - - // Read the saved preferences / saved-state information. - prefsSize = sizeof(StarterPreferenceType); - if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != - noPreferenceFound) - { - } - - return errNone; -} - - -/*********************************************************************** - * - * FUNCTION: AppStop - * - * DESCRIPTION: Save the current state of the application. - * - * PARAMETERS: nothing - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void AppStop(void) -{ - StarterPreferenceType prefs; - - // Write the saved preferences / saved-state information. This data - // will saved during a HotSync backup. - PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, - &prefs, sizeof (prefs), true); - - // Close all the open forms. - FrmCloseAllForms (); -} - - -/*********************************************************************** - * - * FUNCTION: StarterPalmMain - * - * DESCRIPTION: This is the main entry point for the application. - * - * PARAMETERS: cmd - word value specifying the launch code. - * cmdPB - pointer to a structure that is associated with the launch code. - * launchFlags - word value providing extra information about the launch. - * - * RETURNED: Result of launch - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags) -{ - Err error; - - error = RomVersionCompatible (ourMinVersion, launchFlags); - if (error) return (error); - - switch (cmd) - { - case sysAppLaunchCmdNormalLaunch: - error = AppStart(); - if (error) - return error; - - FrmGotoForm(MainForm); - AppEventLoop(); - AppStop(); - break; - - default: - break; - - } - - return errNone; -} - - -/*********************************************************************** - * - * FUNCTION: PilotMain - * - * DESCRIPTION: This is the main entry point for the application. - * - * PARAMETERS: cmd - word value specifying the launch code. - * cmdPB - pointer to a structure that is associated with the launch code. - * launchFlags - word value providing extra information about the launch. - * RETURNED: Result of launch - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) -{ - return StarterPalmMain(cmd, cmdPBP, launchFlags); -} diff --git a/backends/PalmOS/Src/builder/enum_globals.h b/backends/PalmOS/Src/builder/enum_globals.h deleted file mode 100644 index 45425299c6..0000000000 --- a/backends/PalmOS/Src/builder/enum_globals.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef __ENUM_GLOBALS_H__ -#define __ENUM_GLOBALS_H__ - -// Common -enum { - GBVARS_GUIFONT_INDEX = 0 -}; - -// Scumm -enum { - GBVARS_DIGSTATEMUSICMAP_INDEX = 0, - GBVARS_DIGSTATEMUSICTABLE_INDEX, - GBVARS_DIGSEQMUSICTABLE_INDEX, - GBVARS_COMISTATEMUSICTABLE_INDEX, - GBVARS_COMISEQMUSICTABLE_INDEX, - GBVARS_FTSTATEMUSICTABLE_INDEX, - GBVARS_FTSEQMUSICTABLE_INDEX, - GBVARS_FTSEQNAMES_INDEX, - GBVARS_SMALLSCALETABLE_INDEX, - GBVARS_BIGSCALETABLE_INDEX, - GBVARS_IMCTABLE_INDEX, - GBVARS_CODEC47TABLE_INDEX, - GBVARS_TRANSITIONEFFECTS_INDEX, - GBVARS_STRINGMAPTABLEV7_INDEX, - GBVARS_STRINGMAPTABLEV6_INDEX, - GBVARS_STRINGMAPTABLEV5_INDEX, - GBVARS_GERMANCHARSETDATAV2_INDEX, - GBVARS_FRENCHCHARSETDATAV2_INDEX, - GBVARS_ENGLISHCHARSETDATAV2_INDEX, - GBVARS_ITALIANCHARSETDATAV2_INDEX, - GBVARS_SPANISHCHARSETDATAV2_INDEX, - GBVARS_NOTELENGTHS_INDEX, - GBVARS_HULLOFFSETS_INDEX, - GBVARS_HULLS_INDEX, - GBVARS_FREQMODLENGTHS_INDEX, - GBVARS_FREQMODOFFSETS_INDEX, - GBVARS_FREQMODTABLE_INDEX, - GBVARS_SPKFREQTABLE_INDEX, - GBVARS_PCJRFREQTABLE_INDEX, - - GBVARS_MD5TABLE_INDEX -//GBVARS_SMALLSCALETABLEAKOS_INDEX -}; -// Simon -enum { - GBVARS_SIMON1SETTINGS_INDEX = 0, - GBVARS_SIMON1ACORNSETTINGS_INDEX, - GBVARS_SIMON1AMIGASETTINGS_INDEX, - GBVARS_SIMON1DEMOSETTINGS_INDEX, - GBVARS_SIMON2WINSETTINGS_INDEX, - GBVARS_SIMON2DOSSETTINGS_INDEX, - GBVARS_RUSSIANVIDEOFONT_INDEX, - GBVARS_FRENCHVIDEOFONT_INDEX, - GBVARS_GERMANVIDEOFONT_INDEX, - GBVARS_HEBREWVIDEOFONT_INDEX, - GBVARS_ITALIANVIDEOFONT_INDEX, - GBVARS_SPANISHVIDEOFONT_INDEX, - GBVARS_VIDEOFONT_INDEX, - GBVARS_SIMON1CURSOR_INDEX -// GBVARS_SIMON2CURSORS_INDEX -}; -// Queen -enum { - GBVARS_SPEECHPARAMETERS_INDEX = 0, - GBVARS_RESOURCETABLEPM10_INDEX, - GBVARS_GRAPHICSCARDATA_INDEX, - GBVARS_GRAPHICSFIGHT1DATA_INDEX, - GBVARS_GRAPHICSFIGHT2DATA_INDEX, - GBVARS_GRAPHICSFIGHT3DATA_INDEX, - GBVARS_DISPLAYFONTREGULAR_INDEX, - GBVARS_DISPLAYFONTHEBREW_INDEX, - GBVARS_DISPLAYPALJOECLOTHES_INDEX, - GBVARS_DISPLAYPALJOEDRESS_INDEX, - GBVARS_MUSICDATASONGDEMO_INDEX, - GBVARS_MUSICDATASONG_INDEX, - GBVARS_MUSICDATATUNEDEMO_INDEX, - GBVARS_MUSICDATATUNE_INDEX, - GBVARS_MUSICDATASFXNAME_INDEX, - GBVARS_MUSICDATAJUNGLELIST_INDEX -}; -// Sky -enum { - GBVARS_HUFFTREE_00109_INDEX = 0, - GBVARS_HUFFTREE_00267_INDEX, - GBVARS_HUFFTREE_00288_INDEX, - GBVARS_HUFFTREE_00303_INDEX, - GBVARS_HUFFTREE_00331_INDEX, - GBVARS_HUFFTREE_00348_INDEX, - GBVARS_HUFFTREE_00365_INDEX, - GBVARS_HUFFTREE_00368_INDEX, - GBVARS_HUFFTREE_00372_INDEX, -}; -// Sword1 -enum { - GBVARS_FXLIST_INDEX = 0 -}; - -enum { - GBVARS_COMMON = 0, - GBVARS_ENGINE = 1, - GBVARS_SCUMM = GBVARS_ENGINE, - GBVARS_SIMON = GBVARS_ENGINE, - GBVARS_SKY = GBVARS_ENGINE, - GBVARS_SWORD1 = GBVARS_ENGINE, -// GBVARS_SWORD2 = GBVARS_ENGINE, - GBVARS_QUEEN = GBVARS_ENGINE, - GBVARS_SAGA = GBVARS_ENGINE, - - GBVARS_COUNT -}; - -#endif diff --git a/backends/PalmOS/Src/builder/queen/bq_display.c b/backends/PalmOS/Src/builder/queen/bq_display.c deleted file mode 100644 index 9601729de7..0000000000 --- a/backends/PalmOS/Src/builder/queen/bq_display.c +++ /dev/null @@ -1,297 +0,0 @@ -#include -#include "b_globals.h" - -typedef UInt8 uint8; - -static void addDisplay_fontRegular() { - uint8 _fontRegular[] = { - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, - 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, - 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, - 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, - 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, - 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, - 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, - 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, - 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, - 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, - 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, - 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, - 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, - 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, - 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, - 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, - 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, - 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, - 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, - 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, - 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, - 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, - 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, - 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, - 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, - 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, - 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, - 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, - 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, - 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, - 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, - 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, - 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, - 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, - 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, - 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, - 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, - 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, - 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, - 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, - 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, - 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, - 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, - 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, - 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, - 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, - 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, - 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, - 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, - 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, - 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, - 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, - 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, - 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, - 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, - 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, - 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, - 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, - 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, - 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, - 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, - 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, - 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, - 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, - 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 - }; - writeRecord(_fontRegular, sizeof(_fontRegular), GBVARS_DISPLAYFONTREGULAR_INDEX , GBVARS_QUEEN); -} - -static void addDisplay_fontHebrew() { - uint8 _fontHebrew[] = { - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, - 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, - 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, - 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, - 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, - 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, - 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, - 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, - 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, - 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, - 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, - 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, - 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, - 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, - 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, - 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, - 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, - 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, - 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, - 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, - 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, - 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, - 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, - 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, - 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, - 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, - 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, - 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, - 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, - 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, - 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, - 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, - 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, - 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, - 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, - 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, - 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, - 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, - 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, - 0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00, - 0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, - 0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00, - 0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00, - 0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06, - 0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60, - 0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0, - 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00, - 0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00, - 0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00, - 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, - 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, - 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, - 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, - 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, - 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, - 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, - 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, - 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, - 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, - 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, - 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, - 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, - 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, - 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, - 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, - 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, - 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, - 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, - 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, - 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, - 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 - }; - writeRecord(_fontHebrew, sizeof(_fontHebrew), GBVARS_DISPLAYFONTHEBREW_INDEX , GBVARS_QUEEN); -} - -static void addDisplay_palJoeClothes() { - uint8 _palJoeClothes[] = { - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x87, 0x87, 0x87, 0xB0, 0xB0, 0xB0, 0xDA, 0xDA, 0xDA, 0x43, - 0x34, 0x20, 0x77, 0x33, 0x1F, 0xA3, 0x43, 0x27, 0x80, 0x45, 0x45, 0x9E, 0x5D, 0x5B, 0xB9, 0x78, - 0x75, 0xDF, 0x97, 0x91, 0x17, 0x27, 0x63, 0x1F, 0x3F, 0x83, 0x27, 0x5B, 0xA7, 0x98, 0xD4, 0xFF - }; - writeRecord(_palJoeClothes, sizeof(_palJoeClothes), GBVARS_DISPLAYPALJOECLOTHES_INDEX , GBVARS_QUEEN); -} - -static void addDisplay_palJoeDress() { - uint8 _palJoeDress[] = { - 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x70, 0x70, 0x70, 0x90, 0x90, 0x90, 0xC6, 0xC6, 0xC6, 0xFF, - 0xFF, 0xFF, 0x30, 0x30, 0x90, 0x47, 0x49, 0xD0, 0x40, 0x24, 0x00, 0x79, 0x34, 0x0B, 0xB2, 0x3D, - 0x22, 0xED, 0x42, 0x42, 0x80, 0x45, 0x45, 0xA3, 0x5F, 0x5F, 0xC8, 0x7C, 0x7C, 0xEC, 0x9C, 0x9C - }; - writeRecord(_palJoeDress, sizeof(_palJoeDress), GBVARS_DISPLAYPALJOEDRESS_INDEX , GBVARS_QUEEN); -} - -void Queen_addDisplay() { - addDisplay_fontRegular(); - addDisplay_fontHebrew(); - addDisplay_palJoeClothes(); - addDisplay_palJoeDress(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/queen/bq_graphics.c b/backends/PalmOS/Src/builder/queen/bq_graphics.c deleted file mode 100644 index 910e9b61fb..0000000000 --- a/backends/PalmOS/Src/builder/queen/bq_graphics.c +++ /dev/null @@ -1,302 +0,0 @@ -#include -#include "b_globals.h" - -typedef Int16 int16; - -typedef struct { - int16 x, y; - int16 frame; -} BamDataObj; - -typedef struct { - BamDataObj obj1; // truck / Frank - BamDataObj obj2; // Rico / robot - BamDataObj fx; - int16 sfx; -} BamDataBlock; - -static void addGraphics_carData() { - BamDataBlock _carData[] = { - { { 310, 105, 1 }, { 314, 106, 17 }, { 366, 101, 1 }, 0 }, - { { 303, 105, 1 }, { 307, 106, 17 }, { 214, 0, 10 }, 0 }, - { { 297, 104, 1 }, { 301, 105, 17 }, { 214, 0, 10 }, 0 }, - { { 294, 103, 1 }, { 298, 104, 17 }, { 214, 0, 10 }, 0 }, - { { 291, 102, 1 }, { 295, 103, 18 }, { 214, 0, 10 }, 0 }, - { { 287, 101, 1 }, { 291, 102, 18 }, { 266, 51, 10 }, 2 }, - { { 283, 100, 1 }, { 287, 101, 19 }, { 279, 47, 11 }, 0 }, - { { 279, 99, 1 }, { 283, 100, 20 }, { 294, 46, 12 }, 0 }, - { { 274, 98, 1 }, { 278, 99, 20 }, { 305, 44, 13 }, 0 }, - { { 269, 98, 1 }, { 273, 99, 20 }, { 320, 42, 14 }, 0 }, - { { 264, 98, 1 }, { 268, 99, 17 }, { 214, 0, 10 }, 0 }, - { { 261, 98, 1 }, { 265, 99, 17 }, { 214, 0, 10 }, 0 }, - { { 259, 98, 1 }, { 263, 99, 17 }, { 214, 0, 10 }, 0 }, - { { 258, 98, 1 }, { 262, 99, 17 }, { 214, 0, 10 }, 0 }, - { { 257, 98, 2 }, { 260, 99, 17 }, { 214, 0, 10 }, 0 }, - { { 255, 99, 3 }, { 258, 100, 17 }, { 214, 0, 10 }, 0 }, - { { 258, 99, 4 }, { 257, 100, 17 }, { 214, 0, 10 }, 0 }, - { { 264, 102, 4 }, { 263, 103, 17 }, { 214, 0, 10 }, 0 }, - { { 272, 105, 5 }, { 274, 106, 17 }, { 214, 0, 10 }, 0 }, - { { 276, 107, 5 }, { 277, 108, 17 }, { 214, 0, 10 }, 0 }, - { { 283, 108, 5 }, { 284, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 288, 109, 5 }, { 288, 110, 17 }, { 214, 0, 10 }, 0 }, - { { 293, 110, 5 }, { 293, 111, 18 }, { 266, 59, 10 }, 2 }, - { { 298, 110, 5 }, { 299, 111, 18 }, { 277, 56, 11 }, 0 }, - { { 303, 110, 5 }, { 304, 111, 19 }, { 285, 55, 12 }, 0 }, - { { 308, 110, 4 }, { 307, 111, 20 }, { 296, 54, 13 }, 0 }, - { { 309, 110, 3 }, { 312, 111, 20 }, { 304, 53, 14 }, 0 }, - { { 310, 110, 3 }, { 313, 111, 20 }, { 214, 0, 10 }, 0 }, - { { 311, 110, 3 }, { 314, 111, 17 }, { 214, 0, 10 }, 0 }, - { { 309, 110, 2 }, { 312, 111, 17 }, { 214, 0, 10 }, 0 }, - { { 304, 111, 2 }, { 307, 112, 17 }, { 214, 0, 10 }, 0 }, - { { 300, 110, 2 }, { 303, 111, 17 }, { 214, 0, 10 }, 0 }, - { { 296, 109, 2 }, { 299, 110, 17 }, { 214, 0, 10 }, 0 }, - { { 292, 108, 1 }, { 296, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 285, 107, 2 }, { 289, 108, 17 }, { 214, 0, 10 }, 0 }, - { { 282, 107, 3 }, { 285, 108, 17 }, { 214, 0, 10 }, 0 }, - { { 278, 107, 4 }, { 277, 108, 18 }, { 214, 0, 10 }, 0 }, - { { 279, 108, 4 }, { 278, 109, 18 }, { 252, 57, 10 }, 2 }, - { { 281, 108, 5 }, { 283, 109, 18 }, { 265, 55, 11 }, 0 }, - { { 284, 109, 5 }, { 285, 110, 19 }, { 277, 55, 12 }, 0 }, - { { 287, 110, 5 }, { 288, 111, 20 }, { 288, 54, 13 }, 0 }, - { { 289, 111, 5 }, { 290, 112, 20 }, { 299, 54, 14 }, 0 }, - { { 291, 112, 4 }, { 290, 113, 20 }, { 214, 0, 10 }, 0 }, - { { 293, 113, 3 }, { 295, 114, 17 }, { 214, 0, 10 }, 0 }, - { { 296, 114, 2 }, { 299, 115, 17 }, { 214, 0, 10 }, 0 }, - { { 295, 115, 2 }, { 298, 116, 17 }, { 214, 0, 10 }, 0 }, - { { 293, 116, 1 }, { 297, 117, 17 }, { 214, 0, 10 }, 0 }, - { { 289, 116, 1 }, { 292, 117, 17 }, { 214, 0, 10 }, 0 }, - { { 285, 115, 1 }, { 289, 116, 17 }, { 214, 0, 10 }, 0 }, - { { 281, 114, 1 }, { 284, 115, 17 }, { 214, 0, 10 }, 0 }, - { { 277, 113, 1 }, { 280, 114, 17 }, { 214, 0, 10 }, 0 }, - { { 274, 112, 1 }, { 277, 113, 17 }, { 214, 0, 10 }, 0 }, - { { 271, 111, 1 }, { 274, 112, 17 }, { 214, 0, 10 }, 0 }, - { { 267, 110, 1 }, { 270, 111, 17 }, { 214, 0, 10 }, 0 }, - { { 263, 109, 1 }, { 266, 110, 17 }, { 214, 0, 10 }, 0 }, - { { 260, 108, 1 }, { 263, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 254, 108, 2 }, { 256, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 252, 107, 3 }, { 254, 108, 17 }, { 214, 0, 10 }, 0 }, - { { 253, 108, 3 }, { 255, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 255, 109, 3 }, { 257, 110, 18 }, { 231, 59, 10 }, 2 }, - { { 258, 111, 3 }, { 260, 112, 18 }, { 242, 57, 11 }, 0 }, - { { 263, 112, 4 }, { 262, 113, 19 }, { 256, 57, 12 }, 0 }, - { { 270, 111, 4 }, { 269, 112, 20 }, { 267, 57, 13 }, 0 }, - { { 274, 112, 5 }, { 276, 113, 20 }, { 281, 56, 14 }, 0 }, - { { 280, 111, 6 }, { 282, 112, 19 }, { 214, 0, 10 }, 0 }, - { { 284, 109, 6 }, { 285, 110, 17 }, { 214, 0, 10 }, 0 }, - { { 289, 108, 6 }, { 291, 109, 17 }, { 214, 0, 10 }, 0 }, - { { 294, 107, 6 }, { 296, 108, 17 }, { 214, 0, 10 }, 0 }, - { { 294, 107, 5 }, { 296, 108, 18 }, { 272, 57, 10 }, 2 }, - { { 295, 107, 5 }, { 297, 108, 18 }, { 282, 57, 11 }, 0 }, - { { 296, 108, 5 }, { 298, 109, 19 }, { 295, 57, 12 }, 0 }, - { { 300, 108, 4 }, { 299, 109, 20 }, { 303, 57, 13 }, 0 }, - { { 303, 108, 3 }, { 306, 109, 20 }, { 313, 57, 14 }, 0 }, - { { 307, 109, 2 }, { 311, 110, 17 }, { 214, 0, 10 }, 0 }, - { { 310, 110, 1 }, { 314, 111, 17 }, { 214, 0, 10 }, 99 } - }; - writeRecord(_carData, sizeof(_carData), GBVARS_GRAPHICSCARDATA_INDEX , GBVARS_QUEEN); -} - -static void addGraphics_fight1Data() { - BamDataBlock _fight1Data[] = { - { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 4 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, - { { 75, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, - { { 79, 96, 1 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, - { { 85, 96, 2 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, - { { 94, 96, 3 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, - { { 100, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, - { { 113, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 }, - { { 121, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 }, - { { 136, 96, 16 }, { 187, 96, -26 }, { 58, 37, 46 }, 0 }, - { { 151, 93, 6 }, { 187, 96, -27 }, { 58, 37, 46 }, 0 }, - { { 159, 83, 16 }, { 187, 96, -28 }, { 58, 37, 46 }, 0 }, - { { 170, 73, 16 }, { 187, 96, -29 }, { 182, 96, 48 }, 3 }, - { { 176, 69, 13 }, { 187, 96, -31 }, { 182, 94, 49 }, 1 }, - { { 168, 66, 13 }, { 187, 98, -32 }, { 182, 92, 50 }, 0 }, - { { 155, 75, 13 }, { 187, 96, -32 }, { 182, 88, 51 }, 3 }, - { { 145, 86, 13 }, { 187, 98, -32 }, { 182, 85, 52 }, 0 }, - { { 127, 104, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 }, - { { 122, 108, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 }, - { { 120, 104, 14 }, { 187, 96, -34 }, { 107, 145, 42 }, 2 }, - { { 111, 103, 13 }, { 187, 96, -23 }, { 107, 144, 43 }, 0 }, - { { 102, 105, 13 }, { 187, 96, -23 }, { 107, 142, 43 }, 0 }, - { { 97, 107, 13 }, { 187, 96, -23 }, { 107, 139, 44 }, 0 }, - { { 92, 101, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 3 }, - { { 90, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, - { { 88, 104, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, - { { 87, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, - { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, - { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, - { { 86, 105, 15 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 85, 98, 16 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 89, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 86, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 83, 96, 2 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 81, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 78, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 75, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, - { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 99 } - }; - writeRecord(_fight1Data, sizeof(_fight1Data), GBVARS_GRAPHICSFIGHT1DATA_INDEX , GBVARS_QUEEN); -} - -static void addGraphics_fight2Data() { - BamDataBlock _fight2Data[] = { - { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, - { { 78, 96, 2 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, - { { 81, 96, 3 }, { 189, 96, -18 }, { 150, 45, 35 }, 0 }, - { { 84, 96, 4 }, { 183, 96, -19 }, { 150, 45, 35 }, 0 }, - { { 87, 96, 1 }, { 181, 96, -20 }, { 150, 45, 35 }, 0 }, - { { 90, 96, 2 }, { 177, 96, -21 }, { 150, 45, 35 }, 0 }, - { { 93, 96, 3 }, { 171, 96, -22 }, { 150, 45, 35 }, 0 }, - { { 96, 96, 4 }, { 169, 96, -17 }, { 150, 45, 35 }, 0 }, - { { 99, 96, 1 }, { 165, 96, -18 }, { 150, 45, 35 }, 0 }, - { { 102, 96, 2 }, { 159, 96, -19 }, { 150, 45, 35 }, 0 }, - { { 105, 96, 3 }, { 157, 96, -20 }, { 150, 45, 35 }, 0 }, - { { 108, 96, 4 }, { 153, 96, -21 }, { 150, 45, 35 }, 0 }, - { { 111, 96, 1 }, { 147, 96, -22 }, { 150, 45, 35 }, 0 }, - { { 114, 96, 2 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 }, - { { 117, 96, 3 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 }, - { { 120, 96, 4 }, { 147, 96, -24 }, { 150, 45, 35 }, 0 }, - { { 123, 96, 1 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 }, - { { 125, 96, 2 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 }, - { { 127, 96, 12 }, { 147, 96, -69 }, { 122, 94, 36 }, 3 }, - { { 127, 95, 11 }, { 147, 96, -70 }, { 122, 94, 41 }, 0 }, - { { 127, 96, 12 }, { 147, 96, -71 }, { 122, 100, 36 }, 3 }, - { { 127, 97, 11 }, { 147, 96, -69 }, { 122, 100, 41 }, 0 }, - { { 127, 96, 12 }, { 147, 96, -70 }, { 127, 103, 36 }, 3 }, - { { 127, 95, 11 }, { 147, 96, -71 }, { 127, 103, 41 }, 0 }, - { { 127, 94, 12 }, { 147, 96, -69 }, { 123, 94, 36 }, 3 }, - { { 127, 95, 11 }, { 147, 96, -70 }, { 123, 94, 41 }, 0 }, - { { 127, 96, 12 }, { 147, 96, -71 }, { 120, 99, 36 }, 3 }, - { { 127, 96, 12 }, { 147, 96, -71 }, { 115, 98, 41 }, 0 }, - { { 117, 93, 11 }, { 147, 96, -25 }, { 115, 134, 42 }, 0 }, - { { 110, 92, 11 }, { 147, 96, -25 }, { 114, 133, 42 }, 0 }, - { { 102, 93, 11 }, { 147, 96, -25 }, { 114, 131, 43 }, 0 }, - { { 92, 93, 11 }, { 147, 96, -25 }, { 114, 130, 43 }, 0 }, - { { 82, 94, 11 }, { 147, 96, -25 }, { 114, 128, 44 }, 0 }, - { { 76, 95, 11 }, { 147, 96, -25 }, { 114, 127, 44 }, 0 }, - { { 70, 96, 11 }, { 147, 96, -25 }, { 114, 126, 45 }, 0 }, - { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 125, 46 }, 1 }, - { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, - { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, - { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, - { { 75, 96, 7 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, - { { 75, 96, 68 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, - { { 75, 96, 68 }, { 147, 96, -25 }, { 89, 104, 36 }, 2 }, - { { 75, 96, 68 }, { 147, 96, -25 }, { 94, 103, 62 }, 0 }, - { { 75, 96, 68 }, { 147, 96, -25 }, { 122, 103, 63 }, 0 }, - { { 75, 96, 68 }, { 147, 96, -25 }, { 141, 103, 64 }, 0 }, - { { 75, 96, 68 }, { 147, 96, -30 }, { 150, 103, 65 }, 3 }, - { { 75, 96, 68 }, { 156, 96, -30 }, { 160, 103, 66 }, 0 }, - { { 75, 96, 7 }, { 164, 96, -30 }, { 169, 103, 67 }, 0 }, - { { 75, 96, 5 }, { 169, 96, -30 }, { 177, 103, 48 }, 3 }, - { { 75, 96, 5 }, { 173, 96, -30 }, { 185, 103, 49 }, 0 }, - { { 75, 96, 6 }, { 178, 96, -30 }, { 198, 103, 50 }, 0 }, - { { 75, 96, 6 }, { 181, 96, -30 }, { 207, 103, 51 }, 1 }, - { { 75, 96, 5 }, { 184, 96, -30 }, { 221, 103, 52 }, 0 }, - { { 75, 96, 5 }, { 186, 96, -30 }, { 224, 53, 53 }, 0 }, - { { 75, 96, 5 }, { 187, 96, -23 }, { 224, 53, 53 }, 99 } - }; - writeRecord(_fight2Data, sizeof(_fight2Data), GBVARS_GRAPHICSFIGHT2DATA_INDEX , GBVARS_QUEEN); -} - -static void addGraphics_fight3Data() { - BamDataBlock _fight3Data[] = { - { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, - { { 77, 96, 2 }, { 187, 96, -22 }, { 150, 45, 35 }, 0 }, - { { 80, 96, 3 }, { 185, 96, -17 }, { 150, 45, 35 }, 0 }, - { { 83, 96, 4 }, { 181, 96, -18 }, { 150, 45, 35 }, 0 }, - { { 86, 96, 1 }, { 175, 96, -19 }, { 150, 45, 35 }, 0 }, - { { 88, 96, 2 }, { 173, 96, -20 }, { 150, 45, 35 }, 0 }, - { { 91, 96, 3 }, { 169, 96, -21 }, { 150, 45, 35 }, 0 }, - { { 94, 96, 4 }, { 163, 96, -22 }, { 150, 45, 35 }, 0 }, - { { 97, 96, 1 }, { 161, 96, -17 }, { 150, 45, 35 }, 0 }, - { { 99, 96, 2 }, { 157, 96, -18 }, { 150, 45, 35 }, 0 }, - { { 102, 96, 3 }, { 151, 96, -19 }, { 150, 45, 35 }, 0 }, - { { 105, 96, 4 }, { 149, 96, -20 }, { 150, 45, 35 }, 0 }, - { { 108, 96, 1 }, { 145, 96, -21 }, { 150, 45, 35 }, 0 }, - { { 110, 96, 2 }, { 145, 96, -25 }, { 150, 45, 35 }, 0 }, - { { 113, 96, 3 }, { 145, 96, -26 }, { 132, 96, 36 }, 2 }, - { { 117, 96, 7 }, { 145, 96, -27 }, { 122, 97, 36 }, 0 }, - { { 117, 96, 7 }, { 145, 96, -28 }, { 117, 97, 37 }, 0 }, - { { 116, 96, 12 }, { 145, 96, -24 }, { 110, 96, 38 }, 3 }, - { { 109, 96, 12 }, { 145, 96, -24 }, { 103, 95, 39 }, 0 }, - { { 105, 96, 12 }, { 145, 96, -24 }, { 95, 90, 40 }, 1 }, - { { 96, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 }, - { { 92, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 }, - { { 93, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, - { { 91, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, - { { 89, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, - { { 88, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -26 }, { 86, 38, 41 }, 0 }, - { { 87, 96, 6 }, { 145, 96, -27 }, { 132, 97, 36 }, 2 }, - { { 87, 96, 5 }, { 145, 96, -28 }, { 118, 97, 36 }, 0 }, - { { 87, 96, 7 }, { 145, 96, -24 }, { 107, 97, 36 }, 0 }, - { { 87, 96, 8 }, { 145, 96, -24 }, { 101, 97, 36 }, 0 }, - { { 87, 96, 9 }, { 145, 96, -23 }, { 102, 97, 66 }, 3 }, - { { 87, 96, 10 }, { 145, 96, -23 }, { 120, 97, 67 }, 0 }, - { { 87, 96, 10 }, { 145, 96, -30 }, { 139, 97, 67 }, 1 }, - { { 87, 96, 7 }, { 146, 96, -30 }, { 144, 97, 62 }, 2 }, - { { 86, 96, 4 }, { 160, 96, -30 }, { 144, 97, 48 }, 1 }, - { { 83, 96, 3 }, { 170, 96, -31 }, { 154, 93, 49 }, 0 }, - { { 80, 96, 2 }, { 174, 96, -31 }, { 161, 89, 50 }, 0 }, - { { 78, 96, 1 }, { 178, 99, -31 }, { 169, 85, 51 }, 0 }, - { { 75, 96, 4 }, { 183, 104, -31 }, { 175, 79, 52 }, 0 }, - { { 75, 96, 1 }, { 185, 99, -32 }, { 180, 144, 42 }, 3 }, - { { 75, 96, 1 }, { 185, 106, -31 }, { 181, 141, 42 }, 0 }, - { { 75, 96, 5 }, { 185, 104, -31 }, { 181, 138, 43 }, 0 }, - { { 75, 96, 5 }, { 188, 106, -31 }, { 182, 135, 43 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 131, 44 }, 3 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 127, 45 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 184, 121, 46 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 115, 46 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 195, 98, -33 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 96, -34 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 193, 96, -25 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 191, 96, -18 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 190, 96, -19 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 6 }, { 187, 96, -20 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 0 }, - { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 99 } - }; - writeRecord(_fight3Data, sizeof(_fight3Data), GBVARS_GRAPHICSFIGHT3DATA_INDEX , GBVARS_QUEEN); -} - -void Queen_addGraphics() { - addGraphics_carData(); - addGraphics_fight1Data(); - addGraphics_fight2Data(); - addGraphics_fight3Data(); -} diff --git a/backends/PalmOS/Src/builder/queen/bq_musicdata.c b/backends/PalmOS/Src/builder/queen/bq_musicdata.c deleted file mode 100644 index 0c6df08403..0000000000 --- a/backends/PalmOS/Src/builder/queen/bq_musicdata.c +++ /dev/null @@ -1,1939 +0,0 @@ -#include -#include "b_globals.h" - -typedef Int16 int16; - -typedef struct { - int16 tuneList[5]; - int16 volume; - int16 tempo; - int16 reverb; - int16 override; - int16 ignore; -} songData; - -typedef struct { - int16 tuneNum[9]; - int16 sfx[2]; - int16 mode; - int16 delay; -} tuneData; - -static void addMusicdata_songDemo() { - songData _songDemo[] = { - /* 1 - Hotel Gangsters */ - { { 1, 0 }, 128, 128, 128, 1, 0 }, - - /* 2 - Hotel General */ - { { 2, 0 }, 128, 128, 128, 1, 0 }, - - /* 3 - Jungle */ - { { 3, 4, 5, 6, 0 }, 128, 128, 128, 1, 0 }, - - /* 4 - Waterfall On */ - { { 7, 0 }, 128, 128, 128, 0, 0 }, - - /* 5 - Vnormal */ - { { 8, 0 }, 128, 128, 128, 2, 0 }, - - /* 6 - Trader Bob */ - { { 9, 0 }, 120, 128, 128, 1, 0 }, - - /* 7 - Jetty Music */ - { { 10, 0 }, 128, 128, 128, 1, 0 }, - - /* 8 - Ferry Music */ - { { 11, 0 }, 128, 128, 128, 1, 0 }, - - /* 9 - Temple Upstairs */ - { { 12, 0 }, 128, 128, 128, 1, 0 }, - - /* 10 - Temple Downstairs */ - { { 13, 0 }, 128, 128, 128, 1, 0 }, - - /* 11 - Temple Maze */ - { { 14, 0 }, 128, 128, 128, 1, 0 }, - - /* 12 - Temple Skull */ - { { 15, 0 }, 128, 128, 128, 1, 0 }, - - /* 13 - Johns Theme (Love Story) */ - { { 16, 0 }, 128, 128, 128, 1, 0 }, - - /* 14 - Vmedium */ - { { 17, 0 }, 128, 128, 0, 2, 0 }, - - /* 15 - Vsoft */ - { { 18, 0 }, 128, 128, 0, 2, 0 }, - - /* 16 - Floda Upstairs */ - { { 19, 0 }, 128, 128, 0, 1, 0 }, - - /* 17 - Floda General */ - { { 20, 0 }, 128, 128, 128, 1, 0 }, - - /* 18 - Klunks Room */ - { { 21, 0 }, 110, 128, 128, 1, 0 }, - - /* 19 - Hotel Lola */ - { { 22, 0 }, 120, 18128, 128, 1, 0 }, - - /* 20 - Hotel Escape 1 */ - { { 23, 0 }, 128, 18128, 128, 1, 0 }, - - /* 21 - Amazon Fortress */ - { { 24, 0 }, 128, 128, 128, 1, 0 }, - - /* 22 - Waterfall Off */ - { { 25, 0 }, 128, 128, 128, 0, 0 }, - - /* 23 - Wave Torch */ - { { 26, 0 }, 128, 128, 128, 0, 1 }, - - /* 24 - Zombies Rez Out */ - { { 27, 0 }, 128, 128, 128, 0, 1 }, - - /* 25 - Open Door (standard) */ - { { 28, 0 }, 128, 128, 128, 0, 1 }, - - /* 26 - Close Door (standard) */ - { { 29, 0 }, 128, 128, 128, 0, 1 }, - - /* 27 - Cloth Unrolls */ - { { 30, 0 }, 128, 128, 128, 0, 1 }, - - /* 28 - Snake Slithers Off */ - { { 31, 0 }, 128, 128, 128, 0, 1 }, - - /* 29 - Hotel Fanfare 2 */ - { { 32, 0 }, 128, 128, 128, 1, 1 }, - - /* 30 - Floda Secret */ - { { 33, 0 }, 120, 128, 128, 1, 0 }, - - /* 31 - Temple Fanfare 1 */ - { { 34, 0 }, 128, 128, 128, 1, 1 }, - }; - - writeRecord(_songDemo, sizeof(_songDemo), GBVARS_MUSICDATASONGDEMO_INDEX , GBVARS_QUEEN); -} - -static void addMusicdata_song() { - songData _song[] = { - /* 1 - Hotel Gangsters */ - { { 1, 0 }, 128, 180, 0, 1, 0 }, - - /* 2 - Hotel General */ - { { 2, 0 }, 128, 180, 0, 1, 0 }, - - /* 3 - Jungle */ - { { 3, 4, 5, 6, 0 }, 128, 0, 0, 1, 0 }, - - /* 4 - Waterfall On */ - { { 7, 0 }, 128, 0, 0, 0, 0 }, - - /* 5 - Vnormal */ - { { 8, 0 }, 128, 0, 0, 2, 0 }, - - /* 6 - Trader Bob */ - { { 9, 0 }, 120, 0, 0, 1, 0 }, - - /* 7 - Jetty Music */ - { { 10, 0 }, 128, 0, 0, 1, 0 }, - - /* 8 - Ferry Music */ - { { 11, 0 }, 128, 0, 0, 1, 0 }, - - /* 9 - Temple Upstairs */ - { { 12, 0 }, 128, 0, 0, 1, 0 }, - - /* 10 - Temple Downstairs */ - { { 13, 0 }, 128, 0, 0, 1, 0 }, - - /* 11 - Temple Maze */ - { { 14, 0 }, 128, 0, 0, 1, 0 }, - - /* 12 - Temple Skull */ - { { 15, 0 }, 128, 0, 0, 1, 0 }, - - /* 13 - Johns Theme (Love Story) */ - { { 16, 0 }, 128, 0, 0, 1, 0 }, - - /* 14 - Vmedium */ - { { 17, 0 }, 120, 0, 0, 2, 0 }, - - /* 15 - Vsoft */ - { { 18, 0 }, 110, 0, 0, 2, 0 }, - - /* 16 - Floda Upstairs */ - { { 19, 0 }, 110, 0, 0, 1, 0 }, - - /* 17 - Floda General */ - { { 20, 0 }, 128, 0, 0, 1, 0 }, - - /* 18 - Klunks Room */ - { { 21, 0 }, 128, 0, 0, 1, 0 }, - - /* 19 - Hotel Lola */ - { { 22, 0 }, 120, 180, 0, 1, 0 }, - - /* 20 - Hotel Escape 1 */ - { { 23, 0 }, 128, 180, 0, 1, 0 }, - - /* 21 - Amazon Fortress */ - { { 24, 0 }, 128, 0, 0, 1, 0 }, - - /* 22 - Waterfall Off */ - { { 25, 0 }, 128, 0, 0, 0, 0 }, - - /* 23 - Wave Torch */ - { { 26, 0 }, 128, 0, 0, 0, 1 }, - - /* 24 - Zombies Rez Out */ - { { 27, 0 }, 128, 0, 0, 0, 1 }, - - /* 25 - Open Door (standard) */ - { { 28, 0 }, 128, 0, 0, 0, 1 }, - - /* 26 - Close Door (standard) */ - { { 29, 0 }, 128, 0, 0, 0, 1 }, - - /* 27 - Cloth Unrolls */ - { { 30, 0 }, 128, 0, 0, 0, 1 }, - - /* 28 - Snake Slithers Off */ - { { 31, 0 }, 128, 0, 0, 0, 1 }, - - /* 29 - Hotel Fanfare 2 */ - { { 32, 0 }, 128, 0, 0, 1, 1 }, - - /* 30 - Floda Secret */ - { { 33, 0 }, 128, 0, 0, 1, 0 }, - - /* 31 - Temple Fanfare 1 */ - { { 34, 0 }, 128, 0, 0, 1, 1 }, - - /* 32 - Commander Rocket 1 */ - { { 35, 0 }, 128, 0, 0, 1, 0 }, - - /* 33 - Hotel Escape 2 */ - { { 36, 0 }, 128, 180, 0, 1, 0 }, - - /* 34 - Back of Truck */ - { { 37, 0 }, 128, 180, 0, 1, 0 }, - - /* 35 - Hotel Fanfare 1 */ - { { 38, 0 }, 128, 0, 0, 1, 1 }, - - /* 36 - Truck Fanfare */ - { { 39, 0 }, 128, 0, 0, 1, 1 }, - - /* 37 - Airport */ - { { 40, 0 }, 128, 0, 0, 1, 0 }, - - /* 38 - Plane Leaves */ - { { 41, 0 }, 128, 0, 0, 1, 1 }, - - /* 39 - Arrive Hotel */ - { { 42, 0 }, 128, 0, 0, 1, 0 }, - - /* 40 - Jungle Fanfare */ - { { 43, 0 }, 128, 0, 0, 1, 1 }, - - /* 41 - General Fanfare */ - { { 44, 0 }, 128, 0, 0, 1, 1 }, - - /* 42 - Johns Room */ - { { 45, 0 }, 128, 0, 0, 1, 0 }, - - /* 43 - Floda Lab */ - { { 46, 0 }, 128, 0, 0, 1, 0 }, - - /* 44 - Azura's Theme */ - { { 47, 0 }, 128, 0, 0, 1, 0 }, - - /* 45 - Use Record */ - { { 48, 0 }, 128, 0, 0, 1, 1 }, - - /* 46 - Franks Theme */ - { { 49, 0 }, 128, 0, 0, 1, 0 }, - - /* 47 - Anderson Doubts */ - { { 50, 0 }, 128, 0, 0, 1, 0 }, - - /* 48 - Bud and Lou Theme */ - { { 51, 0 }, 128, 0, 0, 1, 1 }, - - /* 49 - Gorilla Theme */ - { { 52, 0 }, 128, 0, 0, 1, 1 }, - - /* 50 - Missionaries Theme */ - { { 53, 0 }, 128, 0, 0, 1, 1 }, - - /* 51 - Sloth Theme */ - { { 54, 0 }, 128, 0, 0, 1, 1 }, - - /* 52 - Amazon Dungeon */ - { { 55, 0 }, 128, 0, 0, 1, 0 }, - - /* 53 - Throne Room */ - { { 56, 0 }, 128, 0, 0, 1, 0 }, - - /* 54 - Temple Puzzle */ - { { 57, 0 }, 128, 0, 0, 1, 0 }, - - /* 55 - Temple Fountain Room */ - { { 58, 0 }, 128, 0, 0, 1, 0 }, - - /* 56 - Light Switch */ - { { 59, 0 }, 128, 0, 0, 0, 1 }, - - /* 57 - Hydraulic Open */ - { { 60, 0 }, 128, 0, 0, 0, 1 }, - - /* 58 - Hydraulic Close */ - { { 61, 0 }, 128, 0, 0, 0, 1 }, - - /* 59 - Close Door (metal) */ - { { 62, 0 }, 128, 0, 0, 0, 1 }, - - /* 60 - Small Hatch Close */ - { { 63, 0 }, 128, 0, 0, 0, 1 }, - - /* 61 - Scissors Snip */ - { { 64, 0 }, 128, 0, 0, 0, 1 }, - - /* 62 - Pick up Sticky */ - { { 65, 0 }, 128, 0, 0, 0, 1 }, - - /* 63 - Oracle Rezzes In */ - { { 66, 0 }, 128, 0, 0, 0, 1 }, - - /* 64 - Sparkle SFX */ - { { 67, 0 }, 128, 0, 0, 0, 1 }, - - /* 65 - Splorch! */ - { { 68, 0 }, 128, 0, 0, 0, 1 }, - - /* 66 - Pour Liquid */ - { { 69, 0 }, 128, 0, 0, 0, 1 }, - - /* 67 - End Credit Medley */ - { { 70, 0 }, 128, 0, 0, 1, 0 }, - - /* 68 - Dino Ray */ - { { 71, 0 }, 128, 0, 0, 0, 1 }, - - /* 69 - Squish! */ - { { 72, 0 }, 128, 0, 0, 0, 1 }, - - /* 70 - Robot Laser */ - { { 73, 0 }, 128, 0, 0, 0, 1 }, - - /* 71 - Thud wood light */ - { { 74, 0 }, 128, 0, 0, 0, 1 }, - - /* 72 - Thud wood deep */ - { { 75, 0 }, 128, 0, 0, 0, 1 }, - - /* 73 - Thud metallic */ - { { 76, 0 }, 128, 0, 0, 0, 1 }, - - /* 74 - Cut Coconut */ - { { 77, 0 }, 128, 0, 0, 0, 1 }, - - /* 75 - Thud Stone */ - { { 78, 0 }, 128, 0, 0, 0, 1 }, - - /* 76 - Cloth Slide 1 */ - { { 79, 0 }, 128, 0, 0, 0, 1 }, - - /* 77 - Open Chest */ - { { 80, 0 }, 128, 0, 0, 0, 1 }, - - /* 78 - Close Chest */ - { { 81, 0 }, 128, 0, 0, 0, 1 }, - - /* 79 - Open Drawer */ - { { 82, 0 }, 128, 0, 0, 0, 1 }, - - /* 80 - Truck door closes */ - { { 83, 0 }, 128, 0, 0, 0, 1 }, - - /* 81 - Truck Starts */ - { { 84, 0 }, 128, 0, 0, 0, 1 }, - - /* 82 - Truck Drives Off */ - { { 85, 0 }, 128, 0, 0, 0, 1 }, - - /* 83 - Fish Splash */ - { { 86, 0 }, 128, 0, 0, 0, 1 }, - - /* 84 - Close Drawer/Push Ladder */ - { { 87, 0 }, 128, 0, 0, 0, 1 }, - - /* 85 - Agression Enhancer */ - { { 88, 0 }, 128, 0, 0, 0, 1 }, - - /* 86 - Stone Door Grind 1 */ - { { 89, 0 }, 128, 0, 0, 0, 1 }, - - /* 87 - Prequel 1 */ - { { 90, 0 }, 128, 0, 0, 1, 0 }, - - /* 88 - Intro Credits */ - { { 91, 0 }, 128, 0, 0, 1, 0 }, - - /* 89 - Valley 1 */ - { { 92, 0 }, 128, 0, 0, 1, 0 }, - - /* 90 - Valley 3 */ - { { 93, 0 }, 128, 0, 0, 1, 0 }, - - /* 91 - Fight Music */ - { { 94, 0 }, 128, 0, 0, 1, 0 }, - - /* 92 - Confrontation 1 */ - { { 95, 0 }, 128, 0, 0, 1, 0 }, - - /* 93 - Confrontation 2 */ - { { 96, 0 }, 128, 0, 0, 1, 0 }, - - /* 94 - Plane Hatch Open */ - { { 97, 0 }, 128, 128, 128, 0, 1 }, - - /* 95 - Plane Hatch Close */ - { { 98, 0 }, 128, 128, 128, 0, 1 }, - - /* 96 - Tie Vines */ - { { 99, 0 }, 128, 128, 128, 0, 1 }, - - /* 97 - Pterodactyl */ - { { 100, 0 }, 128, 128, 128, 0, 1 }, - - /* 98 - Beef Jerky Splash */ - { { 101, 0 }, 128, 128, 128, 0, 1 }, - - /* 99 - Piranha Burp */ - { { 102, 0 }, 128, 128, 128, 0, 1 }, - - /* 100 - Falling Vine */ - { { 103, 0 }, 128, 128, 128, 0, 1 }, - - /* 101 - Stone Door Grind 2 */ - { { 104, 0 }, 128, 128, 128, 0, 1 }, - - /* 102 - Stone Grind (light) */ - { { 105, 0 }, 128, 128, 128, 0, 1 }, - - /* 103 - Ape Takes Off Mask */ - { { 106, 0 }, 128, 128, 128, 0, 1 }, - - /* 104 - Bark Breaks */ - { { 107, 0 }, 128, 128, 128, 0, 1 }, - - /* 105 - Stone Click */ - { { 108, 0 }, 128, 128, 128, 0, 1 }, - - /* 106 - Sproing! */ - { { 109, 0 }, 128, 128, 128, 0, 1 }, - - /* 107 - Cash Register */ - { { 110, 0 }, 128, 128, 128, 0, 1 }, - - /* 108 - Squeaky Toy */ - { { 111, 0 }, 128, 128, 128, 0, 1 }, - - /* 109 - Falling Chains */ - { { 112, 0 }, 128, 128, 128, 0, 1 }, - - /* 110 - Open Locker Door */ - { { 113, 0 }, 128, 128, 128, 0, 1 }, - - /* 111 - Close Locker Door */ - { { 114, 0 }, 128, 128, 128, 0, 1 }, - - /* 112 - Rub Pencil */ - { { 115, 0 }, 128, 128, 128, 0, 1 }, - - /* 113 - Open Safe */ - { { 116, 0 }, 128, 128, 128, 0, 1 }, - - /* 114 - Close Safe */ - { { 117, 0 }, 128, 128, 128, 0, 1 }, - - /* 115 - Push Chair */ - { { 118, 0 }, 128, 128, 128, 0, 1 }, - - /* 116 - Snake Hiss */ - { { 119, 0 }, 128, 128, 128, 0, 1 }, - - /* 117 - Oracle Rezzes Out */ - { { 120, 0 }, 128, 128, 128, 0, 1 }, - - /* 118 - Wall Crumbles */ - { { 121, 0 }, 128, 128, 128, 0, 1 }, - - /* 119 - Crypt Crumbles */ - { { 122, 0 }, 128, 128, 128, 0, 1 }, - - /* 120 - Joe Sucked Up */ - { { 123, 0 }, 128, 128, 128, 0, 1 }, - - /* 121 - Rocket Pack Zoom */ - { { 124, 0 }, 128, 128, 128, 0, 1 }, - - /* 122 - Piranha Splash */ - { { 125, 0 }, 128, 128, 128, 0, 1 }, - - /* 123 - Snap Branch */ - { { 126, 0 }, 128, 128, 128, 0, 1 }, - - /* 124 - Dino Horn */ - { { 127, 0 }, 128, 128, 128, 0, 1 }, - - /* 125 - Tyre Screech */ - { { 128, 0 }, 128, 128, 128, 0, 1 }, - - /* 126 - Oil Splat */ - { { 129, 0 }, 128, 128, 128, 0, 1 }, - - /* 127 - Punch */ - { { 130, 0 }, 128, 128, 128, 0, 1 }, - - /* 128 - Body Hits Ground */ - { { 131, 0 }, 128, 128, 128, 0, 1 }, - - /* 129 - Chicken */ - { { 132, 0 }, 128, 128, 128, 0, 1 }, - - /* 130 - Open Sarcophagus */ - { { 133, 0 }, 128, 128, 128, 0, 1 }, - - /* 131 - Close Sarcophagus */ - { { 134, 0 }, 128, 128, 128, 0, 1 }, - - /* 132 - Creaking Stick */ - { { 135, 0 }, 128, 128, 128, 0, 1 }, - - /* 133 - Pick Hits Stone */ - { { 136, 0 }, 128, 128, 128, 0, 1 }, - - /* 134 - Stalactite Crumbles */ - { { 137, 0 }, 128, 128, 128, 0, 1 }, - - /* 135 - Tic-Toc */ - { { 138, 0 }, 128, 128, 128, 0, 1 }, - - /* 136 - Stone Grind (heavy) */ - { { 139, 0 }, 128, 128, 128, 0, 1 }, - - /* 137 - Explosion */ - { { 140, 0 }, 128, 128, 128, 0, 1 }, - - /* 138 - Cloth Slide 2 */ - { { 141, 0 }, 128, 128, 128, 0, 1 }, - - /* 139 - Temple Laser */ - { { 142, 0 }, 128, 128, 128, 0, 1 }, - - /* 140 - Dino Transformation */ - { { 143, 0 }, 128, 128, 128, 0, 1 }, - - /* 141 - Experimental Laser */ - { { 144, 0 }, 128, 128, 128, 0, 1 }, - - /* 142 - Stone Grind (medium) */ - { { 145, 0 }, 128, 128, 128, 0, 1 }, - - /* 143 - Weeping God Grind */ - { { 146, 0 }, 128, 128, 128, 0, 1 }, - - /* 144 - Alien Hum */ - { { 147, 0 }, 128, 128, 128, 0, 1 }, - - /* 145 - Alien Puzzle */ - { { 148, 0 }, 128, 128, 128, 0, 1 }, - - /* 146 - Vacuum On */ - { { 149, 0 }, 128, 128, 128, 0, 1 }, - - /* 147 - Vacuum Off */ - { { 150, 0 }, 128, 128, 128, 0, 1 }, - - /* 148 - Elevator Starts */ - { { 151, 0 }, 128, 128, 128, 0, 1 }, - - /* 149 - Mummy Crumbles */ - { { 152, 0 }, 128, 128, 128, 0, 1 }, - - /* 150 - Temple Green Circle */ - { { 153, 0 }, 128, 128, 128, 0, 1 }, - - /* 151 - Rattle Bars */ - { { 154, 0 }, 128, 128, 128, 0, 1 }, - - /* 152 - Door Dissolves */ - { { 155, 0 }, 128, 128, 128, 0, 1 }, - - /* 153 - Altar Slides */ - { { 156, 0 }, 128, 128, 128, 0, 1 }, - - /* 154 - Light Torch */ - { { 157, 0 }, 128, 128, 128, 0, 1 }, - - /* 155 - Stamp Sound */ - { { 158, 0 }, 128, 128, 128, 0, 1 }, - - /* 156 - Plaster Loud */ - { { 159, 0 }, 128, 128, 128, 0, 1 }, - - /* 157 - Sparky Bathtub */ - { { 160, 0 }, 128, 128, 128, 0, 1 }, - - /* 158 - Ape Rezzes Out */ - { { 161, 0 }, 128, 128, 128, 0, 1 }, - - /* 159 - Song 159 */ - { { 162, 0 }, 128, 128, 128, 1, 0 }, - - /* 160 - Song 160 */ - { { 163, 0 }, 128, 128, 128, 1, 0 }, - - /* 161 - Song 161 */ - { { 164, 0 }, 128, 128, 128, 1, 0 }, - - /* 162 - Piranhas Swim */ - { { 165, 0 }, 128, 128, 128, 0, 1 }, - - /* 163 - Prison/Dungeon Door */ - { { 166, 0 }, 128, 128, 128, 0, 1 }, - - /* 164 - Fight Explosion */ - { { 167, 0 }, 128, 128, 128, 0, 1 }, - - /* 165 - Press Button */ - { { 168, 0 }, 128, 128, 128, 2, 1 }, - - /* 166 - Pull Lever */ - { { 169, 0 }, 128, 128, 128, 0, 1 }, - - /* 167 - Wrong Code */ - { { 170, 0 }, 128, 128, 128, 0, 1 }, - - /* 168 - Correct Code */ - { { 171, 0 }, 128, 128, 128, 0, 1 }, - - /* 169 - Sizzle */ - { { 172, 0 }, 128, 128, 128, 0, 1 }, - - /* 170 - Money In Slot */ - { { 173, 0 }, 128, 128, 128, 0, 1 }, - - /* 171 - Lightning Crack */ - { { 174, 0 }, 128, 128, 128, 0, 1 }, - - /* 172 - Machine Gun Fire */ - { { 175, 0 }, 128, 128, 128, 0, 1 }, - - /* 173 - Cage Descends */ - { { 176, 0 }, 128, 128, 128, 0, 1 }, - - /* 174 - Chair Activates */ - { { 177, 0 }, 128, 128, 128, 0, 1 }, - - /* 175 - Robot Powers On */ - { { 178, 0 }, 128, 128, 128, 0, 1 }, - - /* 176 - Grow Big */ - { { 179, 0 }, 128, 128, 128, 0, 1 }, - - /* 177 - Eat Food */ - { { 180, 0 }, 128, 128, 128, 0, 1 }, - - /* 178 - Head Shrink */ - { { 181, 0 }, 128, 128, 128, 0, 1 }, - - /* 179 - Grinding Gears */ - { { 182, 0 }, 128, 128, 128, 0, 1 }, - - /* 180 - Chair Splash */ - { { 183, 0 }, 128, 128, 128, 0, 1 }, - - /* 181 - Deflect Laser */ - { { 184, 0 }, 128, 128, 128, 0, 1 }, - - /* 182 - Zap Frank */ - { { 185, 0 }, 128, 128, 128, 0, 1 }, - - /* 183 - Frank Transforms */ - { { 186, 0 }, 128, 128, 128, 0, 1 }, - - /* 184 - Alarm Clock */ - { { 187, 0 }, 128, 128, 128, 0, 1 }, - - /* 185 - Slide Chute */ - { { 188, 0 }, 128, 128, 128, 0, 1 }, - - /* 186 - Puff */ - { { 189, 0 }, 128, 128, 128, 0, 1 }, - - /* 187 - Bite */ - { { 190, 0 }, 128, 128, 128, 0, 0 }, - - /* 188 - Stone Door Grind 2 */ - { { 191, 0 }, 128, 128, 128, 0, 1 }, - - /* 189 - Prequel 2 */ - { { 192, 0 }, 128, 128, 128, 1, 0 }, - - /* 190 - Prequel 3 */ - { { 193, 0 }, 128, 128, 128, 1, 0 }, - - /* 191 - Prequel 4 */ - { { 194, 0 }, 128, 128, 128, 1, 0 }, - - /* 192 - Stop Music */ - { { 195, 0 }, 128, 128, 128, 1, 0 }, - - /* 193 - Plane Flyby */ - { { 196, 0 }, 128, 128, 128, 0, 1 }, - - /* 194 - Commander Rocket 2 */ - { { 197, 0 }, 128, 128, 128, 1, 0 }, - - /* 195 - Commander Rocket 3 */ - { { 198, 0 }, 128, 128, 128, 1, 0 }, - - /* 196 - Rescue */ - { { 199, 0 }, 128, 128, 128, 1, 0 }, - - /* 197 - Slow Fanfare */ - { { 200, 0 }, 128, 128, 128, 1, 0 }, - - /* 198 - Plane Crash */ - { { 201, 0 }, 128, 128, 128, 1, 0 }, - - /* 199 - Plane Engine 1 */ - { { 202, 0 }, 128, 128, 128, 0, 1 }, - - /* 200 - Plane Engine 2 */ - { { 203, 0 }, 128, 128, 128, 0, 1 }, - - /* 201 - Boat In */ - { { 204, 0 }, 128, 128, 128, 0, 1 }, - - /* 202 - Boat Out */ - { { 205, 0 }, 128, 128, 128, 0, 1 }, - - /* 203 - Final Fanfare! */ - { { 206, 0 }, 128, 128, 128, 1, 0 }, - - /* 204 - Frank Destroyed */ - { { 207, 0 }, 128, 128, 128, 1, 0 }, - - /* 205 - Jaspar Eats */ - { { 208, 0 }, 128, 128, 128, 0, 1 }, - - /* 206 - Compy Scream 1 */ - { { 209, 0 }, 128, 128, 128, 0, 1 }, - - /* 207 - Compy Scream 2 */ - { { 210, 0 }, 128, 128, 128, 0, 1 }, - - /* 208 - Punch Klunk Fanfare */ - { { 211, 0 }, 128, 128, 128, 1, 0 }, - - /* 209 - Talk Frank */ - { { 212, 0 }, 128, 128, 128, 1, 0 } - }; - - writeRecord(_song, sizeof(_song), GBVARS_MUSICDATASONG_INDEX , GBVARS_QUEEN); -} - -static void addMusicdata_tuneDemo() { - tuneData _tuneDemo[] = { - /* 1 - Hotel Gangsters */ - { { 32, 0 }, { 0, 0 }, 1, 0 }, - - /* 2 - Hotel General */ - { { 26, 0 }, { 0, 0 }, 1, 0 }, - - /* 3 - Jungle */ - { { 15, 0 }, { 0, 0 }, 1, 0 }, - - /* 4 - Jungle */ - { { 17, 0 }, { 0, 0 }, 1, 0 }, - - /* 5 - Jungle */ - { { 18, 0 }, { 0, 0 }, 1, 0 }, - - /* 6 - Jungle */ - { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, 0 }, - - /* 7 - Waterfall On */ - { { 3, 0 }, { 0, 0 }, 1, 0 }, - - /* 8 - Vnormal */ - { { 1, 0 }, { 0, 0 }, 1, 0 }, - - /* 9 - Trader Bob */ - { { 1, 0 }, { 0, 0 }, 1, 0 }, - - /* 10 - Jetty Music */ - { { 37, 0 }, { 0, 0 }, 1, 0 }, - - /* 11 - Ferry Music */ - { { 38, 0 }, { 0, 0 }, 1, 0 }, - - /* 12 - Temple Upstairs */ - { { 30, 0 }, { 0, 0 }, 1, 0 }, - - /* 13 - Temple Downstairs */ - { { 34, 0 }, { 0, 0 }, 1, 0 }, - - /* 14 - Temple Maze */ - { { 35, 0 }, { 0, 0 }, 1, 0 }, - - /* 15 - Temple Skull */ - { { 36, 0 }, { 0, 0 }, 1, 0 }, - - /* 16 - Johns Theme (Love Story) */ - { { 43, 0 }, { 0, 0 }, 1, 0 }, - - /* 17 - Vmedium */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 18 - Vsoft */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 19 - Floda Upstairs */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 20 - Floda General */ - { { 29, 0 }, { 0, 0 }, 1, 0 }, - - /* 21 - Klunks Room */ - { { 39, 0 }, { 0, 0 }, 1, 0 }, - - /* 22 - Hotel Lola */ - { { 31, 0 }, { 0, 0 }, 1, 0 }, - - /* 23 - Hotel Escape 1 */ - { { 33, 0 }, { 0, 0 }, 1, 0 }, - - /* 24 - Amazon Fortress */ - { { 40, 0 }, { 0, 0 }, 1, 0 }, - - /* 25 - Waterfall Off */ - { { -3, 0 }, { 0, 0 }, 1, 0 }, - - /* 26 - Wave Torch */ - { { 22, 0 }, { 121, 0 }, 2, 0 }, - - /* 27 - Zombies Rez Out */ - { { 25, 0 }, { 20, 0 }, 2, 0 }, - - /* 28 - Open Door (standard) */ - { { 20, 0 }, { 1, 0 }, 2, 0 }, - - /* 29 - Close Door (standard) */ - { { 21, 0 }, { 2, 0 }, 2, 0 }, - - /* 30 - Cloth Unrolls */ - { { 23, 0 }, { 51, 0 }, 2, 0 }, - - /* 31 - Snake Slithers Off */ - { { 24, 0 }, { 122, 0 }, 2, 0 }, - - /* 32 - Hotel Fanfare 2 */ - { { 69, 1003, 0 }, { 0, 0 }, 2, 0 }, - - /* 33 - Floda Secret */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 34 - Temple Fanfare 1 */ - { { 60, 162, 0 }, { 0, 0 }, 2, 0 }, - - /* 35 - Commander Rocket 1 */ - { { 46, 0 }, { 0, 0 }, 1, 0 }, - }; - writeRecord(_tuneDemo, sizeof(_tuneDemo), GBVARS_MUSICDATATUNEDEMO_INDEX , GBVARS_QUEEN); -} - -static void addMusicdata_tune() { - tuneData _tune[] = { - /* 1 - Hotel Gangsters */ - { { 32, 0 }, { 0, 0 }, 1, 0 }, - - /* 2 - Hotel General */ - { { 41, 0 }, { 0, 0 }, 1, 0 }, - - /* 3 - Jungle */ - { { 15, 16, 0 }, { 0, 0 }, 1, 0 }, - - /* 4 - Jungle */ - { { 17, 0 }, { 0, 0 }, 1, 0 }, - - /* 5 - Jungle */ - { { 18, 0 }, { 0, 0 }, 1, 0 }, - - /* 6 - Jungle */ - { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, -10 }, - - /* 7 - Waterfall On */ - { { 3, 0 }, { 0, 0 }, 1, 0 }, - - /* 8 - Vnormal */ - { { 23, 0 }, { 0, 0 }, 1, 0 }, - - /* 9 - Trader Bob */ - { { 23, 0 }, { 0, 0 }, 1, 0 }, - - /* 10 - Jetty Music */ - { { 37, 0 }, { 0, 0 }, 1, 0 }, - - /* 11 - Ferry Music */ - { { 38, 0 }, { 0, 0 }, 1, 0 }, - - /* 12 - Temple Upstairs */ - { { 30, 0 }, { 0, 0 }, 1, 0 }, - - /* 13 - Temple Downstairs */ - { { 34, 36, 56, 0 }, { 0, 0 }, 0, 0 }, - - /* 14 - Temple Maze */ - { { 87, 35, 0 }, { 0, 0 }, 1, 0 }, - - /* 15 - Temple Skull */ - { { 76, 0 }, { 0, 0 }, 1, 0 }, - - /* 16 - Johns Theme (Love Story) */ - { { 44, 0 }, { 0, 0 }, 1, 0 }, - - /* 17 - Vmedium */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 18 - Vsoft */ - { { 28, 0 }, { 0, 0 }, 1, 0 }, - - /* 19 - Floda Upstairs */ - { { 28, 39, 0 }, { 0, 0 }, 0, 0 }, - - /* 20 - Floda General */ - { { 89, 63, 64, 65, 0 }, { 0, 0 }, 0, 0 }, - - /* 21 - Klunks Room */ - { { 43, 0 }, { 0, 0 }, 1, 0 }, - - /* 22 - Hotel Lola */ - { { 31, 0 }, { 0, 0 }, 1, 0 }, - - /* 23 - Hotel Escape 1 */ - { { 52, 0 }, { 0, 0 }, 1, 0 }, - - /* 24 - Amazon Fortress */ - { { 40, 0 }, { 0, 0 }, 1, 0 }, - - /* 25 - Waterfall Off */ - { {-3, 0 }, { 0, 0 }, 1, 0 }, - - /* 26 - Wave Torch */ - { { 0, 0 }, { 121, 0 }, 2, 0 }, - - /* 27 - Zombies Rez Out */ - { { 0, 0 }, { 20, 0 }, 2, 0 }, - - /* 28 - Open Door (standard) */ - { { 0, 0 }, { 1, 0 }, 2, 0 }, - - /* 29 - Close Door (standard) */ - { { 0, 0 }, { 2, 0 }, 2, 0 }, - - /* 30 - Cloth Unrolls */ - { { 0, 0 }, { 51, 0 }, 2, 0 }, - - /* 31 - Snake Slithers Off */ - { { 0, 0 }, { 122, 0 }, 2, 0 }, - - /* 32 - Hotel Fanfare 2 */ - { { 69, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 33 - Floda Secret */ - { { 29, 42, 0 }, { 0, 0 }, 1, 0 }, - - /* 34 - Temple Fanfare 1 */ - { { 70, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 35 - Commander Rocket 1 */ - { { 45, 0 }, { 0, 0 }, 2, 0 }, - - /* 36 - Hotel Escape 2 */ - { { 52, 0 }, { 0, 0 }, 1, 0 }, - - /* 37 - Back of Truck */ - { { 51, 48, 33, 54, 52, 0 }, { 0, 0 }, 1, 0 }, - - /* 38 - Hotel Fanfare 1 */ - { { 67, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 39 - Truck Fanfare */ - { { 67, 177, 0 }, { 0, 0 }, 2, 0 }, - - /* 40 - Airport */ - { { 81, 0 }, { 0, 0 }, 1, 0 }, - - /* 41 - Plane Leaves */ - { { 68, 1198, 0 }, { 0, 0 }, 2, 0 }, - - /* 42 - Arrive Hotel */ - { { 26, 0 }, { 0, 0 }, 1, 0 }, - - /* 43 - Jungle Fanfare */ - { { 68, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 44 - General Fanfare */ - { { 57, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 45 - Johns Room */ - { { 90, 0 }, { 0, 0 }, 1, 0 }, - - /* 46 - Floda Lab */ - { { 92, 0 }, { 0, 0 }, 1, 0 }, - - /* 47 - Azura's Theme */ - { { 80, 0 }, { 0, 0 }, 1, 0 }, - - /* 48 - Use Record */ - { { 91, 2000, 0 }, { 0, 0 }, 2, 0 }, - - /* 49 - Franks Theme */ - { { 77, 0 }, { 0, 0 }, 1, 0 }, - - /* 50 - Anderson Doubts */ - { { 75, 0 }, { 0, 0 }, 1, 0 }, - - /* 51 - Bud and Lou Theme */ - { { 94, 1003, 0 }, { 0, 0 }, 1, 0 }, - - /* 52 - Gorilla Theme */ - { { 97, 1003, 0 }, { 0, 0 }, 1, 0 }, - - /* 53 - Missionaries Theme */ - { { 98, 1003, 0 }, { 0, 0 }, 1, 0 }, - - /* 54 - Sloth Theme */ - { { 100, 1003, 0 }, { 0, 0 }, 1, 0 }, - - /* 55 - Amazon Dungeon */ - { { 96, 0 }, { 0, 0 }, 1, 0 }, - - /* 56 - Throne Room */ - { { 78, 0 }, { 0, 0 }, 1, 0 }, - - /* 57 - Temple Puzzle */ - { { 88, 0 }, { 0, 0 }, 1, 0 }, - - /* 58 - Temple Fountain Room */ - { { 55, 0 }, { 0, 0 }, 1, 0 }, - - /* 59 - Light Switch */ - { { 0, 0 }, { 4, 0 }, 2, 0 }, - - /* 60 - Hydraulic Open */ - { { 0, 0 }, { 7, 0 }, 2, 0 }, - - /* 61 - Hydraulic Close */ - { { 0, 0 }, { 8, 0 }, 2, 0 }, - - /* 62 - Close Door (metal) */ - { { 0, 0 }, { 9, 0 }, 2, 0 }, - - /* 63 - Small Hatch Close */ - { { 0, 0 }, { 10, 0 }, 2, 0 }, - - /* 64 - Scissors Snip */ - { { 0, 0 }, { 5, 0 }, 2, 0 }, - - /* 65 - Pick up Sticky */ - { { 0, 0 }, { 6, 0 }, 2, 0 }, - - /* 66 - Oracle Rezzes In */ - { { 0, 0 }, { 11, 0 }, 2, 0 }, - - /* 67 - Sparkle SFX */ - { { 0, 0 }, { 12, 0 }, 2, 0 }, - - /* 68 - Splorch! */ - { { 0, 0 }, { 13, 0 }, 2, 0 }, - - /* 69 - Pour Liquid */ - { { 0, 0 }, { 3, 0 }, 2, 0 }, - - /* 70 - End Credit Medley */ - { { 95, 0 }, { 0, 0 }, 1, 0 }, - - /* 71 - Dino Ray */ - { { 0, 0 }, { 14, 0 }, 2, 0 }, - - /* 72 - Squish! */ - { { 0, 0 }, { 15, 0 }, 2, 0 }, - - /* 73 - Robot Laser */ - { { 0, 0 }, { 16, 0 }, 2, 0 }, - - /* 74 - Thud wood light */ - { { 0, 0 }, { 17, 0 }, 2, 0 }, - - /* 75 - Thud wood deep */ - { { 0, 0 }, { 18, 0 }, 2, 0 }, - - /* 76 - Thud metallic */ - { { 0, 0 }, { 19, 0 }, 2, 0 }, - - /* 77 - Cut Coconut */ - { { 0, 0 }, { 22, 0 }, 2, 0 }, - - /* 78 - Thud Stone */ - { { 0, 0 }, { 23, 0 }, 2, 0 }, - - /* 79 - Cloth Slide 1 */ - { { 0, 0 }, { 24, 0 }, 2, 0 }, - - /* 80 - Open Chest */ - { { 0, 0 }, { 25, 0 }, 2, 0 }, - - /* 81 - Close Chest */ - { { 0, 0 }, { 26, 0 }, 2, 0 }, - - /* 82 - Open Drawer */ - { { 0, 0 }, { 27, 0 }, 2, 0 }, - - /* 83 - Truck door closes */ - { { 0, 0 }, { 28, 0 }, 2, 0 }, - - /* 84 - Truck Starts */ - { { 0, 0 }, { 29, 0 }, 2, 0 }, - - /* 85 - Truck Drives Off */ - { { 0, 0 }, { 30, 0 }, 2, 0 }, - - /* 86 - Fish Splash */ - { { 0, 0 }, { 31, 0 }, 2, 0 }, - - /* 87 - Close Drawer/Push Ladder */ - { { 0, 0 }, { 33, 0 }, 2, 0 }, - - /* 88 - Agression Enhancer */ - { { 0, 0 }, { 32, 0 }, 2, 0 }, - - /* 89 - Stone Door Grind 1 */ - { { 0, 0 }, { 78, 0 }, 2, 0 }, - - /* 90 - Prequel 1 */ - { { 20, 0 }, { 0, 0 }, 1, 0 }, - - /* 91 - Intro Credits */ - { { 21, 0 }, { 0, 0 }, 2, 0 }, - - /* 92 - Valley 1 */ - { { 71, 0 }, { 0, 0 }, 1, 0 }, - - /* 93 - Valley 3 */ - { { 73, 0 }, { 0, 0 }, 1, 0 }, - - /* 94 - Fight Music */ - { { 72, 0 }, { 0, 0 }, 1, 0 }, - - /* 95 - Confrontation 1 */ - { { 93, 0 }, { 0, 0 }, 1, 0 }, - - /* 96 - Confrontation 2 */ - { { 74, 0 }, { 0, 0 }, 1, 0 }, - - /* 97 - Plane Hatch Open */ - { { 0, 0 }, { 35, 0 }, 2, 0 }, - - /* 98 - Plane Hatch Close */ - { { 0, 0 }, { 36, 0 }, 2, 0 }, - - /* 99 - Tie Vines */ - { { 0, 0 }, { 37, 0 }, 2, 0 }, - - /* 100 - Pterodactyl */ - { { 0, 0 }, { 38, 0 }, 2, 0 }, - - /* 101 - Beef Jerky Splash */ - { { 0, 0 }, { 39, 0 }, 2, 0 }, - - /* 102 - Piranha Burp */ - { { 0, 0 }, { 40, 0 }, 2, 0 }, - - /* 103 - Falling Vine */ - { { 0, 0 }, { 41, 0 }, 2, 0 }, - - /* 104 - Stone Door Grind 2 */ - { { 0, 0 }, { 79, 0 }, 2, 0 }, - - /* 105 - Stone Grind (light) */ - { { 0, 0 }, { 82, 0 }, 2, 0 }, - - /* 106 - Ape Takes Off Mask */ - { { 0, 0 }, { 44, 0 }, 2, 0 }, - - /* 107 - Bark Breaks */ - { { 0, 0 }, { 45, 0 }, 2, 0 }, - - /* 108 - Stone Click */ - { { 0, 0 }, { 46, 0 }, 2, 0 }, - - /* 109 - Sproing! */ - { { 0, 0 }, { 42, 0 }, 2, 0 }, - - /* 110 - Cash Register */ - { { 0, 0 }, { 48, 0 }, 2, 0 }, - - /* 111 - Squeaky Toy */ - { { 0, 0 }, { 49, 0 }, 2, 0 }, - - /* 112 - Falling Chains */ - { { 0, 0 }, { 50, 0 }, 2, 0 }, - - /* 113 - Open Locker Door */ - { { 0, 0 }, { 52, 0 }, 2, 0 }, - - /* 114 - Close Locker Door */ - { { 0, 0 }, { 53, 0 }, 2, 0 }, - - /* 115 - Rub Pencil */ - { { 0, 0 }, { 54, 0 }, 2, 0 }, - - /* 116 - Open Safe */ - { { 0, 0 }, { 55, 0 }, 2, 0 }, - - /* 117 - Close Safe */ - { { 0, 0 }, { 56, 0 }, 2, 0 }, - - /* 118 - Push Chair */ - { { 0, 0 }, { 57, 0 }, 2, 0 }, - - /* 119 - Snake Hiss */ - { { 0, 0 }, { 58, 0 }, 2, 0 }, - - /* 120 - Oracle Rezzes Out */ - { { 0, 0 }, { 59, 0 }, 2, 0 }, - - /* 121 - Wall Crumbles */ - { { 0, 0 }, { 60, 0 }, 2, 0 }, - - /* 122 - Crypt Crumbles */ - { { 0, 0 }, { 61, 0 }, 2, 0 }, - - /* 123 - Joe Sucked Up */ - { { 0, 0 }, { 63, 0 }, 2, 0 }, - - /* 124 - Rocket Pack Zoom */ - { { 0, 0 }, { 47, 0 }, 2, 0 }, - - /* 125 - Piranha Splash */ - { { 0, 0 }, { 83, 0 }, 2, 0 }, - - /* 126 - Snap Branch */ - { { 0, 0 }, { 66, 0 }, 2, 0 }, - - /* 127 - Dino Horn */ - { { 0, 0 }, { 67, 0 }, 2, 0 }, - - /* 128 - Tyre Screech */ - { { 0, 0 }, { 68, 0 }, 2, 0 }, - - /* 129 - Oil Splat */ - { { 0, 0 }, { 70, 0 }, 2, 0 }, - - /* 130 - Punch */ - { { 0, 0 }, { 71, 0 }, 2, 0 }, - - /* 131 - Body Hits Ground */ - { { 0, 0 }, { 72, 0 }, 2, 0 }, - - /* 132 - Chicken */ - { { 0, 0 }, { 69, 0 }, 2, 0 }, - - /* 133 - Open Sarcophagus */ - { { 0, 0 }, { 21, 0 }, 2, 0 }, - - /* 134 - Close Sarcophagus */ - { { 0, 0 }, { 21, 0 }, 2, 0 }, - - /* 135 - Creaking Stick */ - { { 0, 0 }, { 62, 0 }, 2, 0 }, - - /* 136 - Pick Hits Stone */ - { { 0, 0 }, { 73, 0 }, 2, 0 }, - - /* 137 - Stalactite Crumbles */ - { { 0, 0 }, { 74, 0 }, 2, 0 }, - - /* 138 - Tic-Toc */ - { { 0, 0 }, { 76, 0 }, 2, 0 }, - - /* 139 - Stone Grind (heavy) */ - { { 0, 0 }, { 81, 0 }, 2, 0 }, - - /* 140 - Explosion */ - { { 0, 0 }, { 77, 0 }, 2, 0 }, - - /* 141 - Cloth Slide 2 */ - { { 0, 0 }, { 84, 0 }, 2, 0 }, - - /* 142 - Temple Laser */ - { { 0, 0 }, { 85, 0 }, 2, 0 }, - - /* 143 - Dino Transformation */ - { { 0, 0 }, { 86, 0 }, 2, 0 }, - - /* 144 - Experimental Laser */ - { { 0, 0 }, { 87, 0 }, 2, 0 }, - - /* 145 - Stone Grind (medium) */ - { { 0, 0 }, { 88, 0 }, 2, 0 }, - - /* 146 - Weeping God Grind */ - { { 0, 0 }, { 89, 0 }, 2, 0 }, - - /* 147 - Alien Hum */ - { { 0, 0 }, { 90, 0 }, 2, 0 }, - - /* 148 - Alien Puzzle */ - { { 0, 0 }, { 91, 0 }, 2, 0 }, - - /* 149 - Vacuum On */ - { { 0, 0 }, { 92, 0 }, 2, 0 }, - - /* 150 - Vacuum Off */ - { { 0, 0 }, { 93, 0 }, 2, 0 }, - - /* 151 - Elevator Starts */ - { { 0, 0 }, { 94, 0 }, 2, 0 }, - - /* 152 - Mummy Crumbles */ - { { 0, 0 }, { 95, 0 }, 2, 0 }, - - /* 153 - Temple Green Circle */ - { { 0, 0 }, { 96, 0 }, 2, 0 }, - - /* 154 - Rattle Bars */ - { { 0, 0 }, { 97, 0 }, 2, 0 }, - - /* 155 - Door Dissolves */ - { { 0, 0 }, { 98, 0 }, 2, 0 }, - - /* 156 - Altar Slides */ - { { 0, 0 }, { 99, 0 }, 2, 0 }, - - /* 157 - Light Torch */ - { { 0, 0 }, { 100, 0 }, 2, 0 }, - - /* 158 - Stamp Sound */ - { { 0, 0 }, { 34, 0 }, 2, 0 }, - - /* 159 - Plaster Loud */ - { { 0, 0 }, { 102, 0 }, 2, 0 }, - - /* 160 - Sparky Bathtub */ - { { 0, 0 }, { 103, 0 }, 2, 0 }, - - /* 161 - Ape Rezzes Out */ - { { 0, 0 }, { 104, 0 }, 2, 0 }, - - /* 162 - Song 159 */ - { { 0, 0 }, { 0, 0 }, 2, 0 }, - - /* 163 - Song 160 */ - { { 0, 0 }, { 0, 0 }, 2, 0 }, - - /* 164 - Song 161 */ - { { 0, 0 }, { 0, 0 }, 2, 0 }, - - /* 165 - Piranhas Swim */ - { { 0, 0 }, { 105, 0 }, 2, 0 }, - - /* 166 - Prison/Dungeon Door */ - { { 0, 0 }, { 43, 0 }, 2, 0 }, - - /* 167 - Fight Explosion */ - { { 0, 0 }, { 80, 0 }, 2, 0 }, - - /* 168 - Press Button */ - { { 0, 0 }, { 65, 0 }, 2, 0 }, - - /* 169 - Pull Lever */ - { { 0, 0 }, { 107, 0 }, 2, 0 }, - - /* 170 - Wrong Code */ - { { 0, 0 }, { 108, 0 }, 2, 0 }, - - /* 171 - Correct Code */ - { { 0, 0 }, { 109, 0 }, 2, 0 }, - - /* 172 - Sizzle */ - { { 0, 0 }, { 110, 0 }, 2, 0 }, - - /* 173 - Money In Slot */ - { { 0, 0 }, { 111, 0 }, 2, 0 }, - - /* 174 - Lightning Crack */ - { { 0, 0 }, { 112, 0 }, 2, 0 }, - - /* 175 - Machine Gun Fire */ - { { 0, 0 }, { 113, 0 }, 2, 0 }, - - /* 176 - Cage Descends */ - { { 0, 0 }, { 114, 0 }, 2, 0 }, - - /* 177 - Chair Activates */ - { { 0, 0 }, { 115, 0 }, 2, 0 }, - - /* 178 - Robot Powers On */ - { { 0, 0 }, { 116, 0 }, 2, 0 }, - - /* 179 - Grow Big */ - { { 0, 0 }, { 117, 0 }, 2, 0 }, - - /* 180 - Eat Food */ - { { 0, 0 }, { 118, 0 }, 2, 0 }, - - /* 181 - Head Shrink */ - { { 0, 0 }, { 119, 0 }, 2, 0 }, - - /* 182 - Grinding Gears */ - { { 0, 0 }, { 120, 0 }, 2, 0 }, - - /* 183 - Chair Splash */ - { { 0, 0 }, { 123, 0 }, 2, 0 }, - - /* 184 - Deflect Laser */ - { { 0, 0 }, { 124, 0 }, 2, 0 }, - - /* 185 - Zap Frank */ - { { 0, 0 }, { 125, 0 }, 2, 0 }, - - /* 186 - Frank Transforms */ - { { 0, 0 }, { 126, 0 }, 2, 0 }, - - /* 187 - Alarm Clock */ - { { 0, 0 }, { 127, 0 }, 2, 0 }, - - /* 188 - Slide Chute */ - { { 0, 0 }, { 64, 0 }, 2, 0 }, - - /* 189 - Puff */ - { { 0, 0 }, { 128, 0 }, 2, 0 }, - - /* 190 - Bite */ - { { 0, 0 }, { 129, 0 }, 2, 0 }, - - /* 191 - Stone Door Grind 2 */ - { { 0, 0 }, { 79, 0 }, 2, 0 }, - - /* 192 - Prequel 2 */ - { { 22, 0 }, { 0, 0 }, 1, 0 }, - - /* 193 - Prequel 3 */ - { { 24, 0 }, { 0, 0 }, 1, 0 }, - - /* 194 - Prequel 4 */ - { { 25, 0 }, { 0, 0 }, 1, 0 }, - - /* 195 - Stop Music */ - { { 1, 0 }, { 0, 0 }, 1, 0 }, - - /* 196 - Plane Flyby */ - { { 0, 0 }, { 101, 0 }, 2, 0 }, - - /* 197 - Commander Rocket 2 */ - { { 46, 0 }, { 0, 0 }, 1, 0 }, - - /* 198 - Commander Rocket 3 */ - { { 47, 0 }, { 0, 0 }, 1, 0 }, - - /* 199 - Rescue */ - { { 99, 0 }, { 0, 0 }, 1, 0 }, - - /* 200 - Slow Fanfare */ - { { 0, 0 }, { 0, 0 }, 1, 0 }, - - /* 201 - Plane Crash */ - { { 93, 0 }, { 0, 0 }, 1, 0 }, - - /* 202 - Plane Engine 1 */ - { { 0, 0 }, { 130, 0 }, 2, 0 }, - - /* 203 - Plane Engine 2 */ - { { 0, 0 }, { 131, 0 }, 2, 0 }, - - /* 204 - Boat In */ - { { 0, 0 }, { 132, 0 }, 2, 0 }, - - /* 205 - Boat Out */ - { { 0, 0 }, { 133, 0 }, 2, 0 }, - - /* 206 - Final Fanfare! */ - { { 21, 95, 21, 0 }, { 0, 0 }, 1, 0 }, - - /* 207 - Frank Destroyed */ - { { 25, 1044, 0 }, { 0, 0 }, 1, 0 }, - - - /* 208 - Jaspar Eats */ - { { 0, 0 }, { 134, 0 }, 2, 0 }, - - /* 209 - Compy Scream 1 */ - { { 0, 0 }, { 135, 0 }, 2, 0 }, - - /* 210 - Compy Scream 2 */ - { { 0, 0 }, { 136, 0 }, 2, 0 }, - - /* 211 - Punch Klunk Fanfare */ - { { 69, 1017, 0 }, { 0, 0 }, 1, 0 }, - - /* 212 - Talk Frank */ - { { 77, 1017, 0 }, { 0, 0 }, 1, 0 } - }; - writeRecord(_tune, sizeof(_tune), GBVARS_MUSICDATATUNE_INDEX , GBVARS_QUEEN); -} - -static void addMusicdata_sfxName() { - const char *_sfxName[] = { - /* 1 - Door Open (standard) */ - "116Bssss", - - /* 2 - Door Close (standard) */ - "105assss", - - /* 3 - Pour Liquid */ - "133sssss", - - /* 4 - Light Switch */ - "27ssssss", - - /* 5 - Scissor Snip */ - "15ssssss", - - /* 6 - Pick up Sticky */ - "79ssssss", - - /* 7 - Hydraulic Doors Open */ - "96ssssss", - - /* 8 - Hydraulic Doors Close */ - "97ssssss", - - /* 9 - Metallic Door Slams */ - "105sssss", - - /* 10 - Small Hatch Close */ - "106sssss", - - /* 11 - Oracle Rezzes In */ - "132sssss", - - /* 12 - Polish Sparkle */ - "132Cssss", - - /* 13 - Splorch! */ - "137Bssss", - - /* 14 - Dino Ray Gun */ - "138sssss", - - /* 15 - Squish! */ - "137Assss", - - /* 16 - Robot Laser */ - "61ssssss", - - /* 17 - Thud wood light */ - "109sssss", - - /* 18 - Thud wood deep */ - "110sssss", - - /* 19 - Thud metallic */ - "111sssss", - - /* 20 - Zombies Rez Out */ - "77ssssss", - - /* 21 - Sarc Door Closes */ - "58ssssss", - - /* 22 - Thud breadboard fruit/Coconut */ - "131Assss", - - /* 23 - Thud stone */ - "75ssssss", - - /* 24 - Cloth Slide 1 */ - "135sssss", - - /* 25 - Open Chest */ - "112sssss", - - /* 26 - Close Chest */ - "121sssss", - - /* 27 - Open Drawer */ - "120sssss", - - /* 28 - Truck door closes */ - "122sssss", - - /* 29 - Truck Starts */ - "123Assss", - - /* 30 - Truck Drives Off */ - "123Bssss", - - /* 31 - Fish Splash */ - "18ssssss", - - /* 32 - Agression Enhancer */ - "138Bssss", - - /* 33 - Close Drawer/Push Ladder */ - "113sssss", - - /* 34 - *Stamp Sound */ - "40ssssss", - - /* 35 - plane hatch open */ - "3sssssss", - - /* 36 - plane hatch close */ - "4sssssss", - - /* 37 - tie vines */ - "11ssssss", - - /* 38 - Pterodactyl */ - "10ssssss", - - /* 39 - Beef Jerky Splash */ - "6sssssss", - - /* 40 - Piranha Burp */ - "7sssssss", - - /* 41 - Falling Vine */ - "13ssssss", - - /* 42 - Sproing! */ - "29ssssss", - - /* 43 - Prison/Dungeon Door */ - "33ssssss", - - /* 44 - Ape takes off mask */ - "24ssssss", - - /* 45 - Bark breaks */ - "25ssssss", - - /* 46 - Stone Click */ - "136sssss", - - /* 47 - Rocket Pack Zoom */ - "1006ssss", - - /* 48 - Cash Register */ - "36ssssss", - - /* 49 - Squeaky Toy */ - "37ssssss", - - /* 50 - Falling Chains */ - "38ssssss", - - /* 51 - Cloth Unravels */ - "64ssssss", - - /* 52 - Open Locker Door */ - "48ssssss", - - /* 53 - Close Locker Door */ - "49ssssss", - - /* 54 - Rub Pencil on Pad */ - "50ssssss", - - /* 55 - Open Safe */ - "51ssssss", - - /* 56 - Close Safe */ - "52ssssss", - - /* 57 - Push Chair */ - "59ssssss", - - /* 58 - Snake Hiss */ - "83ssssss", - - /* 59 - Oracle Rezzes Out */ - "70ssssss", - - /* 60 - Wall Crumbles */ - "73Asssss", - - /* 61 - Crypt Crumbles */ - "76ssssss", - - /* 62 - Creaking Stick */ - "74Asssss", - - /* 63 - Joe Sucked Up */ - "80ssssss", - - /* 64 - Slide Chute */ - "114assss", - - /* 65 - Press Button */ - "1007ssss", - - /* 66 - Snap Branch */ - "101sssss", - - /* 67 - Dino Horn */ - "103sssss", - - /* 68 - Tyre Screech */ - "125sssss", - - /* 69 - Chicken */ - "126sssss", - - /* 70 - Oil Splat */ - "127sssss", - - /* 71 - Punch */ - "128sssss", - - /* 72 - Body Hits Ground */ - "129sssss", - - /* 73 - Pick Hits Stone */ - "71ssssss", - - /* 74 - Stalactite Crumbles */ - "119sssss", - - /* 75 - *Drip */ - "93ssssss", - - /* 76 - Tic-Toc */ - "42Bsssss", - - /* 77 - Explosion */ - "88ssssss", - - /* 78 - Stone Door Grind 1 */ - "1001ssss", - - /* 79 - Stone Door Grind 2 */ - "1002ssss", - - /* 80 - *Fight Explosion */ - "1000ssss", - - /* 81 - Stone Grind (heavy) */ - "1003ssss", - - /* 82 - Stone Grind (light) */ - "89ssssss", - - /* 83 - Piranha Splash */ - "5sssssss", - - /* 84 - Cloth Slide 2 */ - "1005ssss", - - /* 85 - Temple Laser */ - "87ssssss", - - /* 86 - Dino Transformation */ - "55Bsssss", - - /* 87 - Experimental Laser */ - "55ssssss", - - /* 88 - Stone Grind (medium) */ - "134sssss", - - /* 89 - Weeping God Grind */ - "94ssssss", - - /* 90 - Alien Hum */ - "95ssssss", - - /* 91 - Alien Puzzle */ - "103Assss", - - /* 92 - Vacuum On */ - "21ssssss", - - /* 93 - Vacuum Off */ - "21Csssss", - - /* 94 - Elevator Starts */ - "44ssssss", - - /* 95 - Mummy Crumbles */ - "68ssssss", - - /* 96 - Temple Green Circle */ - "60Bsssss", - - /* 97 - Rattle Bars */ - "115sssss", - - /* 98 - Door Dissolves */ - "56ssssss", - - /* 99 - Altar Slides */ - "85ssssss", - - /* 100 - Light Torch */ - "81ssssss", - - /* 101 - Plane Flyby */ - "1027ssss", - - /* 102 - Plaster Loud */ - "41Bsssss", - - /* 103 - Sparky Bathtub */ - "73ssssss", - - /* 104 - Ape Rezzes Out */ - "14ssssss", - - /* 105 - Piranhas Swim */ - "17ssssss", - - /* 106 - *Gun Shot */ - "1004ssss", - - /* 107 - Pull Lever */ - "1008ssss", - - /* 108 - Wrong Code */ - "1009ssss", - - /* 109 - Correct Code */ - "1010ssss", - - /* 110 - Sizzle */ - "1011ssss", - - /* 111 - Money In Slot */ - "1012ssss", - - /* 112 - Lightning */ - "1013ssss", - - /* 113 - Machine Gun Fire */ - "1014ssss", - - /* 114 - Cage Descends */ - "1015ssss", - - /* 115 - Temple Chair Activates */ - "1016ssss", - - /* 116 - Robot Powers On */ - "1017ssss", - - /* 117 - Grow Big */ - "1018ssss", - - /* 118 - Eat Food */ - "1019ssss", - - /* 119 - Head Shrink */ - "1020ssss", - - /* 120 - Grinding Gears */ - "84ssssss", - - /* 121 - Wave Torch */ - "1021ssss", - - /* 122 - Snake Slithers Off */ - "1022ssss", - - /* 123 - Chair Splash */ - "26ssssss", - - /* 124 - Deflect Laser */ - "60ssssss", - - /* 125 - Zap Frank */ - "1023ssss", - - /* 126 - Frank Transforms */ - "1024ssss", - - /* 127 - Alarm Clock */ - "1025ssss", - - /* 128 - Puff */ - "35ssssss", - - /* 129 - Bite */ - "1026ssss", - - /* 130 - Plane Engine 1 */ - "1028ssss", - - /* 131 - Plane Engine 2 */ - "1029ssss", - - /* 132 - Boat In */ - "1030ssss", - - /* 133 - Boat Out */ - "1031ssss", - - /* 134 - Jaspar Eats */ - "1032ssss", - - /* 135 - Compy Scream 1 */ - "1033ssss", - - /* 136 - Compy Scream 2 */ - "1034ssss" - }; - - const char *first = _sfxName[0]; - const char *last = _sfxName[135]; - - UInt32 size = ((last - first) + 10); - - writeRecord((void *)first, size, GBVARS_MUSICDATASFXNAME_INDEX , GBVARS_QUEEN); -} - -static void addMusicdata_jungleList() { - int16 _jungleList[] = { 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 13, 14, 0 }; - - writeRecord(_jungleList, sizeof(_jungleList), GBVARS_MUSICDATAJUNGLELIST_INDEX , GBVARS_QUEEN); -} - -void Queen_addMusicdata() { - - addMusicdata_songDemo(); - addMusicdata_song(); - addMusicdata_tuneDemo(); - addMusicdata_tune(); - addMusicdata_sfxName(); - addMusicdata_jungleList(); -} diff --git a/backends/PalmOS/Src/builder/queen/bq_restables.c b/backends/PalmOS/Src/builder/queen/bq_restables.c deleted file mode 100644 index 29fd7fb370..0000000000 --- a/backends/PalmOS/Src/builder/queen/bq_restables.c +++ /dev/null @@ -1,1096 +0,0 @@ -#include -#include "b_globals.h" - -typedef struct { - char filename[13]; - UInt8 inBundle; - UInt32 offset; - UInt32 size; -} ResourceEntry; - -static void addRestables_resourceTablePEM10() { - ResourceEntry _resourceTablePEM10[] = { - { "1000SSSS.SB", 1, 0x00000000, 0x000027fe }, - { "1001SSSS.SB", 1, 0x000027fe, 0x00007af8 }, - { "1002SSSS.SB", 1, 0x0000a2f6, 0x000049e2 }, - { "1003SSSS.SB", 1, 0x0000ecd8, 0x00001d42 }, - { "1004SSSS.SB", 1, 0x00010a1a, 0x00001a1c }, - { "1005SSSS.SB", 1, 0x00012436, 0x00001a8a }, - { "1006SSSS.SB", 1, 0x00013ec0, 0x00009d41 }, - { "1007SSSS.SB", 1, 0x0001dc01, 0x00001372 }, - { "1008SSSS.SB", 1, 0x0001ef73, 0x00002e4a }, - { "1009SSSS.SB", 1, 0x00021dbd, 0x0000220c }, - { "1010SSSS.SB", 1, 0x00023fc9, 0x00003b1e }, - { "1011SSSS.SB", 1, 0x00027ae7, 0x00000dd8 }, - { "1012SSSS.SB", 1, 0x000288bf, 0x0000444c }, - { "1013SSSS.SB", 1, 0x0002cd0b, 0x00007e66 }, - { "1014SSSS.SB", 1, 0x00034b71, 0x00006e14 }, - { "1015SSSS.SB", 1, 0x0003b985, 0x0000760c }, - { "1016SSSS.SB", 1, 0x00042f91, 0x00004f8b }, - { "1017SSSS.SB", 1, 0x00047f1c, 0x00004848 }, - { "1018SSSS.SB", 1, 0x0004c764, 0x00007e94 }, - { "1019SSSS.SB", 1, 0x000545f8, 0x00003a70 }, - { "101SSSSS.SB", 1, 0x00058068, 0x0000191a }, - { "1020SSSS.SB", 1, 0x00059982, 0x00004d90 }, - { "1021SSSS.SB", 1, 0x0005e712, 0x00003dcc }, - { "1023SSSS.SB", 1, 0x000624de, 0x00003d7f }, - { "1024SSSS.SB", 1, 0x0006625d, 0x00004f8a }, - { "1025SSSS.SB", 1, 0x0006b1e7, 0x00006488 }, - { "1026SSSS.SB", 1, 0x0007166f, 0x00002022 }, - { "1027SSSS.SB", 1, 0x00073691, 0x00009e76 }, - { "1028SSSS.SB", 1, 0x0007d507, 0x0001b37c }, - { "1029SSSS.SB", 1, 0x00098883, 0x0000ce2c }, - { "1030SSSS.SB", 1, 0x000a56af, 0x0001e6e4 }, - { "1031SSSS.SB", 1, 0x000c3d93, 0x00011532 }, - { "1032SSSS.SB", 1, 0x000d52c5, 0x000034d4 }, - { "1033SSSS.SB", 1, 0x000d8799, 0x00002de6 }, - { "1034SSSS.SB", 1, 0x000db57f, 0x000099a1 }, - { "103ASSSS.SB", 1, 0x000e4f20, 0x00005040 }, - { "103SSSSS.SB", 1, 0x000e9f60, 0x00006a94 }, - { "105ASSSS.SB", 1, 0x000f09f4, 0x00001d04 }, - { "105SSSSS.SB", 1, 0x000f26f8, 0x000024de }, - { "106SSSSS.SB", 1, 0x000f4bd6, 0x00000ac4 }, - { "109SSSSS.SB", 1, 0x000f569a, 0x00000d96 }, - { "10SSSSSS.SB", 1, 0x000f6430, 0x000013f6 }, - { "110SSSSS.SB", 1, 0x000f7826, 0x00000c96 }, - { "111SSSSS.SB", 1, 0x000f84bc, 0x00000f72 }, - { "112SSSSS.SB", 1, 0x000f942e, 0x00000f1a }, - { "113SSSSS.SB", 1, 0x000fa348, 0x00003f5e }, - { "114ASSSS.SB", 1, 0x000fe2a6, 0x00001e54 }, - { "115SSSSS.SB", 1, 0x001000fa, 0x00002580 }, - { "116BSSSS.SB", 1, 0x0010267a, 0x00002350 }, - { "119SSSSS.SB", 1, 0x001049ca, 0x00003808 }, - { "11SSSSSS.SB", 1, 0x001081d2, 0x0000157e }, - { "120SSSSS.SB", 1, 0x00109750, 0x00002be4 }, - { "121SSSSS.SB", 1, 0x0010c334, 0x00001340 }, - { "122SSSSS.SB", 1, 0x0010d674, 0x0000173e }, - { "123ASSSS.SB", 1, 0x0010edb2, 0x00009e9d }, - { "123BSSSS.SB", 1, 0x00118c4f, 0x0000f613 }, - { "125SSSSS.SB", 1, 0x00128262, 0x0000e628 }, - { "126SSSSS.SB", 1, 0x0013688a, 0x0000372e }, - { "127SSSSS.SB", 1, 0x00139fb8, 0x0000ff1e }, - { "128SSSSS.SB", 1, 0x00149ed6, 0x00000e34 }, - { "129SSSSS.SB", 1, 0x0014ad0a, 0x00000b02 }, - { "130SSSSS.SB", 1, 0x0014b80c, 0x00000a10 }, - { "131ASSSS.SB", 1, 0x0014c21c, 0x000022d4 }, - { "132CSSSS.SB", 1, 0x0014e4f0, 0x000094c3 }, - { "132SSSSS.SB", 1, 0x001579b3, 0x00006183 }, - { "133SSSSS.SB", 1, 0x0015db36, 0x00006a13 }, - { "134SSSSS.SB", 1, 0x00164549, 0x00004ea3 }, - { "135SSSSS.SB", 1, 0x001693ec, 0x000017c8 }, - { "136SSSSS.SB", 1, 0x0016abb4, 0x000004a0 }, - { "137ASSSS.SB", 1, 0x0016b054, 0x00001826 }, - { "137BSSSS.SB", 1, 0x0016c87a, 0x00001d46 }, - { "138BSSSS.SB", 1, 0x0016e5c0, 0x000065f9 }, - { "138SSSSS.SB", 1, 0x00174bb9, 0x000053c3 }, - { "13SSSSSS.SB", 1, 0x00179f7c, 0x00001f32 }, - { "14SSSSSS.SB", 1, 0x0017beae, 0x00004921 }, - { "15SSSSSS.SB", 1, 0x001807cf, 0x000007aa }, - { "17SSSSSS.SB", 1, 0x00180f79, 0x00005080 }, - { "18SSSSSS.SB", 1, 0x00185ff9, 0x000015e2 }, - { "21CSSSSS.SB", 1, 0x001875db, 0x000048ec }, - { "21SSSSSS.SB", 1, 0x0018bec7, 0x0000bb40 }, - { "24SSSSSS.SB", 1, 0x00197a07, 0x000023fc }, - { "25SSSSSS.SB", 1, 0x00199e03, 0x000016d8 }, - { "26SSSSSS.SB", 1, 0x0019b4db, 0x000049dd }, - { "27SSSSSS.SB", 1, 0x0019feb8, 0x000010a0 }, - { "29SSSSSS.SB", 1, 0x001a0f58, 0x00004e50 }, - { "33SSSSSS.SB", 1, 0x001a5da8, 0x00005218 }, - { "35SSSSSS.SB", 1, 0x001aafc0, 0x00002c6c }, - { "36SSSSSS.SB", 1, 0x001adc2c, 0x000031d2 }, - { "37SSSSSS.SB", 1, 0x001b0dfe, 0x0000197a }, - { "38SSSSSS.SB", 1, 0x001b2778, 0x00002162 }, - { "3SSSSSSS.SB", 1, 0x001b48da, 0x00000d04 }, - { "40SSSSSS.SB", 1, 0x001b55de, 0x00000268 }, - { "41BSSSSS.SB", 1, 0x001b5846, 0x000005fe }, - { "42BSSSSS.SB", 1, 0x001b5e44, 0x00000308 }, - { "44SSSSSS.SB", 1, 0x001b614c, 0x000052c0 }, - { "48SSSSSS.SB", 1, 0x001bb40c, 0x000010a8 }, - { "49SSSSSS.SB", 1, 0x001bc4b4, 0x00001dd4 }, - { "4SSSSSSS.SB", 1, 0x001be288, 0x000009d2 }, - { "50SSSSSS.SB", 1, 0x001bec5a, 0x00003f8a }, - { "51SSSSSS.SB", 1, 0x001c2be4, 0x000015da }, - { "52SSSSSS.SB", 1, 0x001c41be, 0x0000125a }, - { "55BSSSSS.SB", 1, 0x001c5418, 0x00003d7f }, - { "55SSSSSS.SB", 1, 0x001c9197, 0x00004508 }, - { "56SSSSSS.SB", 1, 0x001cd69f, 0x0000520b }, - { "58SSSSSS.SB", 1, 0x001d28aa, 0x00003399 }, - { "59SSSSSS.SB", 1, 0x001d5c43, 0x000032b8 }, - { "5SSSSSSS.SB", 1, 0x001d8efb, 0x00004ae9 }, - { "60BSSSSS.SB", 1, 0x001dd9e4, 0x000050f2 }, - { "60SSSSSS.SB", 1, 0x001e2ad6, 0x00003c57 }, - { "61SSSSSS.SB", 1, 0x001e672d, 0x0000513d }, - { "64SSSSSS.SB", 1, 0x001eb86a, 0x00005a98 }, - { "68SSSSSS.SB", 1, 0x001f1302, 0x00003e85 }, - { "6SSSSSSS.SB", 1, 0x001f5187, 0x00001650 }, - { "70SSSSSS.SB", 1, 0x001f67d7, 0x00009645 }, - { "71SSSSSS.SB", 1, 0x001ffe1c, 0x00000fa3 }, - { "73ASSSSS.SB", 1, 0x00200dbf, 0x00008812 }, - { "73SSSSSS.SB", 1, 0x002095d1, 0x00006706 }, - { "74ASSSSS.SB", 1, 0x0020fcd7, 0x000029b2 }, - { "75SSSSSS.SB", 1, 0x00212689, 0x00000920 }, - { "76SSSSSS.SB", 1, 0x00212fa9, 0x00004ef8 }, - { "77SSSSSS.SB", 1, 0x00217ea1, 0x00003358 }, - { "79SSSSSS.SB", 1, 0x0021b1f9, 0x000016a8 }, - { "7SSSSSSS.SB", 1, 0x0021c8a1, 0x000010d4 }, - { "80SSSSSS.SB", 1, 0x0021d975, 0x0000441e }, - { "81SSSSSS.SB", 1, 0x00221d93, 0x0000517f }, - { "83SSSSSS.SB", 1, 0x00226f12, 0x000043e3 }, - { "84SSSSSS.SB", 1, 0x0022b2f5, 0x00003baa }, - { "85SSSSSS.SB", 1, 0x0022ee9f, 0x00004470 }, - { "87SSSSSS.SB", 1, 0x0023330f, 0x00005113 }, - { "88SSSSSS.SB", 1, 0x00238422, 0x00005275 }, - { "89SSSSSS.SB", 1, 0x0023d697, 0x00001a69 }, - { "93SSSSSS.SB", 1, 0x0023f100, 0x00000470 }, - { "94SSSSSS.SB", 1, 0x0023f570, 0x000051e4 }, - { "95SSSSSS.SB", 1, 0x00244754, 0x0000343b }, - { "96SSSSSS.SB", 1, 0x00247b8f, 0x00005110 }, - { "97SSSSSS.SB", 1, 0x0024cc9f, 0x00004972 }, - { "AMAZON.ACT", 1, 0x00251611, 0x0000a97a }, - { "AND1.DOG", 1, 0x0025bf8b, 0x000009ca }, - { "ANDERSON.ACT", 1, 0x0025c955, 0x00007c0a }, - { "ANDSON2.ACT", 1, 0x0026455f, 0x00007c0a }, - { "ANDSON_E.ACT", 1, 0x0026c169, 0x00003c42 }, - { "APE.ACT", 1, 0x0026fdab, 0x000084cd }, - { "APE.DOG", 1, 0x00278278, 0x000011d4 }, - { "APE2.DOG", 1, 0x0027944c, 0x000008da }, - { "APE3.DOG", 1, 0x00279d26, 0x00000788 }, - { "AQ.RL", 1, 0x0027a4ae, 0x00063f3a }, - { "AQ8.RL", 1, 0x002de3e8, 0x000167f8 }, - { "AQB2.MUS", 1, 0x002f4be0, 0x00039972 }, - { "AQBANK.MUS", 1, 0x0032e552, 0x0004fe89 }, - { "AQBANK.RL", 1, 0x0037e3db, 0x000059e9 }, - { "AZURA_E.ACT", 1, 0x00383dc4, 0x0000425a }, - { "AZURA_H.ACT", 1, 0x0038801e, 0x00008a7a }, - { "AZURA_H.BBK", 1, 0x00390a98, 0x0001a712 }, - { "AZURA_H.PCX", 1, 0x003ab1aa, 0x0000accb }, - { "B1.BBK", 1, 0x003b5e75, 0x000051fb }, - { "B1.LUM", 1, 0x003bb070, 0x00000018 }, - { "B1.MSK", 1, 0x003bb088, 0x00001f40 }, - { "B1.PCX", 1, 0x003bcfc8, 0x000162a8 }, - { "B2.BBK", 1, 0x003d3270, 0x000034b1 }, - { "B2.LUM", 1, 0x003d6721, 0x00000018 }, - { "B2.MSK", 1, 0x003d6739, 0x00001f40 }, - { "B2.PCX", 1, 0x003d8679, 0x0000a521 }, - { "BAT.SAM", 1, 0x003e2b9a, 0x00009d9a }, - { "BEETLE.ACT", 1, 0x003ec934, 0x00001e42 }, - { "BIGAM.ACT", 1, 0x003ee776, 0x00002d12 }, - { "BLANK000.SB", 1, 0x003f1488, 0x00000076 }, - { "BLUEP.CUT", 1, 0x003f14fe, 0x00000148 }, - { "BOB1.DOG", 1, 0x003f1646, 0x000010bc }, - { "BOB2.DOG", 1, 0x003f2702, 0x00000e5a }, - { "BOB3.DOG", 1, 0x003f355c, 0x00000df8 }, - { "BOB4.DOG", 1, 0x003f4354, 0x00000dea }, - { "BOB5.DOG", 1, 0x003f513e, 0x00000bf0 }, - { "BUD.ACT", 1, 0x003f5d2e, 0x00006582 }, - { "BUD1.DOG", 1, 0x003fc2b0, 0x0000129c }, - { "BUD2.DOG", 1, 0x003fd54c, 0x00000c0e }, - { "C1.BBK", 1, 0x003fe15a, 0x000026fd }, - { "C1.LUM", 1, 0x00400857, 0x00000018 }, - { "C1.MSK", 1, 0x0040086f, 0x00001f40 }, - { "C1.PCX", 1, 0x004027af, 0x00004888 }, - { "C10.BBK", 1, 0x00407037, 0x0003949f }, - { "C10.PCX", 1, 0x004404d6, 0x0000e6fd }, - { "C100A.CUT", 1, 0x0044ebd3, 0x000003be }, - { "C100B.CUT", 1, 0x0044ef91, 0x00000346 }, - { "C100C.CUT", 1, 0x0044f2d7, 0x0000019a }, - { "C100D.CUT", 1, 0x0044f471, 0x00000774 }, - { "C101A.CUT", 1, 0x0044fbe5, 0x0000021a }, - { "C101B.CUT", 1, 0x0044fdff, 0x000000e6 }, - { "C101C.CUT", 1, 0x0044fee5, 0x00000200 }, - { "C101D.CUT", 1, 0x004500e5, 0x00000144 }, - { "C101E.CUT", 1, 0x00450229, 0x00000144 }, - { "C102A.CUT", 1, 0x0045036d, 0x0000040e }, - { "C102B.CUT", 1, 0x0045077b, 0x0000040e }, - { "C102C.CUT", 1, 0x00450b89, 0x0000047e }, - { "C102D.CUT", 1, 0x00451007, 0x000003b8 }, - { "C102E.CUT", 1, 0x004513bf, 0x0000037e }, - { "C103A.CUT", 1, 0x0045173d, 0x000000b4 }, - { "C103B.CUT", 1, 0x004517f1, 0x00000104 }, - { "C103C.CUT", 1, 0x004518f5, 0x00000090 }, - { "C103D.CUT", 1, 0x00451985, 0x00000070 }, - { "C103E.CUT", 1, 0x004519f5, 0x000000da }, - { "C103F.CUT", 1, 0x00451acf, 0x0000084a }, - { "C103G.CUT", 1, 0x00452319, 0x0000068e }, - { "C103H.CUT", 1, 0x004529a7, 0x000003be }, - { "C103I.CUT", 1, 0x00452d65, 0x000001f2 }, - { "C103J.CUT", 1, 0x00452f57, 0x0000041c }, - { "C103K.CUT", 1, 0x00453373, 0x0000016a }, - { "C103L.CUT", 1, 0x004534dd, 0x00000458 }, - { "C11.BBK", 1, 0x00453935, 0x0000bf94 }, - { "C11.PCX", 1, 0x0045f8c9, 0x0000c01a }, - { "C11A.CUT", 1, 0x0046b8e3, 0x00000346 }, - { "C12A.CUT", 1, 0x0046bc29, 0x000004d0 }, - { "C13A.CUT", 1, 0x0046c0f9, 0x00000164 }, - { "C13B.CUT", 1, 0x0046c25d, 0x0000016c }, - { "C13C.CUT", 1, 0x0046c3c9, 0x000001fa }, - { "C13D.CUT", 1, 0x0046c5c3, 0x00000174 }, - { "C13E.CUT", 1, 0x0046c737, 0x000001d0 }, - { "C13F.CUT", 1, 0x0046c907, 0x000002d6 }, - { "C13G.CUT", 1, 0x0046cbdd, 0x00000152 }, - { "C13H.CUT", 1, 0x0046cd2f, 0x00000116 }, - { "C13I.CUT", 1, 0x0046ce45, 0x00000080 }, - { "C13J.CUT", 1, 0x0046cec5, 0x00000272 }, - { "C13K.CUT", 1, 0x0046d137, 0x00000192 }, - { "C13L.CUT", 1, 0x0046d2c9, 0x000001dc }, - { "C13M.CUT", 1, 0x0046d4a5, 0x00000468 }, - { "C13N.CUT", 1, 0x0046d90d, 0x0000015e }, - { "C14A.CUT", 1, 0x0046da6b, 0x000002fe }, - { "C14B.CUT", 1, 0x0046dd69, 0x00000126 }, - { "C14C.CUT", 1, 0x0046de8f, 0x00000150 }, - { "C14D.CUT", 1, 0x0046dfdf, 0x00000108 }, - { "C15A.CUT", 1, 0x0046e0e7, 0x00000264 }, - { "C15B.CUT", 1, 0x0046e34b, 0x00000136 }, - { "C15C.CUT", 1, 0x0046e481, 0x00000380 }, - { "C15D.CUT", 1, 0x0046e801, 0x000002d2 }, - { "C15E.CUT", 1, 0x0046ead3, 0x000000f4 }, - { "C16A.CUT", 1, 0x0046ebc7, 0x000005d6 }, - { "C16B.CUT", 1, 0x0046f19d, 0x0000057e }, - { "C17A.CUT", 1, 0x0046f71b, 0x00000156 }, - { "C18A.CUT", 1, 0x0046f871, 0x00000a60 }, - { "C18B.CUT", 1, 0x004702d1, 0x000012b8 }, - { "C18C.CUT", 1, 0x00471589, 0x00001202 }, - { "C18D.CUT", 1, 0x0047278b, 0x000009fa }, - { "C18E.CUT", 1, 0x00473185, 0x000009e4 }, - { "C19A.CUT", 1, 0x00473b69, 0x00001076 }, - { "C19B.CUT", 1, 0x00474bdf, 0x0000015c }, - { "C1A.CUT", 1, 0x00474d3b, 0x0000034e }, - { "C2.BBK", 1, 0x00475089, 0x00005908 }, - { "C2.LUM", 1, 0x0047a991, 0x00000018 }, - { "C2.MSK", 1, 0x0047a9a9, 0x00001f40 }, - { "C2.PCX", 1, 0x0047c8e9, 0x00007f3a }, - { "C2.SAM", 1, 0x00484823, 0x000147ac }, - { "C20A.CUT", 1, 0x00498fcf, 0x00000500 }, - { "C20B.CUT", 1, 0x004994cf, 0x00000168 }, - { "C20C.CUT", 1, 0x00499637, 0x00000170 }, - { "C20D.CUT", 1, 0x004997a7, 0x00000388 }, - { "C20E.CUT", 1, 0x00499b2f, 0x00000394 }, - { "C20F.CUT", 1, 0x00499ec3, 0x0000073a }, - { "C20G.CUT", 1, 0x0049a5fd, 0x0000029c }, - { "C21A.CUT", 1, 0x0049a899, 0x000000da }, - { "C21B.CUT", 1, 0x0049a973, 0x000000ee }, - { "C21C.CUT", 1, 0x0049aa61, 0x0000025e }, - { "C21D.CUT", 1, 0x0049acbf, 0x000002ec }, - { "C21E.CUT", 1, 0x0049afab, 0x00000602 }, - { "C21F.CUT", 1, 0x0049b5ad, 0x000003e2 }, - { "C21G.CUT", 1, 0x0049b98f, 0x00000136 }, - { "C21H.CUT", 1, 0x0049bac5, 0x00000172 }, - { "C21I.CUT", 1, 0x0049bc37, 0x0000024c }, - { "C21J.CUT", 1, 0x0049be83, 0x00000122 }, - { "C21K.CUT", 1, 0x0049bfa5, 0x00000584 }, - { "C21L.CUT", 1, 0x0049c529, 0x00000522 }, - { "C21M.CUT", 1, 0x0049ca4b, 0x000001ea }, - { "C21N.CUT", 1, 0x0049cc35, 0x00000610 }, - { "C21O.CUT", 1, 0x0049d245, 0x000000f4 }, - { "C21P.CUT", 1, 0x0049d339, 0x00000150 }, - { "C21Q.CUT", 1, 0x0049d489, 0x000002ec }, - { "C21R.CUT", 1, 0x0049d775, 0x00000106 }, - { "C21S.CUT", 1, 0x0049d87b, 0x0000012a }, - { "C21T.CUT", 1, 0x0049d9a5, 0x0000015e }, - { "C21U.CUT", 1, 0x0049db03, 0x000000c6 }, - { "C22A.CUT", 1, 0x0049dbc9, 0x00000156 }, - { "C22B.CUT", 1, 0x0049dd1f, 0x000000fc }, - { "C22C.CUT", 1, 0x0049de1b, 0x00000166 }, - { "C24A.CUT", 1, 0x0049df81, 0x000000ec }, - { "C24B.CUT", 1, 0x0049e06d, 0x000005ca }, - { "C25A.CUT", 1, 0x0049e637, 0x000002d0 }, - { "C25B.CUT", 1, 0x0049e907, 0x000002e4 }, - { "C25C.CUT", 1, 0x0049ebeb, 0x0000023e }, - { "C25D.CUT", 1, 0x0049ee29, 0x00000182 }, - { "C25E.CUT", 1, 0x0049efab, 0x00000126 }, - { "C25F.CUT", 1, 0x0049f0d1, 0x0000017c }, - { "C25G.CUT", 1, 0x0049f24d, 0x000001e2 }, - { "C25H.CUT", 1, 0x0049f42f, 0x00000218 }, - { "C25I.CUT", 1, 0x0049f647, 0x000001da }, - { "C26A.CUT", 1, 0x0049f821, 0x0000030e }, - { "C26B.CUT", 1, 0x0049fb2f, 0x000000be }, - { "C26C.CUT", 1, 0x0049fbed, 0x000001a4 }, - { "C2A.CUT", 1, 0x0049fd91, 0x000008d0 }, - { "C2B.CUT", 1, 0x004a0661, 0x000004b8 }, - { "C2C.CUT", 1, 0x004a0b19, 0x0000023e }, - { "C3.BBK", 1, 0x004a0d57, 0x00006875 }, - { "C3.LUM", 1, 0x004a75cc, 0x00000018 }, - { "C3.MSK", 1, 0x004a75e4, 0x00001f40 }, - { "C3.PCX", 1, 0x004a9524, 0x0000c40c }, - { "C3.SAM", 1, 0x004b5930, 0x00011c72 }, - { "C30A.CUT", 1, 0x004c75a2, 0x00000254 }, - { "C30B.CUT", 1, 0x004c77f6, 0x000003c4 }, - { "C30C.CUT", 1, 0x004c7bba, 0x00000722 }, - { "C30D.CUT", 1, 0x004c82dc, 0x00000206 }, - { "C30E.CUT", 1, 0x004c84e2, 0x00000976 }, - { "C30F.CUT", 1, 0x004c8e58, 0x0000010e }, - { "C30G.CUT", 1, 0x004c8f66, 0x000001e6 }, - { "C30H.CUT", 1, 0x004c914c, 0x0000014c }, - { "C31A.CUT", 1, 0x004c9298, 0x0000020c }, - { "C31B.CUT", 1, 0x004c94a4, 0x00000596 }, - { "C31C.CUT", 1, 0x004c9a3a, 0x000000e2 }, - { "C31D.CUT", 1, 0x004c9b1c, 0x000004e4 }, - { "C31E.CUT", 1, 0x004ca000, 0x000000ee }, - { "C31F.CUT", 1, 0x004ca0ee, 0x0000010e }, - { "C32A.CUT", 1, 0x004ca1fc, 0x000000ac }, - { "C32B.CUT", 1, 0x004ca2a8, 0x0000010c }, - { "C32C.CUT", 1, 0x004ca3b4, 0x000000e8 }, - { "C35A.CUT", 1, 0x004ca49c, 0x0000042a }, - { "C35B.CUT", 1, 0x004ca8c6, 0x000001c0 }, - { "C36A.CUT", 1, 0x004caa86, 0x0000078c }, - { "C39A.CUT", 1, 0x004cb212, 0x00000ed4 }, - { "C3A.CUT", 1, 0x004cc0e6, 0x00000610 }, - { "C3B.CUT", 1, 0x004cc6f6, 0x000000a0 }, - { "C3C.CUT", 1, 0x004cc796, 0x000005d8 }, - { "C3D.CUT", 1, 0x004ccd6e, 0x00000344 }, - { "C3E.CUT", 1, 0x004cd0b2, 0x0000013a }, - { "C3F.CUT", 1, 0x004cd1ec, 0x000000e0 }, - { "C3G.CUT", 1, 0x004cd2cc, 0x00000102 }, - { "C3H.CUT", 1, 0x004cd3ce, 0x00000120 }, - { "C4.BBK", 1, 0x004cd4ee, 0x00009420 }, - { "C4.LUM", 1, 0x004d690e, 0x00000018 }, - { "C4.MSK", 1, 0x004d6926, 0x00001f40 }, - { "C4.PCX", 1, 0x004d8866, 0x00009487 }, - { "C4.SAM", 1, 0x004e1ced, 0x00002754 }, - { "C40A.CUT", 1, 0x004e4441, 0x0000094a }, - { "C40B.CUT", 1, 0x004e4d8b, 0x000002c2 }, - { "C41A.CUT", 1, 0x004e504d, 0x00000b84 }, - { "C41B.CUT", 1, 0x004e5bd1, 0x00001ba0 }, - { "C41C.CUT", 1, 0x004e7771, 0x00000170 }, - { "C41D.CUT", 1, 0x004e78e1, 0x0000025c }, - { "C41E.CUT", 1, 0x004e7b3d, 0x000001b8 }, - { "C41F.CUT", 1, 0x004e7cf5, 0x0000009c }, - { "C41G.CUT", 1, 0x004e7d91, 0x000000fe }, - { "C41H.CUT", 1, 0x004e7e8f, 0x000000ba }, - { "C42A.CUT", 1, 0x004e7f49, 0x000003ce }, - { "C42B.CUT", 1, 0x004e8317, 0x00000802 }, - { "C42C.CUT", 1, 0x004e8b19, 0x000001ae }, - { "C42D.CUT", 1, 0x004e8cc7, 0x0000010e }, - { "C42E.CUT", 1, 0x004e8dd5, 0x00000106 }, - { "C42F.CUT", 1, 0x004e8edb, 0x00000166 }, - { "C44A.CUT", 1, 0x004e9041, 0x000004f8 }, - { "C44B.CUT", 1, 0x004e9539, 0x0000079e }, - { "C44C.CUT", 1, 0x004e9cd7, 0x0000030a }, - { "C45A.CUT", 1, 0x004e9fe1, 0x000000f8 }, - { "C45B.CUT", 1, 0x004ea0d9, 0x000000f8 }, - { "C45C.CUT", 1, 0x004ea1d1, 0x000000f8 }, - { "C45D.CUT", 1, 0x004ea2c9, 0x000000f8 }, - { "C45E.CUT", 1, 0x004ea3c1, 0x00000186 }, - { "C46A.CUT", 1, 0x004ea547, 0x000000f8 }, - { "C46B.CUT", 1, 0x004ea63f, 0x000000f8 }, - { "C46C.CUT", 1, 0x004ea737, 0x000000f8 }, - { "C46D.CUT", 1, 0x004ea82f, 0x000000f8 }, - { "C47A.CUT", 1, 0x004ea927, 0x00000640 }, - { "C48A.CUT", 1, 0x004eaf67, 0x00000656 }, - { "C48C.CUT", 1, 0x004eb5bd, 0x00000516 }, - { "C49B.CUT", 1, 0x004ebad3, 0x00000398 }, - { "C49C.CUT", 1, 0x004ebe6b, 0x00000132 }, - { "C49D.CUT", 1, 0x004ebf9d, 0x000004e4 }, - { "C4A.CUT", 1, 0x004ec481, 0x00000094 }, - { "C4B.CUT", 1, 0x004ec515, 0x000003f4 }, - { "C5.BBK", 1, 0x004ec909, 0x00004171 }, - { "C5.LUM", 1, 0x004f0a7a, 0x00000018 }, - { "C5.MSK", 1, 0x004f0a92, 0x00001f40 }, - { "C5.PCX", 1, 0x004f29d2, 0x000099f2 }, - { "C5.SAM", 1, 0x004fc3c4, 0x00003016 }, - { "C50A.CUT", 1, 0x004ff3da, 0x000004f2 }, - { "C50B.CUT", 1, 0x004ff8cc, 0x000001f8 }, - { "C50C.CUT", 1, 0x004ffac4, 0x0000086e }, - { "C50D.CUT", 1, 0x00500332, 0x000000e2 }, - { "C50E.CUT", 1, 0x00500414, 0x00000618 }, - { "C50F.CUT", 1, 0x00500a2c, 0x000003b8 }, - { "C50G.CUT", 1, 0x00500de4, 0x000008da }, - { "C50H.CUT", 1, 0x005016be, 0x000000ba }, - { "C50I.CUT", 1, 0x00501778, 0x000009d4 }, - { "C50J.CUT", 1, 0x0050214c, 0x000000f2 }, - { "C51A.CUT", 1, 0x0050223e, 0x0000080e }, - { "C51B.CUT", 1, 0x00502a4c, 0x000001d8 }, - { "C51C.CUT", 1, 0x00502c24, 0x000001d8 }, - { "C51D.CUT", 1, 0x00502dfc, 0x000000ec }, - { "C53A.CUT", 1, 0x00502ee8, 0x00000566 }, - { "C53B.CUT", 1, 0x0050344e, 0x0000018a }, - { "C54A.CUT", 1, 0x005035d8, 0x0000028c }, - { "C55A.CUT", 1, 0x00503864, 0x000006c8 }, - { "C56A.CUT", 1, 0x00503f2c, 0x000003ba }, - { "C56B.CUT", 1, 0x005042e6, 0x00000678 }, - { "C58A.CUT", 1, 0x0050495e, 0x000001cc }, - { "C59A.CUT", 1, 0x00504b2a, 0x0000014a }, - { "C5A.CUT", 1, 0x00504c74, 0x0000040c }, - { "C5C.CUT", 1, 0x00505080, 0x0000050c }, - { "C6.BBK", 1, 0x0050558c, 0x0000711b }, - { "C6.LUM", 1, 0x0050c6a7, 0x00000018 }, - { "C6.MSK", 1, 0x0050c6bf, 0x00001f40 }, - { "C6.PCX", 1, 0x0050e5ff, 0x0000c6c0 }, - { "C6.SAM", 1, 0x0051acbf, 0x00004a87 }, - { "C60A.CUT", 1, 0x0051f746, 0x00000170 }, - { "C61A.CUT", 1, 0x0051f8b6, 0x00000170 }, - { "C62A.CUT", 1, 0x0051fa26, 0x00000dde }, - { "C62B.CUT", 1, 0x00520804, 0x00000268 }, - { "C62C.CUT", 1, 0x00520a6c, 0x00000164 }, - { "C62D.CUT", 1, 0x00520bd0, 0x000002a2 }, - { "C63A.CUT", 1, 0x00520e72, 0x000002d0 }, - { "C63B.CUT", 1, 0x00521142, 0x0000098e }, - { "C63C.CUT", 1, 0x00521ad0, 0x000005d8 }, - { "C63D.CUT", 1, 0x005220a8, 0x00000194 }, - { "C63E.CUT", 1, 0x0052223c, 0x00000336 }, - { "C63F.CUT", 1, 0x00522572, 0x0000041a }, - { "C63G.CUT", 1, 0x0052298c, 0x00000170 }, - { "C63H.CUT", 1, 0x00522afc, 0x0000039a }, - { "C63I.CUT", 1, 0x00522e96, 0x000003ac }, - { "C63J.CUT", 1, 0x00523242, 0x000002f0 }, - { "C63K.CUT", 1, 0x00523532, 0x00000634 }, - { "C64A.CUT", 1, 0x00523b66, 0x00000128 }, - { "C66A.CUT", 1, 0x00523c8e, 0x000002e8 }, - { "C67A.CUT", 1, 0x00523f76, 0x000005b6 }, - { "C67B.CUT", 1, 0x0052452c, 0x0000054c }, - { "C69A.CUT", 1, 0x00524a78, 0x00000700 }, - { "C69B.CUT", 1, 0x00525178, 0x00000670 }, - { "C69C.CUT", 1, 0x005257e8, 0x00000688 }, - { "C69D.CUT", 1, 0x00525e70, 0x000006ac }, - { "C69E.CUT", 1, 0x0052651c, 0x000009cc }, - { "C69F.CUT", 1, 0x00526ee8, 0x00000aa2 }, - { "C69G.CUT", 1, 0x0052798a, 0x000019ac }, - { "C69H.CUT", 1, 0x00529336, 0x0000075a }, - { "C69I.CUT", 1, 0x00529a90, 0x000003f0 }, - { "C69J.CUT", 1, 0x00529e80, 0x0000008a }, - { "C69K.CUT", 1, 0x00529f0a, 0x000005c8 }, - { "C69L.CUT", 1, 0x0052a4d2, 0x0000062a }, - { "C69M.CUT", 1, 0x0052aafc, 0x000005ba }, - { "C69N.CUT", 1, 0x0052b0b6, 0x0000012c }, - { "C69O.CUT", 1, 0x0052b1e2, 0x000001e4 }, - { "C69Z.CUT", 1, 0x0052b3c6, 0x000017a4 }, - { "C6A.CUT", 1, 0x0052cb6a, 0x00000220 }, - { "C6B.CUT", 1, 0x0052cd8a, 0x000000da }, - { "C6C.CUT", 1, 0x0052ce64, 0x00000138 }, - { "C7.BBK", 1, 0x0052cf9c, 0x00013c13 }, - { "C7.PCX", 1, 0x00540baf, 0x0000a75d }, - { "C70A.CUT", 1, 0x0054b30c, 0x000002b8 }, - { "C70B.CUT", 1, 0x0054b5c4, 0x00000384 }, - { "C70B.SAM", 1, 0x0054b948, 0x00009a4e }, - { "C70C.CUT", 1, 0x00555396, 0x00000292 }, - { "C70D.CUT", 1, 0x00555628, 0x00000952 }, - { "C70E.CUT", 1, 0x00555f7a, 0x0000038c }, - { "C70F.CUT", 1, 0x00556306, 0x0000034c }, - { "C70F.SAM", 1, 0x00556652, 0x000076bf }, - { "C70G.CUT", 1, 0x0055dd11, 0x00000348 }, - { "C70G.SAM", 1, 0x0055e059, 0x00008d7d }, - { "C70H.CUT", 1, 0x00566dd6, 0x00000322 }, - { "C70I.CUT", 1, 0x005670f8, 0x000003d8 }, - { "C70J.CUT", 1, 0x005674d0, 0x00000184 }, - { "C70K.CUT", 1, 0x00567654, 0x000002c0 }, - { "C70L.CUT", 1, 0x00567914, 0x000002c0 }, - { "C70M.CUT", 1, 0x00567bd4, 0x000002ba }, - { "C70N.CUT", 1, 0x00567e8e, 0x000002ba }, - { "C71A.CUT", 1, 0x00568148, 0x00000094 }, - { "C71B.CUT", 1, 0x005681dc, 0x00000094 }, - { "C71C.CUT", 1, 0x00568270, 0x000000b2 }, - { "C72A.CUT", 1, 0x00568322, 0x00000730 }, - { "C72B.CUT", 1, 0x00568a52, 0x00000632 }, - { "C72C.CUT", 1, 0x00569084, 0x0000007c }, - { "C73A.CUT", 1, 0x00569100, 0x0000038a }, - { "C73B.CUT", 1, 0x0056948a, 0x000002b8 }, - { "C73C.CUT", 1, 0x00569742, 0x00000192 }, - { "C73D.CUT", 1, 0x005698d4, 0x000000c8 }, - { "C73E.CUT", 1, 0x0056999c, 0x00000330 }, - { "C73F.CUT", 1, 0x00569ccc, 0x00000344 }, - { "C73G.CUT", 1, 0x0056a010, 0x00000210 }, - { "C74A.CUT", 1, 0x0056a220, 0x0000075e }, - { "C74B.CUT", 1, 0x0056a97e, 0x0000018c }, - { "C74C.CUT", 1, 0x0056ab0a, 0x000001dc }, - { "C74D.CUT", 1, 0x0056ace6, 0x0000018c }, - { "C74F.CUT", 1, 0x0056ae72, 0x000000e0 }, - { "C75B.CUT", 1, 0x0056af52, 0x00000d00 }, - { "C76A.CUT", 1, 0x0056bc52, 0x00000072 }, - { "C76B.CUT", 1, 0x0056bcc4, 0x00000f28 }, - { "C8.BBK", 1, 0x0056cbec, 0x0000b5ce }, - { "C8.PCX", 1, 0x005781ba, 0x0000c31f }, - { "C8A.CUT", 1, 0x005844d9, 0x000007e4 }, - { "C8B.CUT", 1, 0x00584cbd, 0x000002a8 }, - { "C9.BBK", 1, 0x00584f65, 0x0000f68b }, - { "C9.PCX", 1, 0x005945f0, 0x0000a787 }, - { "C97A.CUT", 1, 0x0059ed77, 0x0000017e }, - { "C97B.CUT", 1, 0x0059eef5, 0x0000013c }, - { "C99D.CUT", 1, 0x0059f031, 0x00000094 }, - { "C99E.CUT", 1, 0x0059f0c5, 0x000002e6 }, - { "C99F.CUT", 1, 0x0059f3ab, 0x000002e6 }, - { "C9A.CUT", 1, 0x0059f691, 0x000001fa }, - { "C9B.CUT", 1, 0x0059f88b, 0x000000f8 }, - { "C9C.CUT", 1, 0x0059f983, 0x00000136 }, - { "C9D.CUT", 1, 0x0059fab9, 0x000000a0 }, - { "CDCLO.CUT", 1, 0x0059fb59, 0x000001f6 }, - { "CDINT.CUT", 1, 0x0059fd4f, 0x000017fe }, - { "CDINT061.SB", 1, 0x005a154d, 0x0000334c }, - { "CDINT063.SB", 1, 0x005a4899, 0x0000798b }, - { "CDINT072.SB", 1, 0x005ac224, 0x00005f03 }, - { "CDINT081.SB", 1, 0x005b2127, 0x000062b3 }, - { "CDINT091.SB", 1, 0x005b83da, 0x00008a0e }, - { "CDINT102.SB", 1, 0x005c0de8, 0x0000673a }, - { "CDINT111.SB", 1, 0x005c7522, 0x00008453 }, - { "CDINT141.SB", 1, 0x005cf975, 0x000031be }, - { "CDINT151.SB", 1, 0x005d2b33, 0x00002a7c }, - { "CDINT191.SB", 1, 0x005d55af, 0x00001fc8 }, - { "CDINT201.SB", 1, 0x005d7577, 0x00002cd8 }, - { "CDINT212.SB", 1, 0x005da24f, 0x00004b03 }, - { "CDINT231.SB", 1, 0x005ded52, 0x00008dc0 }, - { "CDINT241.SB", 1, 0x005e7b12, 0x000032cf }, - { "CDINT281.SB", 1, 0x005eade1, 0x000053a6 }, - { "CDINT291.SB", 1, 0x005f0187, 0x00002138 }, - { "CDINT301.SB", 1, 0x005f22bf, 0x00003dae }, - { "CDINT321.SB", 1, 0x005f606d, 0x00007e92 }, - { "CDINT351.SB", 1, 0x005fdeff, 0x00002000 }, - { "CDINT361.SB", 1, 0x005ffeff, 0x00005a8b }, - { "CDINT381.SB", 1, 0x0060598a, 0x00003882 }, - { "CDINT442.SB", 1, 0x0060920c, 0x0000471b }, - { "CDINT451.SB", 1, 0x0060d927, 0x00005929 }, - { "CDINT452.SB", 1, 0x00613250, 0x00007915 }, - { "CDINT461.SB", 1, 0x0061ab65, 0x00001c6a }, - { "CDINT463.SB", 1, 0x0061c7cf, 0x000030ae }, - { "CDINT464.SB", 1, 0x0061f87d, 0x0000c980 }, - { "CDINT471.SB", 1, 0x0062c1fd, 0x00003593 }, - { "CDINT481.SB", 1, 0x0062f790, 0x00004e60 }, - { "CDINT492.SB", 1, 0x006345f0, 0x00004594 }, - { "CDRES.CUT", 1, 0x00638b84, 0x000001f6 }, - { "CHANGE.SAM", 1, 0x00638d7a, 0x00005ef2 }, - { "CHEF.ACT", 1, 0x0063ec6c, 0x00005362 }, - { "CHEF.DOG", 1, 0x00643fce, 0x00000af0 }, - { "CHIEF1.DOG", 1, 0x00644abe, 0x000009ca }, - { "CHIEF2.DOG", 1, 0x00645488, 0x0000121e }, - { "CHIEF3.DOG", 1, 0x006466a6, 0x00000be4 }, - { "CHIEF4.DOG", 1, 0x0064728a, 0x000002c4 }, - { "CHORN.CUT", 1, 0x0064754e, 0x0000034a }, - { "CINTR.CUT", 1, 0x00647898, 0x00001768 }, - { "CLOGO.CUT", 1, 0x00649000, 0x000000aa }, - { "CMASK.CUT", 1, 0x006490aa, 0x00000386 }, - { "COCON.CUT", 1, 0x00649430, 0x000003d8 }, - { "COCONUT.SAM", 1, 0x00649808, 0x0000a047 }, - { "COMIC.CUT", 1, 0x0065384f, 0x0000094e }, - { "COMPY.ACT", 1, 0x0065419d, 0x00005533 }, - { "CONTROL.BBK", 1, 0x006596d0, 0x00000e0e }, - { "COPY.BBK", 1, 0x0065a4de, 0x00000002 }, - { "COPY.CUT", 1, 0x0065a4e0, 0x00000086 }, - { "COPY.LBM", 1, 0x0065a566, 0x000053ca }, - { "COPY.PCX", 1, 0x0065f930, 0x0000646f }, - { "CRAP.PCX", 1, 0x00665d9f, 0x0000724c }, - { "CRED.CUT", 1, 0x0066cfeb, 0x000003ae }, - { "CREDIT1.CRD", 1, 0x0066d399, 0x00000604 }, - { "CREDIT2.CRD", 1, 0x0066d99d, 0x000010d3 }, - { "CROWBAR.SAM", 1, 0x0066ea70, 0x00009aca }, - { "CUDRS.CUT", 1, 0x0067853a, 0x000001f6 }, - { "D1.BBK", 1, 0x00678730, 0x000061b7 }, - { "D1.LUM", 1, 0x0067e8e7, 0x00000018 }, - { "D1.MSK", 1, 0x0067e8ff, 0x00001f40 }, - { "D1.PCX", 1, 0x0068083f, 0x0000a331 }, - { "D1C.SAM", 1, 0x0068ab70, 0x0000ddd7 }, - { "D2.BBK", 1, 0x00698947, 0x00004630 }, - { "D2.LUM", 1, 0x0069cf77, 0x00000018 }, - { "D2.MSK", 1, 0x0069cf8f, 0x00001f40 }, - { "D2.PCX", 1, 0x0069eecf, 0x00008dc3 }, - { "D3.BBK", 1, 0x006a7c92, 0x00004b34 }, - { "D3.LUM", 1, 0x006ac7c6, 0x00000018 }, - { "D3.MSK", 1, 0x006ac7de, 0x00001f40 }, - { "D3.PCX", 1, 0x006ae71e, 0x0000a662 }, - { "D3.SAM", 1, 0x006b8d80, 0x0000c55a }, - { "D4.BBK", 1, 0x006c52da, 0x00013e0d }, - { "D4.LUM", 1, 0x006d90e7, 0x00000018 }, - { "D4.MSK", 1, 0x006d90ff, 0x00001f40 }, - { "D4.PCX", 1, 0x006db03f, 0x0000a69b }, - { "D5.BBK", 1, 0x006e56da, 0x000088a1 }, - { "D5.PCX", 1, 0x006edf7b, 0x00007bc5 }, - { "D5.SAM", 1, 0x006f5b40, 0x00002ee7 }, - { "D5B.SAM", 1, 0x006f8a27, 0x0001128e }, - { "D6.BBK", 1, 0x00709cb5, 0x0000a480 }, - { "D6.LUM", 1, 0x00714135, 0x00000018 }, - { "D6.MSK", 1, 0x0071414d, 0x00001f40 }, - { "D6.PCX", 1, 0x0071608d, 0x000099a6 }, - { "D9.BBK", 1, 0x0071fa33, 0x00008461 }, - { "D9.PCX", 1, 0x00727e94, 0x0000b551 }, - { "DATA", 1, 0x007333e5, 0x00001434 }, - { "DEATH.ACT", 1, 0x00734819, 0x0000d83a }, - { "DEATH1.DOG", 1, 0x00742053, 0x000017ca }, - { "DEATH2.DOG", 1, 0x0074381d, 0x0000081e }, - { "DEINO.ACT", 1, 0x0074403b, 0x0000e199 }, - { "DFRANK.ACT", 1, 0x007521d4, 0x000052e2 }, - { "DISK1.SAM", 1, 0x007574b6, 0x000033da }, - { "DOG.ACT", 1, 0x0075a890, 0x00002a62 }, - { "DOG.DOG", 1, 0x0075d2f2, 0x0000023a }, - { "E1.BBK", 1, 0x0075d52c, 0x0001765b }, - { "E1.PCX", 1, 0x00774b87, 0x0000dcc7 }, - { "E2.BBK", 1, 0x0078284e, 0x0000cefc }, - { "E2.PCX", 1, 0x0078f74a, 0x0000f5f2 }, - { "E3.BBK", 1, 0x0079ed3c, 0x00011042 }, - { "E3.PCX", 1, 0x007afd7e, 0x0000a4d0 }, - { "EQDATA.LHA", 1, 0x007ba24e, 0x00031a7a }, - { "F1.BBK", 1, 0x007ebcc8, 0x00004716 }, - { "F1.LUM", 1, 0x007f03de, 0x00000018 }, - { "F1.MSK", 1, 0x007f03f6, 0x00001f40 }, - { "F1.PCX", 1, 0x007f2336, 0x0000991d }, - { "F1.SAM", 1, 0x007fbc53, 0x0000fd04 }, - { "F1B.PCX", 1, 0x0080b957, 0x00005739 }, - { "F2.BBK", 1, 0x00811090, 0x00006a18 }, - { "F2.LUM", 1, 0x00817aa8, 0x00000018 }, - { "F2.MSK", 1, 0x00817ac0, 0x00001f40 }, - { "F2.PCX", 1, 0x00819a00, 0x00009f28 }, - { "F2B.PCX", 1, 0x00823928, 0x00004abb }, - { "F3.BBK", 1, 0x008283e3, 0x00002c59 }, - { "F3.LUM", 1, 0x0082b03c, 0x00000018 }, - { "F3.MSK", 1, 0x0082b054, 0x00001f40 }, - { "F3.PCX", 1, 0x0082cf94, 0x0000aa0c }, - { "F3.SAM", 1, 0x008379a0, 0x0000a940 }, - { "F4.BBK", 1, 0x008422e0, 0x0000b561 }, - { "F4.LUM", 1, 0x0084d841, 0x00000018 }, - { "F4.MSK", 1, 0x0084d859, 0x00001f40 }, - { "F4.PCX", 1, 0x0084f799, 0x00014df0 }, - { "F4B.PCX", 1, 0x00864589, 0x000117d8 }, - { "F4S.PCX", 1, 0x00875d61, 0x0000833e }, - { "FALL.SAM", 1, 0x0087e09f, 0x0000cbda }, - { "FAYE.ACT", 1, 0x0088ac79, 0x00013fda }, - { "FAYE2.DOG", 1, 0x0089ec53, 0x0000098e }, - { "FAYE3.DOG", 1, 0x0089f5e1, 0x000005d8 }, - { "FAYE4.DOG", 1, 0x0089fbb9, 0x00000c40 }, - { "FAYE5.CUT", 1, 0x008a07f9, 0x0000007a }, - { "FAYE5.DOG", 1, 0x008a0873, 0x000009ce }, - { "FAYE6.DOG", 1, 0x008a1241, 0x00000466 }, - { "FAYE_E.ACT", 1, 0x008a16a7, 0x00002d4a }, - { "FAYE_H.ACT", 1, 0x008a43f1, 0x0000807a }, - { "FAYE_H.BBK", 1, 0x008ac46b, 0x0000e9fb }, - { "FAYE_H.PCX", 1, 0x008bae66, 0x000096b5 }, - { "FRANK.ACT", 1, 0x008c451b, 0x00008342 }, - { "FRANK.DOG", 1, 0x008cc85d, 0x00000e48 }, - { "FRANK_H.ACT", 1, 0x008cd6a5, 0x0000ad60 }, - { "FRANK_H.BBK", 1, 0x008d8405, 0x00016369 }, - { "FRANK_H.PCX", 1, 0x008ee76e, 0x00008dd6 }, - { "GET_GEM.SAM", 1, 0x008f7544, 0x000099d2 }, - { "GET_HORN.BBK", 1, 0x00900f16, 0x000045d8 }, - { "GET_HORN.SAM", 1, 0x009054ee, 0x00005dde }, - { "GM.CUT", 1, 0x0090b2cc, 0x0000009c }, - { "GOONS.ACT", 1, 0x0090b368, 0x0000728a }, - { "GUARDS.ACT", 1, 0x009125f2, 0x0000504a }, - { "HENRY.ACT", 1, 0x0091763c, 0x0000b102 }, - { "HENRY.DOG", 1, 0x0092273e, 0x00001280 }, - { "HENRY2.DOG", 1, 0x009239be, 0x00000b24 }, - { "HORN.SAM", 1, 0x009244e2, 0x000067b2 }, - { "HUGH.ACT", 1, 0x0092ac94, 0x0000e8da }, - { "I1.SAM", 1, 0x0093956e, 0x0000cbf2 }, - { "IAN.ACT", 1, 0x00946160, 0x0000a542 }, - { "IAN1.DOG", 1, 0x009506a2, 0x00000518 }, - { "IAN2.DOG", 1, 0x00950bba, 0x00000a9a }, - { "J1.BBK", 1, 0x00951654, 0x000025fc }, - { "J1.LUM", 1, 0x00953c50, 0x00000018 }, - { "J1.MSK", 1, 0x00953c68, 0x00001f40 }, - { "J1.PCX", 1, 0x00955ba8, 0x00008d84 }, - { "J1.SAM", 1, 0x0095e92c, 0x00008442 }, - { "J2.BBK", 1, 0x00966d6e, 0x00000e97 }, - { "J2.LUM", 1, 0x00967c05, 0x00000018 }, - { "J2.MSK", 1, 0x00967c1d, 0x00001f40 }, - { "J2.PCX", 1, 0x00969b5d, 0x0000c33c }, - { "J2.SAM", 1, 0x00975e99, 0x0000a1e3 }, - { "J3.BBK", 1, 0x0098007c, 0x00003289 }, - { "J3.LUM", 1, 0x00983305, 0x00000018 }, - { "J3.MSK", 1, 0x0098331d, 0x00001f40 }, - { "J3.PCX", 1, 0x0098525d, 0x000094b4 }, - { "J4.BBK", 1, 0x0098e711, 0x00006e28 }, - { "J4.LUM", 1, 0x00995539, 0x00000018 }, - { "J4.MSK", 1, 0x00995551, 0x00001f40 }, - { "J4.PCX", 1, 0x00997491, 0x00008e90 }, - { "J5.BBK", 1, 0x009a0321, 0x00004521 }, - { "J5.LUM", 1, 0x009a4842, 0x00000018 }, - { "J5.MSK", 1, 0x009a485a, 0x00001f40 }, - { "J5.PCX", 1, 0x009a679a, 0x00009b37 }, - { "J5.SAM", 1, 0x009b02d1, 0x000042f2 }, - { "J6.BBK", 1, 0x009b45c3, 0x000043d7 }, - { "J6.LUM", 1, 0x009b899a, 0x00000018 }, - { "J6.MSK", 1, 0x009b89b2, 0x00001f40 }, - { "J6.PCX", 1, 0x009ba8f2, 0x0000a5c5 }, - { "J7.BBK", 1, 0x009c4eb7, 0x00003234 }, - { "J7.LUM", 1, 0x009c80eb, 0x00000018 }, - { "J7.MSK", 1, 0x009c8103, 0x00001f40 }, - { "J7.PCX", 1, 0x009ca043, 0x0000cd63 }, - { "J7.SAM", 1, 0x009d6da6, 0x000083aa }, - { "J8.BBK", 1, 0x009df150, 0x0000320d }, - { "J8.LUM", 1, 0x009e235d, 0x00000018 }, - { "J8.MSK", 1, 0x009e2375, 0x00001f40 }, - { "J8.PCX", 1, 0x009e42b5, 0x0000c0e2 }, - { "J8.SAM", 1, 0x009f0397, 0x0000024e }, - { "JASPAR.ACT", 1, 0x009f05e5, 0x00004fb2 }, - { "JIM1.DOG", 1, 0x009f5597, 0x00001276 }, - { "JIM2.DOG", 1, 0x009f680d, 0x00001282 }, - { "JIM3.DOG", 1, 0x009f7a8f, 0x00000df6 }, - { "JIMTAM.ACT", 1, 0x009f8885, 0x0000a08a }, - { "JOE.BBK", 1, 0x00a0290f, 0x00014b8a }, - { "JOE1.BBK", 1, 0x00a17499, 0x00012a5a }, - { "JOED_A.BBK", 1, 0x00a29ef3, 0x00009b8a }, - { "JOED_B.BBK", 1, 0x00a33a7d, 0x0000a50a }, - { "JOEU_A.BBK", 1, 0x00a3df87, 0x00009b8a }, - { "JOEU_B.BBK", 1, 0x00a47b11, 0x0000a50a }, - { "JOE_A.BBK", 1, 0x00a5201b, 0x00009b8a }, - { "JOE_B.BBK", 1, 0x00a5bba5, 0x0000dc5a }, - { "JOE_E.ACT", 1, 0x00a697ff, 0x0000388a }, - { "JOE_H.ACT", 1, 0x00a6d089, 0x0000dace }, - { "JOHN.ACT", 1, 0x00a7ab57, 0x00006312 }, - { "JOHN1.DOG", 1, 0x00a80e69, 0x0000067c }, - { "JOURNAL.BBK", 1, 0x00a814e5, 0x0000a318 }, - { "JOURNAL.PCX", 1, 0x00a8b7fd, 0x00009c70 }, - { "KISS1.SAM", 1, 0x00a9546d, 0x0000f722 }, - { "KLUNK.ACT", 1, 0x00aa4b8f, 0x00007c30 }, - { "KLUNK1.DOG", 1, 0x00aac7bf, 0x00000e6a }, - { "KLUNK2.DOG", 1, 0x00aad629, 0x00000ed0 }, - { "KLUNK2.SAM", 1, 0x00aae4f9, 0x0001737c }, - { "L1.BBK", 1, 0x00ac5875, 0x00000002 }, - { "L1.PCX", 1, 0x00ac5877, 0x000043f7 }, - { "L2.BBK", 1, 0x00ac9c6e, 0x00000002 }, - { "L2.PCX", 1, 0x00ac9c70, 0x0000ba60 }, - { "LARIS.ACT", 1, 0x00ad56d0, 0x0000355a }, - { "LARIS.DOG", 1, 0x00ad8c2a, 0x00000f32 }, - { "LARIS3.DOG", 1, 0x00ad9b5c, 0x0000079a }, - { "LITTLEP.ACT", 1, 0x00ada2f6, 0x000002e2 }, - { "LOLA.ACT", 1, 0x00ada5d8, 0x0001342d }, - { "LOLA1.DOG", 1, 0x00aeda05, 0x00000ad6 }, - { "LOU.ACT", 1, 0x00aee4db, 0x00005552 }, - { "LOU1.DOG", 1, 0x00af3a2d, 0x000010ac }, - { "LOU2.DOG", 1, 0x00af4ad9, 0x00000bae }, - { "M1.BBK", 1, 0x00af5687, 0x00006d5c }, - { "M1.PCX", 1, 0x00afc3e3, 0x000193ce }, - { "M2.BBK", 1, 0x00b157b1, 0x00001a4a }, - { "M2.PCX", 1, 0x00b171fb, 0x0000a9d3 }, - { "M2.SAM", 1, 0x00b21bce, 0x0001433c }, - { "MAN1.DOG", 1, 0x00b35f0a, 0x0000101e }, - { "MAN2.DOG", 1, 0x00b36f28, 0x000007a4 }, - { "MASK.SAM", 1, 0x00b376cc, 0x000081ea }, - { "N1.BBK", 1, 0x00b3f8b6, 0x00002d74 }, - { "N1.LUM", 1, 0x00b4262a, 0x00000018 }, - { "N1.MSK", 1, 0x00b42642, 0x00001f40 }, - { "N1.PCX", 1, 0x00b44582, 0x0000cbe7 }, - { "N10.BBK", 1, 0x00b51169, 0x00000002 }, - { "N10.PCX", 1, 0x00b5116b, 0x0000a28d }, - { "N10.SAM", 1, 0x00b5b3f8, 0x000147f8 }, - { "N11.BBK", 1, 0x00b6fbf0, 0x00000d48 }, - { "N11.PCX", 1, 0x00b70938, 0x00008e85 }, - { "N12.BBK", 1, 0x00b797bd, 0x000049aa }, - { "N12.LUM", 1, 0x00b7e167, 0x00000018 }, - { "N12.MSK", 1, 0x00b7e17f, 0x00001f40 }, - { "N12.PCX", 1, 0x00b800bf, 0x000074ea }, - { "N13.BBK", 1, 0x00b875a9, 0x000046b7 }, - { "N13.LUM", 1, 0x00b8bc60, 0x00000018 }, - { "N13.MSK", 1, 0x00b8bc78, 0x00001f40 }, - { "N13.PCX", 1, 0x00b8dbb8, 0x00008640 }, - { "N13.SAM", 1, 0x00b961f8, 0x00025a26 }, - { "N13B.SAM", 1, 0x00bbbc1e, 0x0000250a }, - { "N14.BBK", 1, 0x00bbe128, 0x000073ec }, - { "N14.PCX", 1, 0x00bc5514, 0x0000b3f3 }, - { "N14.SAM", 1, 0x00bd0907, 0x0002550a }, - { "N14B.PCX", 1, 0x00bf5e11, 0x0000b933 }, - { "N15.BBK", 1, 0x00c01744, 0x00000002 }, - { "N15.PCX", 1, 0x00c01746, 0x0000ae43 }, - { "N16.BBK", 1, 0x00c0c589, 0x000014c0 }, - { "N16.LUM", 1, 0x00c0da49, 0x00000018 }, - { "N16.MSK", 1, 0x00c0da61, 0x00001f40 }, - { "N16.PCX", 1, 0x00c0f9a1, 0x0000e038 }, - { "N2.BBK", 1, 0x00c1d9d9, 0x00007377 }, - { "N2.LUM", 1, 0x00c24d50, 0x00000018 }, - { "N2.MSK", 1, 0x00c24d68, 0x00001f40 }, - { "N2.PCX", 1, 0x00c26ca8, 0x00007d65 }, - { "N3.BBK", 1, 0x00c2ea0d, 0x00004fe2 }, - { "N3.LUM", 1, 0x00c339ef, 0x00000018 }, - { "N3.MSK", 1, 0x00c33a07, 0x00001f40 }, - { "N3.PCX", 1, 0x00c35947, 0x0000a6de }, - { "N4.BBK", 1, 0x00c40025, 0x0000acc0 }, - { "N4.LUM", 1, 0x00c4ace5, 0x00000018 }, - { "N4.MSK", 1, 0x00c4acfd, 0x00001f40 }, - { "N4.PCX", 1, 0x00c4cc3d, 0x00006e0b }, - { "N5.BBK", 1, 0x00c53a48, 0x0000202a }, - { "N5.LUM", 1, 0x00c55a72, 0x00000018 }, - { "N5.MSK", 1, 0x00c55a8a, 0x00001f40 }, - { "N5.PCX", 1, 0x00c579ca, 0x000092f0 }, - { "N6.BBK", 1, 0x00c60cba, 0x00001d97 }, - { "N6.LUM", 1, 0x00c62a51, 0x00000018 }, - { "N6.MSK", 1, 0x00c62a69, 0x00001f40 }, - { "N6.PCX", 1, 0x00c649a9, 0x000086e2 }, - { "N7.BBK", 1, 0x00c6d08b, 0x000025f8 }, - { "N7.LUM", 1, 0x00c6f683, 0x00000018 }, - { "N7.MSK", 1, 0x00c6f69b, 0x00001f40 }, - { "N7.PCX", 1, 0x00c715db, 0x00008e79 }, - { "N8.BBK", 1, 0x00c7a454, 0x00007bb7 }, - { "N8.LUM", 1, 0x00c8200b, 0x00000018 }, - { "N8.MSK", 1, 0x00c82023, 0x00001f40 }, - { "N8.PCX", 1, 0x00c83f63, 0x0000be5f }, - { "N9.BBK", 1, 0x00c8fdc2, 0x0000c9bf }, - { "N9.LUM", 1, 0x00c9c781, 0x00000018 }, - { "N9.MSK", 1, 0x00c9c799, 0x00001f40 }, - { "N9.PCX", 1, 0x00c9e6d9, 0x0000aa4b }, - { "N9.SAM", 1, 0x00ca9124, 0x0000e902 }, - { "NAOMI.DOG", 1, 0x00cb7a26, 0x000013b6 }, - { "NAOMI2.DOG", 1, 0x00cb8ddc, 0x00000a40 }, - { "OBJECTS.BBK", 1, 0x00cb981c, 0x00019322 }, - { "ORACLE.ACT", 1, 0x00cd2b3e, 0x00004042 }, - { "ORACLE1.DOG", 1, 0x00cd6b80, 0x00001088 }, - { "ORACLE2.DOG", 1, 0x00cd7c08, 0x000003c0 }, - { "ORACLE3.DOG", 1, 0x00cd7fc8, 0x00000806 }, - { "PANEL.PCX", 1, 0x00cd87ce, 0x00002279 }, - { "PRIN1.CUT", 1, 0x00cdaa47, 0x0000007a }, - { "PRIN1.DOG", 1, 0x00cdaac1, 0x00000aea }, - { "PRIN2.DOG", 1, 0x00cdb5ab, 0x0000055a }, - { "PRIN4.DOG", 1, 0x00cdbb05, 0x00000720 }, - { "PRINCESS.ACT", 1, 0x00cdc225, 0x0000d732 }, - { "PRISON.ACT", 1, 0x00ce9957, 0x00006f22 }, - { "PUNCH.SAM", 1, 0x00cf0879, 0x00007e9a }, - { "PUSH.SAM", 1, 0x00cf8713, 0x00009308 }, - { "PYGMY.ACT", 1, 0x00d01a1b, 0x00010a63 }, - { "QUEEN.JAS", 1, 0x00d1247e, 0x0001371a }, - { "QUEEN2.JAS", 1, 0x00d25b98, 0x00008c00 }, - { "R1.BBK", 1, 0x00d2e798, 0x00001a4a }, - { "R1.PCX", 1, 0x00d301e2, 0x000065c0 }, - { "R2.BBK", 1, 0x00d367a2, 0x00001a4a }, - { "R2.PCX", 1, 0x00d381ec, 0x00005f32 }, - { "R3.BBK", 1, 0x00d3e11e, 0x00001a4a }, - { "R3.PCX", 1, 0x00d3fb68, 0x000061a1 }, - { "R4.BBK", 1, 0x00d45d09, 0x00001a4a }, - { "R4.PCX", 1, 0x00d47753, 0x00009ec3 }, - { "RASH.SAM", 1, 0x00d51616, 0x0000431a }, - { "RENEGADE.BBK", 1, 0x00d55930, 0x0000117a }, - { "RENEGADE.PCX", 1, 0x00d56aaa, 0x0000296d }, - { "RITA.ACT", 1, 0x00d59417, 0x000020ea }, - { "RITA_H.ACT", 1, 0x00d5b501, 0x00015cdb }, - { "ROCKET.SAM", 1, 0x00d711dc, 0x00027e20 }, - { "SEC.ACT", 1, 0x00d98ffc, 0x00006e6a }, - { "SEC1.DOG", 1, 0x00d9fe66, 0x00001672 }, - { "SEC2.DOG", 1, 0x00da14d8, 0x00000944 }, - { "SHEET.SAM", 1, 0x00da1e1c, 0x0000ad00 }, - { "SHIELD.SAM", 1, 0x00dacb1c, 0x00002afb }, - { "SHOWER.ACT", 1, 0x00daf617, 0x0000762a }, - { "SHOWERAM.DOG", 1, 0x00db6c41, 0x000005fc }, - { "SKULL.ACT", 1, 0x00db723d, 0x00001973 }, - { "SPARKY.ACT", 1, 0x00db8bb0, 0x0000f912 }, - { "SPARKY1.DOG", 1, 0x00dc84c2, 0x00000986 }, - { "SPARKY2.DOG", 1, 0x00dc8e48, 0x00000402 }, - { "SPARKY3.DOG", 1, 0x00dc924a, 0x0000126e }, - { "SPARKY4.DOG", 1, 0x00dca4b8, 0x0000043a }, - { "SPARKY5.DOG", 1, 0x00dca8f2, 0x0000091c }, - { "SPARKY6.DOG", 1, 0x00dcb20e, 0x000007b6 }, - { "SPARKY7.DOG", 1, 0x00dcb9c4, 0x0000095e }, - { "SPARKY8.DOG", 1, 0x00dcc322, 0x0000072a }, - { "SPARKY_H.ACT", 1, 0x00dcca4c, 0x0000280a }, - { "T1.BBK", 1, 0x00dcf256, 0x0000f492 }, - { "T1.LUM", 1, 0x00dde6e8, 0x00000018 }, - { "T1.MSK", 1, 0x00dde700, 0x00001f40 }, - { "T1.PCX", 1, 0x00de0640, 0x0000aa3d }, - { "T1.SAM", 1, 0x00deb07d, 0x0000711a }, - { "T10.BBK", 1, 0x00df2197, 0x0000a957 }, - { "T10.LUM", 1, 0x00dfcaee, 0x00000018 }, - { "T10.MSK", 1, 0x00dfcb06, 0x00001f40 }, - { "T10.PCX", 1, 0x00dfea46, 0x0001198a }, - { "T10.SAM", 1, 0x00e103d0, 0x0000bc49 }, - { "T11.BBK", 1, 0x00e1c019, 0x00001e84 }, - { "T11.LUM", 1, 0x00e1de9d, 0x00000018 }, - { "T11.MSK", 1, 0x00e1deb5, 0x00001f40 }, - { "T11.PCX", 1, 0x00e1fdf5, 0x00008e7e }, - { "T12.BBK", 1, 0x00e28c73, 0x000059b5 }, - { "T12.LUM", 1, 0x00e2e628, 0x00000018 }, - { "T12.MSK", 1, 0x00e2e640, 0x00001f40 }, - { "T12.PCX", 1, 0x00e30580, 0x00007b3c }, - { "T12.SAM", 1, 0x00e380bc, 0x0000fe4b }, - { "T13.BBK", 1, 0x00e47f07, 0x000043b4 }, - { "T13.LUM", 1, 0x00e4c2bb, 0x00000018 }, - { "T13.MSK", 1, 0x00e4c2d3, 0x00001f40 }, - { "T13.PCX", 1, 0x00e4e213, 0x00007591 }, - { "T14.BBK", 1, 0x00e557a4, 0x0000468b }, - { "T14.LUM", 1, 0x00e59e2f, 0x00000018 }, - { "T14.MSK", 1, 0x00e59e47, 0x00001f40 }, - { "T14.PCX", 1, 0x00e5bd87, 0x00007df5 }, - { "T14.SAM", 1, 0x00e63b7c, 0x00016db3 }, - { "T15.BBK", 1, 0x00e7a92f, 0x000096e6 }, - { "T15.LUM", 1, 0x00e84015, 0x00000018 }, - { "T15.MSK", 1, 0x00e8402d, 0x00001f40 }, - { "T15.PCX", 1, 0x00e85f6d, 0x00008b28 }, - { "T15.SAM", 1, 0x00e8ea95, 0x0000a7d0 }, - { "T15B.SAM", 1, 0x00e99265, 0x000164d7 }, - { "T16.BBK", 1, 0x00eaf73c, 0x000027ff }, - { "T16.LUM", 1, 0x00eb1f3b, 0x00000018 }, - { "T16.MSK", 1, 0x00eb1f53, 0x00001f40 }, - { "T16.PCX", 1, 0x00eb3e93, 0x00009110 }, - { "T17.BBK", 1, 0x00ebcfa3, 0x000056df }, - { "T17.LUM", 1, 0x00ec2682, 0x00000018 }, - { "T17.MSK", 1, 0x00ec269a, 0x00001f40 }, - { "T17.PCX", 1, 0x00ec45da, 0x00007db6 }, - { "T18.BBK", 1, 0x00ecc390, 0x00006174 }, - { "T18.LUM", 1, 0x00ed2504, 0x00000018 }, - { "T18.MSK", 1, 0x00ed251c, 0x00001f40 }, - { "T18.PCX", 1, 0x00ed445c, 0x000087d6 }, - { "T19.BBK", 1, 0x00edcc32, 0x0000aec8 }, - { "T19.LUM", 1, 0x00ee7afa, 0x00000018 }, - { "T19.MSK", 1, 0x00ee7b12, 0x00001f40 }, - { "T19.PCX", 1, 0x00ee9a52, 0x0000768e }, - { "T19.SAM", 1, 0x00ef10e0, 0x000167ea }, - { "T1B.SAM", 1, 0x00f078ca, 0x0002fa9f }, - { "T2.BBK", 1, 0x00f37369, 0x00004dea }, - { "T2.LUM", 1, 0x00f3c153, 0x00000018 }, - { "T2.MSK", 1, 0x00f3c16b, 0x00001f40 }, - { "T2.PCX", 1, 0x00f3e0ab, 0x00011404 }, - { "T2.SAM", 1, 0x00f4f4af, 0x0000aa32 }, - { "T20.BBK", 1, 0x00f59ee1, 0x0000611c }, - { "T20.LUM", 1, 0x00f5fffd, 0x00000018 }, - { "T20.MSK", 1, 0x00f60015, 0x00001f40 }, - { "T20.PCX", 1, 0x00f61f55, 0x0000852a }, - { "T20.SAM", 1, 0x00f6a47f, 0x00007f9c }, - { "T20B.SAM", 1, 0x00f7241b, 0x0000a2bc }, - { "T21.BBK", 1, 0x00f7c6d7, 0x00000002 }, - { "T21.PCX", 1, 0x00f7c6d9, 0x0000b7b0 }, - { "T22.BBK", 1, 0x00f87e89, 0x00000002 }, - { "T22.PCX", 1, 0x00f87e8b, 0x0000a982 }, - { "T23.BBK", 1, 0x00f9280d, 0x00005bca }, - { "T23.LUM", 1, 0x00f983d7, 0x00000018 }, - { "T23.MSK", 1, 0x00f983ef, 0x00001f40 }, - { "T23.PCX", 1, 0x00f9a32f, 0x00008200 }, - { "T24.BBK", 1, 0x00fa252f, 0x0000aaf1 }, - { "T24.LUM", 1, 0x00fad020, 0x00000018 }, - { "T24.MSK", 1, 0x00fad038, 0x00001f40 }, - { "T24.PCX", 1, 0x00faef78, 0x00006f7e }, - { "T25.BBK", 1, 0x00fb5ef6, 0x0000a631 }, - { "T25.LUM", 1, 0x00fc0527, 0x00000018 }, - { "T25.MSK", 1, 0x00fc053f, 0x00001f40 }, - { "T25.PCX", 1, 0x00fc247f, 0x00008881 }, - { "T25.SAM", 1, 0x00fcad00, 0x000091ac }, - { "T26.BBK", 1, 0x00fd3eac, 0x00014578 }, - { "T26.LUM", 1, 0x00fe8424, 0x00000018 }, - { "T26.MSK", 1, 0x00fe843c, 0x00001f40 }, - { "T26.PCX", 1, 0x00fea37c, 0x00012570 }, - { "T26A.SAM", 1, 0x00ffc8ec, 0x000126a6 }, - { "T27.BBK", 1, 0x0100ef92, 0x0000a73e }, - { "T27.LUM", 1, 0x010196d0, 0x00000018 }, - { "T27.MSK", 1, 0x010196e8, 0x00001f40 }, - { "T27.PCX", 1, 0x0101b628, 0x000085fa }, - { "T28.BBK", 1, 0x01023c22, 0x00000002 }, - { "T28.PCX", 1, 0x01023c24, 0x000017d2 }, - { "T2B.SAM", 1, 0x010253f6, 0x00021df6 }, - { "T3.BBK", 1, 0x010471ec, 0x00004b24 }, - { "T3.LUM", 1, 0x0104bd10, 0x00000018 }, - { "T3.MSK", 1, 0x0104bd28, 0x00001f40 }, - { "T3.PCX", 1, 0x0104dc68, 0x0000724c }, - { "T3.SAM", 1, 0x01054eb4, 0x00006042 }, - { "T4.BBK", 1, 0x0105aef6, 0x00002dca }, - { "T4.MSK", 1, 0x0105dcc0, 0x00001f40 }, - { "T4.PCX", 1, 0x0105fc00, 0x00007566 }, - { "T5.BBK", 1, 0x01067166, 0x00001ac0 }, - { "T5.LUM", 1, 0x01068c26, 0x00000018 }, - { "T5.MSK", 1, 0x01068c3e, 0x00001f40 }, - { "T5.PCX", 1, 0x0106ab7e, 0x00009509 }, - { "T5.SAM", 1, 0x01074087, 0x000049aa }, - { "T5B.SAM", 1, 0x01078a31, 0x00022018 }, - { "T5C.SAM", 1, 0x0109aa49, 0x00011612 }, - { "T6.BBK", 1, 0x010ac05b, 0x00007db0 }, - { "T6.LUM", 1, 0x010b3e0b, 0x00000018 }, - { "T6.MSK", 1, 0x010b3e23, 0x00001f40 }, - { "T6.PCX", 1, 0x010b5d63, 0x000096b4 }, - { "T6.SAM", 1, 0x010bf417, 0x0000f04d }, - { "T6A.SAM", 1, 0x010ce464, 0x000199ee }, - { "T6B.PCX", 1, 0x010e7e52, 0x0000ad10 }, - { "T6B.SAM", 1, 0x010f2b62, 0x00010cba }, - { "T6C.SAM", 1, 0x0110381c, 0x00015041 }, - { "T7.BBK", 1, 0x0111885d, 0x0000c781 }, - { "T7.PCX", 1, 0x01124fde, 0x00006da0 }, - { "T7.SAM", 1, 0x0112bd7e, 0x000172ea }, - { "T8.BBK", 1, 0x01143068, 0x00002762 }, - { "T8.LUM", 1, 0x011457ca, 0x00000018 }, - { "T8.MSK", 1, 0x011457e2, 0x00001f40 }, - { "T8.PCX", 1, 0x01147722, 0x0000831b }, - { "T8.SAM", 1, 0x0114fa3d, 0x00012c01 }, - { "T9.BBK", 1, 0x0116263e, 0x000029f3 }, - { "T9.LUM", 1, 0x01165031, 0x00000018 }, - { "T9.MSK", 1, 0x01165049, 0x00001f40 }, - { "T9.PCX", 1, 0x01166f89, 0x0000735b }, - { "T9.SAM", 1, 0x0116e2e4, 0x0000d9e6 }, - { "TABLET.BBK", 1, 0x0117bcca, 0x00013902 }, - { "TABLET.PCX", 1, 0x0118f5cc, 0x0000af16 }, - { "TALLPYG.DOG", 1, 0x0119a4e2, 0x0000034a }, - { "TAM1.DOG", 1, 0x0119a82c, 0x00001e8a }, - { "TAM2.DOG", 1, 0x0119c6b6, 0x0000076c }, - { "TAM3.DOG", 1, 0x0119ce22, 0x000007c2 }, - { "TAM4.DOG", 1, 0x0119d5e4, 0x0000083c }, - { "TEMPLE.ACT", 1, 0x0119de20, 0x00005052 }, - { "TMPD.ACT", 1, 0x011a2e72, 0x0000b00c }, - { "TRADER.ACT", 1, 0x011ade7e, 0x0001424a }, - { "V1.BBK", 1, 0x011c20c8, 0x00006724 }, - { "V1.PCX", 1, 0x011c87ec, 0x000091ea }, - { "V1.SAM", 1, 0x011d19d6, 0x000061e5 }, - { "V10.BBK", 1, 0x011d7bbb, 0x000094e8 }, - { "V10.PCX", 1, 0x011e10a3, 0x0000946c }, - { "V11.BBK", 1, 0x011ea50f, 0x0000e122 }, - { "V11.PCX", 1, 0x011f8631, 0x0000946c }, - { "V2.BBK", 1, 0x01201a9d, 0x00007dfb }, - { "V2.LUM", 1, 0x01209898, 0x00000018 }, - { "V2.MSK", 1, 0x012098b0, 0x00001f40 }, - { "V2.PCX", 1, 0x0120b7f0, 0x0000876c }, - { "V3.BBK", 1, 0x01213f5c, 0x0000d716 }, - { "V3.LUM", 1, 0x01221672, 0x00000018 }, - { "V3.MSK", 1, 0x0122168a, 0x00001f40 }, - { "V3.PCX", 1, 0x012235ca, 0x00005efa }, - { "V4.BBK", 1, 0x012294c4, 0x0000571a }, - { "V4.PCX", 1, 0x0122ebde, 0x00010cd4 }, - { "V5.BBK", 1, 0x0123f8b2, 0x0001c43f }, - { "V5.MSK", 1, 0x0125bcf1, 0x00001f40 }, - { "V5.PCX", 1, 0x0125dc31, 0x00009148 }, - { "V5.SAM", 1, 0x01266d79, 0x0003953d }, - { "V5B.SAM", 1, 0x012a02b6, 0x0000ce6f }, - { "V5C.SAM", 1, 0x012ad125, 0x0000f142 }, - { "V5D.SAM", 1, 0x012bc267, 0x00000f50 }, - { "V5E.SAM", 1, 0x012bd1b7, 0x00009352 }, - { "V5X.SAM", 1, 0x012c6509, 0x0001d7c2 }, - { "V6.BBK", 1, 0x012e3ccb, 0x0000d716 }, - { "V6.LUM", 1, 0x012f13e1, 0x00000018 }, - { "V6.MSK", 1, 0x012f13f9, 0x00001f40 }, - { "V6.PCX", 1, 0x012f3339, 0x000074ce }, - { "V7.BBK", 1, 0x012fa807, 0x000177cd }, - { "V7.PCX", 1, 0x01311fd4, 0x0000a3b4 }, - { "V8.BBK", 1, 0x0131c388, 0x00006724 }, - { "V8.PCX", 1, 0x01322aac, 0x0000a8d0 }, - { "VACUUM.SAM", 1, 0x0132d37c, 0x00009516 }, - { "WATER.ACT", 1, 0x01336892, 0x00001c02 }, - { "WEDGE.ACT", 1, 0x01338494, 0x0000390e }, - { "WEDGE.DOG", 1, 0x0133bda2, 0x000002c4 }, - { "WEENIE.SAM", 1, 0x0133c066, 0x0000b4d2 }, - { "WITCH1.DOG", 1, 0x01347538, 0x000012e4 }, - { "WITCH2.DOG", 1, 0x0134881c, 0x0000088e }, - { "WITCH3.DOG", 1, 0x013490aa, 0x00000df8 }, - { "WITCH4.DOG", 1, 0x01349ea2, 0x000002b2 }, - { "X1.BBK", 1, 0x0134a154, 0x00010e5d }, - { "X1.PCX", 1, 0x0135afb1, 0x0000cc4b }, - { "X10.BBK", 1, 0x01367bfc, 0x00009907 }, - { "X10.PCX", 1, 0x01371503, 0x0000a1b3 }, - { "X10_JOE.ACT", 1, 0x0137b6b6, 0x0000943a }, - { "X10_RITA.ACT", 1, 0x01384af0, 0x000076d9 }, - { "X11.BBK", 1, 0x0138c1c9, 0x00016966 }, - { "X11.PCX", 1, 0x013a2b2f, 0x0000c160 }, - { "X11_JOE.ACT", 1, 0x013aec8f, 0x0000872e }, - { "X11_RITA.ACT", 1, 0x013b73bd, 0x0000a6f2 }, - { "X2.BBK", 1, 0x013c1aaf, 0x0000df2b }, - { "X2.PCX", 1, 0x013cf9da, 0x00013ed5 }, - { "X2_JOE.ACT", 1, 0x013e38af, 0x00008042 }, - { "X2_RITA.ACT", 1, 0x013eb8f1, 0x0000df02 }, - { "X3.BBK", 1, 0x013f97f3, 0x00000002 }, - { "X3.PCX", 1, 0x013f97f5, 0x0000d165 }, - { "X3_RITA.ACT", 1, 0x0140695a, 0x0000a0fa }, - { "X4.BBK", 1, 0x01410a54, 0x00004b53 }, - { "X4.PCX", 1, 0x014155a7, 0x0000b51b }, - { "X4A.SAM", 1, 0x01420ac2, 0x0001b456 }, - { "X4B.SAM", 1, 0x0143bf18, 0x0002a1b4 }, - { "X4_JOE.ACT", 1, 0x014660cc, 0x000088a5 }, - { "X4_RITA.ACT", 1, 0x0146e971, 0x0000398a }, - { "X5.BBK", 1, 0x014722fb, 0x000075a0 }, - { "X5.PCX", 1, 0x0147989b, 0x0000adeb }, - { "X5_SPARK.ACT", 1, 0x01484686, 0x00006e5a }, - { "X6.BBK", 1, 0x0148b4e0, 0x0001889e }, - { "X6.PCX", 1, 0x014a3d7e, 0x0000be75 }, - { "X6_HUGH.ACT", 1, 0x014afbf3, 0x0000c25a }, - { "X7.BBK", 1, 0x014bbe4d, 0x00002ada }, - { "X7.PCX", 1, 0x014be927, 0x00009456 }, - { "X7A.SAM", 1, 0x014c7d7d, 0x0001b7cb }, - { "X7B.SAM", 1, 0x014e3548, 0x0003b107 }, - { "X8.BBK", 1, 0x0151e64f, 0x00032a14 }, - { "X8.PCX", 1, 0x01551063, 0x00013d4f }, - { "X9.BBK", 1, 0x01564db2, 0x00028337 }, - { "X9.PCX", 1, 0x0158d0e9, 0x0000a31c }, - { "ZOMBIE.ACT", 1, 0x01597405, 0x000078ea }, - { "ZOMBIE1.DOG", 1, 0x0159ecef, 0x00000f6a }, - { "ZOMBIE2.DOG", 1, 0x0159fc59, 0x00000c40 } -}; - - writeRecord(_resourceTablePEM10, sizeof(_resourceTablePEM10), GBVARS_RESOURCETABLEPM10_INDEX , GBVARS_QUEEN); -} - -void Queen_addRestables() { - addRestables_resourceTablePEM10(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/queen/bq_talk.c b/backends/PalmOS/Src/builder/queen/bq_talk.c deleted file mode 100644 index 4798a3bbe0..0000000000 --- a/backends/PalmOS/Src/builder/queen/bq_talk.c +++ /dev/null @@ -1,518 +0,0 @@ -#include -#include "b_globals.h" - -typedef struct { - const char name[11]; // Nstr - signed char state,faceDirection; // S,F - signed char body,bf,rf,af; - const char animation[80]; // SANIMstr - signed char ff; -} SpeechParameters; - -UInt8 *ptr; - -static UInt32 resize(void *p, UInt32 more) { - UInt32 old = MemPtrSize(p); - UInt8 *np = MemPtrNew(old + more); - MemMove(np, ptr, old); - MemPtrFree(ptr); - ptr = np; - - return old; -} - -#define DO_AddFunc(XX) \ - static UInt32 addTalk_speechParameters_part##XX() { \ - SpeechParameters _speechParameters_part[] = { - -#define DO_EndFunc \ - }; \ - UInt32 size = sizeof(_speechParameters_part); \ - UInt32 old = resize(ptr, size); \ - MemMove(ptr + old, _speechParameters_part, size); \ - return MemPtrSize(ptr); \ - } - -DO_AddFunc(1) - { "JOE",0,1,1,10,2,3,"",0}, - { "JOE",0,3,3,28,2,3,"",0}, - { "JOE",0,4,5,38,1,0,"",0}, - - { "JOE",1,1,1,45,-1,0,"",0}, - { "JOE",1,3,3,28,2,3,"",0}, - { "JOE",1,4,5,38,1,0,"",0}, - - { "JOE",2,1,1,46,-1,0,"",0}, - { "JOE",2,3,3,28,2,3,"",0}, - { "JOE",2,4,5,38,1,0,"",0}, - - { "JOE",3,1,1,47,-1,0,"",0}, - { "JOE",3,3,3,28,2,3,"",0}, - { "JOE",3,4,5,38,1,0,"",0}, - - { "JOE",4,1,1,50,-1,0,"",0}, - { "JOE",4,3,3,28,2,3,"",0}, - { "JOE",4,4,5,38,1,0,"",0}, - - { "JOE",5,1,2,0,0,0,"",0}, - { "JOE",5,3,4,0,0,0,"",0}, - { "JOE",5,4,6,0,0,0,"",0}, - - { "JOE",6,1,1,48,0,1,"",0}, - { "JOE",6,3,3,28,2,3,"",0}, - { "JOE",6,4,5,38,1,0,"",0}, - - { "JOE",7,1,1,51,0,1,"",0}, - { "JOE",7,3,3,28,2,3,"",0}, - { "JOE",7,4,5,38,1,0,"",0}, - - { "JOE",8,1,1,26,0,0,"",0}, - { "JOE",8,3,3,28,2,3,"",0}, - { "JOE",8,4,5,38,1,0,"",0}, - - { "JOE",9,1,1,29,0,0,"",0}, - { "JOE",9,3,3,28,0,0,"",0}, - { "JOE",9,4,5,38,0,0,"",0}, - - { "JOE",10,1,1,12,0,0,"T046,010,010,010,012,012,012,012,012,012,012,012,012,012,012,012,012,012,010,000",0}, - { "JOE",10,3,3,18,0,0,"",0}, - { "JOE",10,4,5,44,0,0,"",0}, - - { "JOE",11,1,1,53,-1,0,"",0}, - { "JOE",11,3,3,28,2,3,"",0}, - { "JOE",11,4,5,38,1,0,"",0}, - - { "JOE",12,1,1,10,2,3,"",0}, - { "JOE",12,3,3,28,2,0,"",0}, - { "JOE",12,4,5,38,1,0,"",0}, - - { "JOE",13,1,1,10,2,3,"T012,013,019,019,019,019,019,019,019,019,019,019,013,010,000",0}, - { "JOE",13,3,3,28,2,3,"",0}, - { "JOE",13,4,5,38,1,0,"",0}, - - { "JOE",14,1,1,16,2,3,"",16}, - { "JOE",14,3,3,28,2,3,"",0}, - { "JOE",14,4,5,38,1,0,"",0}, - - { "JOE",15,1,1,58,-1,0,"",0}, - { "JOE",15,3,3,28,2,3,"",0}, - { "JOE",15,4,5,38,1,0,"",0}, - - { "JOE",16,1,1,59,-1,0,"",0}, - { "JOE",16,3,3,28,2,3,"",0}, - { "JOE",16,4,5,38,1,0,"",0}, - - { "JOE",17,1,1,56,-1,0,"",0}, - { "JOE",17,3,3,28,2,3,"",0}, - { "JOE",17,4,5,38,1,0,"",0}, - - { "JOE",18,1,56,16,2,3,"T056,057,057,057,056,056,000",0}, - { "JOE",18,3,3,28,2,3,"",0}, - { "JOE",18,4,5,38,1,0,"",0}, - - { "JOE",19,1,54,16,2,3,"T054,055,057,056,000",0}, - { "JOE",19,3,3,28,2,3,"",0}, - { "JOE",19,4,5,38,1,0,"",0}, - - { "JOE",20,1,56,16,2,3,"T056,057,055,054,001,000",0}, - { "JOE",20,3,3,28,2,3,"",0}, - { "JOE",20,4,5,38,1,0,"",0}, - { "JOE",21,1,1,60,-1,0,"",0}, - { "JOE",21,3,3,28,2,3,"",0}, - { "JOE",21,4,61,38,1,0,"",0}, - - { "JOE",22,1,1,16,2,3,"T063,060,000",0}, - { "JOE",22,3,3,28,2,3,"",0}, - { "JOE",22,4,5,38,1,0,"",0}, - - { "JOE",23,1,1,16,2,3,"T060,063,001,000",0}, - { "JOE",23,3,3,28,2,3,"",0}, - { "JOE",23,4,5,38,1,0,"",0}, - - { "JOE",24,1,1,47,-2,0,"",0}, - { "JOE",24,3,3,28,2,3,"",0}, - { "JOE",24,4,5,38,1,0,"",0}, - - { "RICO",0,0,1,7,1,3,"",7}, - { "RICO",1,0,1,5,-1,0,"",7}, - { "RICO",2,0,1,9,0,3,"",7}, - { "RICO",3,0,1,4,-1,0,"",7}, - - { "EDDY",0,0,14,18,1,3,"",18}, - { "EDDY",1,0,14,0,0,0,"T016,017,017,016,016,017,017,016,016,017,017,000",18}, - - { "MIKE",0,0,1,2,2,3,"",2}, - - { "LOLA",0,0,30,33,2,3,"",33}, - { "LOLA",1,0,9,10,2,3,"",33}, - { "LOLA",2,0,30,33,2,3,"",33}, - { "LOLA",3,0,32,33,2,3,"",33}, - { "LOLA",4,0,8,0,0,0,"",33}, - { "LOLA",5,0,31,0,0,0,"",0}, - { "LOLA",6,0,31,0,0,0,"047,048,049,050,000",33}, -DO_EndFunc -DO_AddFunc(2) - { "LOLA_SHOWER",0,0,7,10,2,3,"",10}, - { "LOLA_SHOWER",1,0,9,10,2,3,"",10}, - { "LOLA_SHOWER",2,0,30,33,2,3,"",10}, - { "LOLA_SHOWER",3,0,32,33,2,3,"",10}, - { "LOLA_SHOWER",4,0,8,0,0,0,"",0}, - { "LOLA_SHOWER",5,0,61,0,0,0,"",0}, - { "LOLA_SHOWER",6,0,64,10,2,3,"",0}, - { "LOLA_SHOWER",7,0,31,0,0,0,"062,063,064,000",0}, - - { "SECRETARY",0,0,1,12,2,3,"",12}, - { "SECRETARY",1,0,1,12,2,0,"",12}, - { "SECRETARY",2,0,1,12,2,0,"",12}, - - { "SPARKY",0,0,21,23,2,3,"",23}, - { "SPARKY",1,0,21,22,0,0,"",0}, - { "SPARKY",2,0,21,22,0,0,"021,042,043,000",0}, - { "SPARKY",3,0,21,22,0,0,"043,042,021,000",0}, - { "SPARKY",4,0,43,43,1,0,"",0}, - { "SPARKY",14,0,21,29,5,0,"",29}, - - { "SPARKY-F",0,0,45,23,5,0,"",23}, - { "SPARKY-F",1,0,45,47,0,0,"",0}, - { "SPARKY-F",2,0,45,23,5,0,"045,046,046,045,000",23}, - { "SPARKY-F",14,0,45,29,5,0,"",29}, - - { "FAYE",0,0,19,35,2,3,"",35}, - { "FAYE",1,0,19,41,2,3,"",35}, - { "FAYE",2,0,19,28,-1,0,"",35}, - { "FAYE",3,0,19,20,0,0,"",0}, - { "FAYE",4,0,19,27,-1,0,"",35}, - { "FAYE",5,0,19,29,-1,0,"",35}, - { "FAYE",6,0,59,35,2,3,"",35}, - { "FAYE",7,0,19,30,-1,0,"",35}, - { "FAYE",8,0,19,31,-1,0,"",35}, - - { "BOB",0,0,27,34,2,3,"",34}, - { "BOB",1,0,27,28,-1,0,"",34}, - { "BOB",2,0,30,0,0,0,"",0}, - { "BOB",3,0,31,0,0,0,"",0}, - { "BOB",4,0,27,61,-1,0,"",34}, - { "BOB",5,0,27,42,1,0,"",42}, - - { "PYGMY",0,0,20,21,2,6,"",0}, - { "PYGMY",1,0,20,21,2,6,"020,068,068,068,068,068,068,068,068,020,000",0}, - { "PYGMY",2,0,20,21,2,6,"T028,029,030,031,031,031,031,030,029,028,035,000",0}, - { "PYGMY",3,0,20,21,2,6,"T035,036,037,038,037,038,037,038,036,035,000",0}, - { "PYGMY",4,0,20,21,2,6,"T032,033,032,033,032,033,035,000",0}, - { "PYGMY",5,0,20,21,2,6,"T023,022,021,022,023,024,025,026,027,026,025,024,023,000",0}, - { "PYGMY",6,0,20,21,2,6,"T034,034,034,035,000",0}, - - { "WITCH",0,0,39,40,2,6,"",40}, - { "WITCH",1,0,39,40,2,6,"073,074,000",40}, - { "WITCH",2,0,39,40,2,6,"074,073,000",40}, - { "WITCH",3,0,39,40,2,6,"T047,048,049,050,051,000",40}, - { "WITCH",4,0,39,40,2,6,"T052,053,054,055,056,057,058,057,056,056,056,055,054,053,052,000",40}, - { "WITCH",5,0,39,40,2,6,"069,070,071,072,073,074,000",40}, - { "WITCH",6,0,39,40,2,6,"074,073,072,071,070,069,070,000",40}, - { "WITCH",7,0,39,51,-1,0,"",40}, - { "WITCH",8,0,39,40,2,6,"T051,050,049,048,047,000",40}, - - { "CHIEF",0,0,1,7,1,7,"",3}, - { "CHIEF",1,0,1,2,2,6,"062,063,064,065,066,000",0}, - { "CHIEF",2,0,1,2,2,6,"066,065,064,063,062,000",0}, - { "CHIEF",3,0,1,17,-1,0,"",3}, - { "CHIEF",4,0,1,18,-1,0,"",3}, - { "CHIEF",5,0,1,19,-1,0,"",3}, - - { "NAOMI",0,0,1,2,2,3,"",2}, - { "NAOMI",1,0,1,2,2,6,"048,049,050,051,052,053,054,055,000",0}, - { "NAOMI",2,0,1,2,2,6,"055,054,053,052,051,050,049,048,000",0}, - { "NAOMI",3,0,1,13,-1,0,"",2}, - { "NAOMI",4,0,1,14,-1,0,"",2}, - { "NAOMI",5,0,1,10,-1,0,"",2}, - { "NAOMI",6,0,1,12,-1,0,"",2}, - { "NAOMI",7,0,1,12,-1,0,"T008,008,008,002,000",2}, - - { "WEDGEWOOD",0,0,8,1,2,0,"",8}, - { "WEDGEWOOD",1,0,1,1,3,0,"",1}, - - { "BUD",0,0,1,2,3,2,"",2}, - { "BUD",1,0,1,2,4,2,"T017,018,000",2}, - { "BUD",2,0,1,21,-1,0,"",2}, - { "BUD",3,0,1,14,-1,0,"",2}, - { "BUD",4,0,1,15,-1,0,"",2}, - { "BUD",5,0,1,20,-1,0,"",2}, - { "BUD",6,0,1,16,-1,0,"",2}, - { "BUD",7,0,1,19,-1,0,"",2}, - { "BUD",8,0,1,17,-1,0,"",2}, - { "BUD",9,0,1,14,-1,0,"T014,008,008,003,003,008,008,003,003,010,010,012,012,000",2}, - - { "LOU",0,0,1,2,2,3,"",2}, - { "LOU",1,0,1,2,4,2,"013,014,015,016,017,018,000",2}, - { "LOU",2,0,1,2,4,2,"018,017,016,015,014,013,000",2}, - - { "JIMMY",0,0,16,17,2,3,"",17}, - { "JIMMY",1,0,16,25,-1,0,"",17}, - { "JIMMY",2,0,16,26,-1,0,"",17}, - { "JIMMY",3,0,16,27,-1,0,"",17}, - { "JIMMY",4,0,16,28,-1,0,"",17}, - { "JIMMY",5,0,16,29,-1,0,"",17}, - - { "TAMMY",0,0,1,2,2,3,"",2}, - { "TAMMY",1,0,1,2,2,3,"T008,008,009,009,008,008,009,009,008,008,009,009,002,000",2}, - { "TAMMY",2,0,1,2,2,3,"T002,010,010,010,002,000",2}, - { "TAMMY",3,0,1,2,2,3,"T011,011,011,011,011,002,000",2}, - { "TAMMY",4,0,1,2,2,3,"T013,014,015,013,014,015,013,009,001,000",2}, - - { "SKULL",0,0,9,9,4,0,"",0}, - { "SKULL",1,0,1,9,4,0,"001,002,003,004,005,006,007,008,009,000",0}, - { "SKULL",2,0,1,9,4,0,"009,008,007,006,005,004,003,002,001,000",0}, -DO_EndFunc -DO_AddFunc(3) - { "APE",0,0,1,6,7,0,"",6}, - { "APE",1,0,1,6,7,0,"002,001,000",6}, - { "APE",2,0,1,6,7,0,"002,003,001,000",6}, - { "APE",3,0,1,6,7,0,"004,005,004,005,004,001,000",6}, - { "APE",4,0,1,6,7,0,"001,003,005,004,005,004,001,000",6}, - - { "APE1",0,0,15,16,7,0,"",16}, - { "APE2",0,0,14,6,7,0,"",6}, - - { "SHOWERAM",0,0,1,2,3,0,"",2}, - { "SHOWERAM",1,0,1,2,3,0,"026,027,028,029,001,000",2}, - { "SHOWERAM",2,0,1,2,3,0,"001,029,028,027,026,000",2}, - - { "PRINCESS1",0,0,19,23,2,3,"",23}, - { "PRINCESS1",1,0,19,41,-1,0,"",23}, - { "PRINCESS1",2,0,19,42,-1,0,"",23}, - { "PRINCESS1",3,0,19,45,-1,0,"",23}, - { "PRINCESS1",4,0,19,40,-1,0,"",23}, - { "PRINCESS1",5,0,19,45,2,3,"T40,043,044,045,000",45}, - { "PRINCESS1",6,0,19,45,-1,0,"T041,038,000",38}, - { "PRINCESS1",7,0,22,0,0,0,"",0}, - { "PRINCESS1",8,0,19,45,2,3,"T045,044,043,040,039,000",39}, - - { "PRINCESS2",0,0,46,23,2,3,"",23}, - { "PRINCESS2",1,0,46,29,2,3,"",29}, - { "PRINCESS2",2,0,46,29,2,3,"T029,036,035,000",35}, - - { "GUARDS",0,0,7,7,0,0,"",7}, - - { "AMGUARD",0,0,19,22,2,3,"",22}, - - { "MAN1",0,0,2,3,2,3,"",3}, - { "MAN2",0,0,9,10,1,2,"",10}, - - { "DOG",0,0,6,6,1,0,"",0}, - { "DOG",1,0,6,6,1,0,"010,009,008,000",0}, - { "DOG",2,0,6,6,1,0,"008,009,010,000",0}, - - { "CHEF",0,0,5,6,2,3,"",6}, - - { "HENRY",0,0,7,9,2,3,"",9}, - { "HENRY",1,0,7,21,-1,0,"",9}, - { "HENRY",2,0,7,19,-1,0,"",9}, - { "HENRY",3,0,7,20,-1,0,"",9}, - { "HENRY",4,0,8,9,2,3,"",9}, - { "HENRY",5,0,23,9,-1,0,"",9}, - { "HENRY",6,0,7,9,2,3,"T019,015,017,017,017,017,017,017,017,015,009,000",9}, - { "HENRY",7,0,7,9,2,3,"T018,010,000",10}, - { "HENRY",8,0,7,9,2,3,"T018,016,000",16}, - { "HENRY",9,0,7,9,2,3,"T018,011,000",11}, - { "HENRY",10,0,29,33,1,1,"",33}, - { "HENRY",11,0,7,30,2,0,"",9}, - { "HENRY",12,0,7,9,2,3,"025,026,000",26}, - { "HENRY",13,0,7,9,2,3,"027,028,027,028,000",28}, - { "HENRY",14,0,7,9,2,3,"026,025,007,000",9}, - - { "JOHAN",0,0,1,15,2,3,"",15}, - { "JOHAN",1,0,1,0,0,0,"T006,007,008,000",15}, - { "JOHAN",2,0,1,15,2,3,"T002,003,004,005,004,005,004,005,004,005,004,005,004,003,002,000",15}, - { "JOHAN",3,0,1,8,-1,0,"",15}, - { "JOHAN",4,0,1,0,0,0,"T008,007,006,001,000",15}, - - { "KLUNK",0,0,1,2,2,3,"",2}, - { "KLUNK",1,0,1,2,2,3,"019,020,021,022,001,000",2}, - { "KLUNK",2,0,1,2,2,3,"001,022,021,020,019,016,517,000",2}, - { "KLUNK",3,0,1,2,2,3,"T010,011,010,011,010,011,009,000",2}, - - { "FRANK",0,0,13,14,2,3,"",14}, - { "FRANK",1,0,13,20,0,1,"",14}, - { "FRANK",2,0,13,14,2,3,"025,026,027,027,027,026,026,026,027,027,026,026,027,025,013,000",14}, - { "FRANK",3,0,28,14,2,3,"",14}, - - { "DEATH",0,0,1,2,2,3,"",2}, - { "DEATH",1,0,1,2,2,3,"013,014,015,016,017,001,000",0}, - { "DEATH",2,0,1,2,2,3,"001,017,016,015,014,013,000",0}, - { "DEATH",3,0,1,2,2,3,"T018,019,020,021,021,022,022,020,021,022,020,021,022,023,024,524,000",2}, - { "DEATH",4,0,1,2,2,3,"T025,026,027,028,028,028,028,028,028,028,028,028,029,035,000",2}, - { "DEATH",5,0,1,2,2,3,"T030,031,032,033,033,033,033,033,033,033,033,033,034,035,000",2}, - { "DEATH",6,0,1,2,2,3,"T023,022,020,019,018,001,000",2}, - - { "JASPAR",0,0,1,1,22,0,"026,027,028,029,028,029,028,029,030,023,000",0}, - { "JASPAR",1,0,1,1,22,0,"023,026,000",0}, - - { "ORACLE",0,0,1,5,3,0,"",0}, - - { "ZOMBIE",0,0,1,5,2,3,"",5}, - { "ZOMBIE",1,0,1,12,-1,0,"",5}, - { "ZOMBIE",2,0,1,13,-1,0,"",5}, - { "ZOMBIE",3,0,1,1,5,5,"",5}, - - { "ZOMBIE2",0,0,14,14,0,0,"",0}, - { "ZOMBIE3",0,0,18,18,0,0,"",0}, - - { "ANDERSON",0,0,7,8,2,3,"",8}, - { "ANDERSON",1,0,7,8,1,0,"",8}, - { "ANDERSON",2,0,7,16,-1,0,"",8}, - { "ANDERSON",3,0,7,18,-1,0,"",8}, - { "ANDERSON",4,0,7,19,-1,0,"",8}, - { "ANDERSON",5,0,7,20,-1,0,"",8}, - { "ANDERSON",6,0,7,21,1,0,"",8}, - - { "COMPY",0,0,12,12,-1,0,"",0}, - { "COMPY",1,0,10,10,10,0,"010,011,012,012,013,014,014,000",0}, - { "COMPY",2,0,10,10,10,0,"014,013,012,000",0}, - - { "DEINO",0,0,13,13,-1,0,"",0}, - { "DEINO",1,0,9,9,9,0,"009,010,000",0}, - - { "TMPD",0,0,19,22,2,3,"",22}, - - { "IAN",0,0,7,9,2,3,"",9}, - { "IAN",1,0,8,25,3,0,"",25}, - { "IAN",2,0,7,21,-1,0,"",9}, - { "IAN",3,0,7,22,1,0,"",9}, - { "IAN",4,0,7,22,-1,0,"",9}, - { "IAN",5,0,7,24,-1,0,"",9}, - { "IAN",6,0,7,9,2,3,"034,034,034,035,035,036,036,035,035,036,035,036,035,000",9}, - { "IAN",7,0,7,31,-1,0,"",9}, -DO_EndFunc -DO_AddFunc(4) - { "FAYE-H",0,0,1,1,4,1,"",1}, - { "FAYE-H",1,0,1,1,4,1,"007,000",7}, - { "FAYE-H",2,0,1,1,4,1,"009,010,011,009,001,000",1}, - { "FAYE-H",3,0,1,1,4,1,"E012,013,000",1}, - { "FAYE-H",4,0,1,1,4,1,"E015,000",1}, - { "FAYE-H",5,0,1,1,4,1,"E014,000",1}, - - { "AZURA-H",0,0,1,1,4,1,"",1}, - { "AZURA-H",1,0,1,1,4,1,"007,000",7}, - { "AZURA-H",2,0,1,1,4,1,"009,010,011,009,001,000",1}, - { "AZURA-H",3,0,1,1,4,1,"E012,013,000",1}, - { "AZURA-H",4,0,1,1,4,1,"E015,000",1}, - { "AZURA-H",5,0,1,1,4,1,"E014,000",1}, - - { "FRANK-H",0,0,1,1,4,1,"",1}, - { "FRANK-H",1,0,1,1,4,1,"E009,000",1}, - { "FRANK-H",2,0,1,1,4,1,"E007,000",1}, - { "FRANK-H",3,0,1,1,4,1,"010,011,012,013,014,015,010,000",1}, - - { "JOE-E",0,0,1,2,4,1,"",2}, - { "JOE-E",6,0,1,2,4,1,"008,009,008,002,000",2}, - - { "AZURA-E",0,0,1,1,5,1,"",1}, - { "AZURA-E",1,0,1,1,5,1,"009,010,009,008,000",1}, - - { "FAYE-E",0,0,1,4,4,1,"",1}, - { "FAYE-E",1,0,1,4,4,1,"002,003,002,001,000",1}, - - { "ANDSON-E",0,0,1,3,4,1,"",1}, - { "ANDSON-E",1,0,1,3,4,1,"002,001,000",1}, - - { "JOE-H",0,0,1,1,4,4,"",1}, - { "JOE-H",1,0,1,1,2,3,"012,013,014,000",14}, - { "JOE-H",2,0,1,1,2,3,"010,011,000",11}, - { "JOE-H",3,0,1,1,2,3,"014,013,012,001,000",1}, - { "JOE-H",4,0,1,13,1,0,"",13}, - - { "RITA-H",0,0,7,1,2,3,"",1}, - { "RITA-H",1,0,7,0,0,0,"009,010,011,012,013,000",13}, - { "RITA-H",2,0,7,0,0,0,"014,015,016,000",16}, - { "RITA-H",3,0,7,0,0,0,"013,012,011,010,000",10}, - { "RITA-H",4,0,7,0,0,0,"009,007,008,007,009,000",9}, - { "RITA-H",5,0,7,0,0,0,"016,015,014,000",14}, - - { "RITA",0,0,1,4,2,3,"",4}, - { "RITA",1,0,2,4,2,3,"",4}, - - { "SPARKY-H",0,0,1,1,2,3,"",1}, - - { "HUGH",0,0,1,1,2,3,"",1}, - { "HUGH",1,0,7,7,2,3,"",7}, - - { "X2_JOE",0,0,1,1,2,3,"",1}, - { "X2_JOE",1,0,1,1,2,3,"001,007,008,008,007,001,000",1}, - - { "X2_RITA",0,0,1,1,2,3,"",1}, - { "X2_RITA",1,0,1,1,2,3,"001,007,008,008,007,001,000",1}, - - { "X3_RITA",0,0,1,1,4,1,"",1}, - { "X3_RITA",1,0,1,1,4,1,"007,000",7}, - { "X3_RITA",2,0,1,1,4,1,"009,010,011,009,001,000",1}, - { "X3_RITA",3,0,1,1,4,1,"E012,013,000",1}, - { "X3_RITA",4,0,1,1,4,1,"E015,000",1}, - { "X3_RITA",5,0,1,1,4,1,"E014,000",1}, - - { "X4_JOE",0,0,1,1,3,4,"",1}, - { "X4_JOE",1,0,1,13,2,3,"",13}, - { "X4_JOE",2,0,1,1,3,4,"009,010,011,012,013,000",13}, - { "X4_JOE",3,0,1,1,3,4,"012,011,010,009,000",9}, - { "X4_JOE",4,0,1,1,3,4,"001,019,000",19}, - - { "X4_RITA",0,0,1,1,0,1,"",1}, - { "X4_RITA",1,0,1,7,0,1,"",7}, - { "X4_RITA",2,0,1,1,3,4,"004,005,006,006,006,006,007,000",7}, - { "X4_RITA",3,0,1,1,3,4,"005,004,001,000",1}, - { "X4_RITA",4,0,1,1,3,4,"001,003,000",3}, - - { "X5_SPARKY",0,0,1,1,2,3,"",1}, - { "X5_SPARKY",1,0,1,1,2,3,"001,010,011,011,001,000",1}, - { "X5_SPARKY",2,0,1,1,2,3,"001,007,008,009,000",9}, - - { "X6_HUGH",0,0,1,1,2,3,"",1}, - { "X6_HUGH",1,0,1,1,2,3,"007,007,007,007,,001,000",1}, - { "X6_HUGH",2,0,1,1,2,3,"008,008,008,008,008,009,009,008,008,008,009,008,000",8}, - - { "X10_JOE",0,0,1,2,2,3,"",2}, - { "X10_JOE",1,0,1,8,2,3,"",8}, - { "X10_JOE",2,0,1,2,2,3,"014,014,014,015,015,014,014,015,015,000",2}, - - { "X10_RITA",0,0,1,2,2,3,"",2}, - - { "X11_JOE",0,0,1,2,0,1,"",2}, - - { "X11_RITA",0,0,1,2,0,1,"",2}, - { "X11_RITA",1,0,1,2,1,0,"003,004,000",4}, - - { "JOHN", 0, 0, 1, 2, 2, 3, "", 1 }, - { "JOHN", 1, 0, 1, 15, -1, 0, "", 1 }, - { "JOHN", 2, 0, 1, 16, -1, 0, "", 1 }, - { "JOHN", 3, 0, 1, 17, -1, 0, "", 1 }, - - { "STEVE", 0, 0, 8, 2, 2, 3, "", 2 }, - { "STEVE", 1, 0, 8, 16, -1, 0, "", 2 }, - { "STEVE", 2, 0, 9, 18, -1, 0, "T016,017,017,016,008,000", 2 }, - { "STEVE", 3, 0, 8, 18, -1, 0, "", 2 }, - - { "TONY", 0, 0, 1, 2, 2, 3, "", 1 }, - { "TONY", 1, 0, 1, 12, -1, 0, "", 1 }, - - { "*",0,0,0,0,0,0,"",0} -DO_EndFunc - -static void addTalk_speechParameters() { - UInt32 remove, size; - - remove = 10; - ptr = MemPtrNew(remove); - - size = addTalk_speechParameters_part1(); - size = addTalk_speechParameters_part2(); - size = addTalk_speechParameters_part3(); - size = addTalk_speechParameters_part4(); - - size = MemPtrSize(ptr) - remove; - - writeRecord(ptr + remove, size, GBVARS_SPEECHPARAMETERS_INDEX , GBVARS_QUEEN); - MemPtrFree(ptr); -} - -void Queen_addTalk() { - addTalk_speechParameters(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_akos.c b/backends/PalmOS/Src/builder/scumm/bl_akos.c deleted file mode 100644 index e5f7c2721f..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_akos.c +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include "b_globals.h" - -static void addAkos_bigScaleTable() { -byte bigCostumeScaleTable[768] = { - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, - - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, - - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, -}; - writeRecord(bigCostumeScaleTable, sizeof(bigCostumeScaleTable), GBVARS_BIGSCALETABLE_INDEX , GBVARS_SCUMM); -} - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addAkos() { - addAkos_bigScaleTable(); - -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_charset.c b/backends/PalmOS/Src/builder/scumm/bl_charset.c deleted file mode 100644 index 1fe8d561af..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_charset.c +++ /dev/null @@ -1,689 +0,0 @@ -#include -#include "b_globals.h" - -static void addCharset_germanCharsetDataV2() { - byte germanCharsetDataV2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, - 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, - 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, - 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, - 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, - 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, - 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, - 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, - 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, - 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, - 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, - 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, - 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, - 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, - 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, - 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, - 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, - 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x0e, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0e, 0x00, - 0x7c, 0x82, 0xba, 0xa2, 0xa2, 0xba, 0x82, 0x7c, - 0x70, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x70, 0x00, - 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, - 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, - 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, - 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, - 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, - 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, - 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, - 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, - 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, - 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x66, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, - 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, - 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, - 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, - 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, - 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, - 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, - 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, - 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, - 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, - 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x00, - 0x42, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x1c, 0x36, 0x36, 0x7c, 0x66, 0x66, 0x7c, 0x40, - 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, - }; - - writeRecord(germanCharsetDataV2, sizeof(germanCharsetDataV2), GBVARS_GERMANCHARSETDATAV2_INDEX , GBVARS_SCUMM); -} - -static void addCharset_frenchCharsetDataV2() { - byte frenchCharsetDataV2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, - 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, - 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, - 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, - 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, - 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, - 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, - 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, - 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, - 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, - 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, - 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, - 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, - 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, - 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, - 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, - 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, - 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, - 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, - 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, - 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, - 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, - 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, - 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, - 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, - 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, - 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, - 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, - 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, - 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, - 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, - 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, - 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, - 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, - 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, - 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, - 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, - 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, - 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, - }; - - writeRecord(frenchCharsetDataV2, sizeof(frenchCharsetDataV2), GBVARS_FRENCHCHARSETDATAV2_INDEX , GBVARS_SCUMM); -} - -static void addCharset_englishCharsetDataV2() { - byte englishCharsetDataV2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x06, 0x0C, 0x18, 0x3E, 0x03, 0x00, - 0x80, 0xC0, 0x60, 0x30, 0x18, 0x7C, 0xC0, 0x00, - 0x00, 0x03, 0x3E, 0x18, 0x0C, 0x06, 0x03, 0x01, - 0x00, 0xC0, 0x7C, 0x18, 0x30, 0x60, 0xC0, 0x80, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x7F, - 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, - 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, - 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, - 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x07, 0x0C, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x30, 0x18, 0x18, - 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x0C, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18, - 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, - 0x18, 0x66, 0xC3, 0xDB, 0xDB, 0xC3, 0x66, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, 0x00, - 0x18, 0x3E, 0x58, 0x3C, 0x1A, 0x7C, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, - 0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00, - 0x06, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, - 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, - 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, - 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00, - 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E, 0x00, - 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, - 0x06, 0x0E, 0x1E, 0x66, 0x7F, 0x06, 0x06, 0x00, - 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00, - 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, - 0x7E, 0x66, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, - 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x0E, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x00, - 0x7C, 0x82, 0xBA, 0xA2, 0xBA, 0x82, 0x7C, 0x00, - 0x70, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00, - 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, - 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, - 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, - 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, - 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7E, 0x00, - 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, - 0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, - 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, - 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, - 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00, - 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, - 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00, - 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x66, 0x00, - 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, - 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x0E, 0x00, - 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66, 0x00, - 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, - 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, - 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00, - 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, - 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, - 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, - 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, - 0x0C, 0x12, 0x30, 0x7C, 0x30, 0x62, 0xFC, 0x00, - 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, - 0x00, 0x10, 0x30, 0x7F, 0x7F, 0x30, 0x10, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, - 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, - 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x00, - 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, - 0x00, 0x0E, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x7C, - 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C, - 0x00, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x00, - 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, - 0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00, - 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, - 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, - 0x00, 0x00, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x00, - 0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, - 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, - 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00, - 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x78, - 0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, - 0x01, 0x03, 0x06, 0x6C, 0x78, 0x70, 0x60, 0x00, - 0x18, 0x3C, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0xFF, 0x7E, 0x3C, 0x18, - 0x10, 0x30, 0x70, 0xFF, 0xFF, 0x70, 0x30, 0x10, - 0x08, 0x0C, 0x0E, 0xFF, 0xFF, 0x0E, 0x0C, 0x08, - }; - - writeRecord(englishCharsetDataV2, sizeof(englishCharsetDataV2), GBVARS_ENGLISHCHARSETDATAV2_INDEX , GBVARS_SCUMM); -} - -static void addCharset_italianCharsetDataV2() { - byte italianCharsetDataV2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, - 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, - 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, - 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, - 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, - 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, - 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, - 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, - 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, - 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, - 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, - 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, - 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, - 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, - 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, - 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, - 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, - 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, - 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, - 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, - 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, - 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, - 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, - 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, - 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, - 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, - 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, - 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, - 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, - 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, - 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, - 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, - 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, - 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, - 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, - 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, - 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, - 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, - 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, - }; - - writeRecord(italianCharsetDataV2, sizeof(italianCharsetDataV2), GBVARS_ITALIANCHARSETDATAV2_INDEX , GBVARS_SCUMM); -} - -static void addCharset_spanishCharsetDataV2() { - byte spanishCharsetDataV2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, - 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, - 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, - 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, - 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, - 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, - 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, - 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, - 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, - 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, - 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, - 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, - 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, - 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, - 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, - 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, - 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, - 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, - 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, - 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, - 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, - 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, - 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, - 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, - 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, - 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, - 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, - 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, - 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, - 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, - 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, - 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, - 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, - 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, - 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, - 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, - 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, - 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, - 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, - 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, - 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, - 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, - 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, - 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, - 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, - 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, - 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, - 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, - 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, - 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, - 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, - 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, - 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, - 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, - 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, - }; - - writeRecord(spanishCharsetDataV2, sizeof(spanishCharsetDataV2), GBVARS_SPANISHCHARSETDATAV2_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addCharset() { - addCharset_germanCharsetDataV2(); - addCharset_frenchCharsetDataV2(); - addCharset_englishCharsetDataV2(); - addCharset_italianCharsetDataV2(); - addCharset_spanishCharsetDataV2(); -} diff --git a/backends/PalmOS/Src/builder/scumm/bl_costume.c b/backends/PalmOS/Src/builder/scumm/bl_costume.c deleted file mode 100644 index ec4c2bee87..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_costume.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include "b_globals.h" - - -static void addCostume_smallCostumeScaleTable() { - byte smallCostumeScaleTable[256] = { - 0xFF, 0xFD, 0x7D, 0xBD, 0x3D, 0xDD, 0x5D, 0x9D, - 0x1D, 0xED, 0x6D, 0xAD, 0x2D, 0xCD, 0x4D, 0x8D, - 0x0D, 0xF5, 0x75, 0xB5, 0x35, 0xD5, 0x55, 0x95, - 0x15, 0xE5, 0x65, 0xA5, 0x25, 0xC5, 0x45, 0x85, - 0x05, 0xF9, 0x79, 0xB9, 0x39, 0xD9, 0x59, 0x99, - 0x19, 0xE9, 0x69, 0xA9, 0x29, 0xC9, 0x49, 0x89, - 0x09, 0xF1, 0x71, 0xB1, 0x31, 0xD1, 0x51, 0x91, - 0x11, 0xE1, 0x61, 0xA1, 0x21, 0xC1, 0x41, 0x81, - 0x01, 0xFB, 0x7B, 0xBB, 0x3B, 0xDB, 0x5B, 0x9B, - 0x1B, 0xEB, 0x6B, 0xAB, 0x2B, 0xCB, 0x4B, 0x8B, - 0x0B, 0xF3, 0x73, 0xB3, 0x33, 0xD3, 0x53, 0x93, - 0x13, 0xE3, 0x63, 0xA3, 0x23, 0xC3, 0x43, 0x83, - 0x03, 0xF7, 0x77, 0xB7, 0x37, 0xD7, 0x57, 0x97, - 0x17, 0xE7, 0x67, 0xA7, 0x27, 0xC7, 0x47, 0x87, - 0x07, 0xEF, 0x6F, 0xAF, 0x2F, 0xCF, 0x4F, 0x8F, - 0x0F, 0xDF, 0x5F, 0x9F, 0x1F, 0xBF, 0x3F, 0x7F, - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE -}; - writeRecord(smallCostumeScaleTable, sizeof(smallCostumeScaleTable), GBVARS_SMALLSCALETABLE_INDEX , GBVARS_SCUMM); -} -void addCostume() { - addCostume_smallCostumeScaleTable(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_dialogs.c b/backends/PalmOS/Src/builder/scumm/bl_dialogs.c deleted file mode 100644 index 98ed7f919e..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_dialogs.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include "b_globals.h" - -typedef struct { - Int32 num; - char string[80]; -} ResString; - -static void addDialogs_string_map_table_v7() { - ResString string_map_table_v7[] = { - {96, "game name and version"}, //that's how it's supposed to be - {77, "Select a game to LOAD"}, - {76, "Name your SAVE game"}, - {70, "save"}, //boot8 - {71, "load"}, //boot9 - {72, "play"}, //boot10 - {73, "cancel"}, //boot11 - {74, "quit"}, //boot12 - {75, "ok"}, //boot13 - {85, "game paused"}, // boot3 - - /* this is the almost complete string map for v7 - {63, "how may I serve you?"}, - {64, "the dig v1.0"}, //(game name/version) - {67, "text display only"}, - {68, "c:\\dig"}, //boot007 (save path ?) - {69, "the dig"}, //boot21 (game name) - {70, "save"}, //boot8 - {71, "load"}, //boot9 - {72, "play"}, //boot10 - {73, "cancel"}, //boot11 - {74, "quit"}, //boot12 - {75, "ok"}, //boot13 - {76, "name your save game"}, //boot19 - {77, "select a game to load"}, //boot20 - {78, "you must enter a name"},//boot14 - {79, "saving '%s'"}, //boot17 - {80, "loading '%s'"}, //boot18 - {81, "the game was NOT saved"}, //boot15 - {82, "the game was NOT loaded"}, //boot16 - {83, "how may I serve you?"}, - {84, "how may I serve you?"}, - {85, "game paused"}, // boot3 - {86, "Are you sure you want to restart"}, - {87, "Are you sure you want to quit?"}, //boot05 - {89, "how may I serve you?"}, - {90, "music"}, //boot22 - {91, "voice"}, //boot23 - {92, "sfx"}, //boot24 - {93, "disabled"}, //boot25 - {94, "text speed"}, //boot26 - {95, "text display"}, //boot27 - {96, "the dig v1.0"},*/ - - }; - writeRecord(string_map_table_v7, sizeof(string_map_table_v7), GBVARS_STRINGMAPTABLEV7_INDEX , GBVARS_SCUMM); -} - -static void addDialogs_string_map_table_v6() { - ResString string_map_table_v6[] = { - {117, "How may I serve you?"}, - {109, "Select a game to LOAD"}, - {108, "Name your SAVE game"}, - {96, "Save"}, - {97, "Load"}, - {98, "Play"}, - {99, "Cancel"}, - {100, "Quit"}, - {101, "OK"}, - {93, "Game paused"}, - }; - writeRecord(string_map_table_v6, sizeof(string_map_table_v6), GBVARS_STRINGMAPTABLEV6_INDEX , GBVARS_SCUMM); -} - -static void addDialogs_string_map_table_v5() { - ResString string_map_table_v5[] = { - {28, "How may I serve you?"}, - {20, "Select a game to LOAD"}, - {19, "Name your SAVE game"}, - {7, "Save"}, - {8, "Load"}, - {9, "Play"}, - {10, "Cancel"}, - {11, "Quit"}, - {12, "OK"}, - {4, "Game paused"} - }; - writeRecord(string_map_table_v5, sizeof(string_map_table_v5), GBVARS_STRINGMAPTABLEV5_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addDialogs() { - addDialogs_string_map_table_v7(); - addDialogs_string_map_table_v6(); - addDialogs_string_map_table_v5(); - -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_gfx.c b/backends/PalmOS/Src/builder/scumm/bl_gfx.c deleted file mode 100644 index 0ac90e5636..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_gfx.c +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include "b_globals.h" -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -typedef struct { - Int8 numOfIterations; - Int8 deltaTable[16]; // four times l / t / r / b - Int8 stripTable[16]; // ditto -} TransitionEffect; -/////////////////////////////////////////////////////////////////// -static void addGfx_transitionEffects() { - TransitionEffect transitionEffects[5] = { - // Iris effect (looks like an opening/closing camera iris) - { - 13, // Number of iterations - { - 1, 1, -1, 1, - -1, 1, -1, -1, - 1, -1, -1, -1, - 1, 1, 1, -1 - }, - { - 0, 0, 39, 0, - 39, 0, 39, 24, - 0, 24, 39, 24, - 0, 0, 0, 24 - } - }, - - // Box wipe (a box expands from the upper-left corner to the lower-right corner) - { - 25, // Number of iterations - { - 0, 1, 2, 1, - 2, 0, 2, 1, - 2, 0, 2, 1, - 0, 0, 0, 0 - }, - { - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 0, 1, 0, - 255, 0, 0, 0 - } - }, - - // Box wipe (a box expands from the lower-right corner to the upper-left corner) - { - 25, // Number of iterations - { - -2, -1, 0, -1, - -2, -1, -2, 0, - -2, -1, -2, 0, - 0, 0, 0, 0 - }, - { - 39, 24, 39, 24, - 39, 24, 39, 24, - 38, 24, 38, 24, - 255, 0, 0, 0 - } - }, - - // Inverse box wipe - { - 25, // Number of iterations - { - 0, -1, -2, -1, - -2, 0, -2, -1, - -2, 0, -2, -1, - 0, 0, 0, 0 - }, - { - 0, 24, 39, 24, - 39, 0, 39, 24, - 38, 0, 38, 24, - 255, 0, 0, 0 - } - }, - - // Inverse iris effect, specially tailored for V1/V2 games - { - 9, // Number of iterations - { - -1, -1, 1, -1, - -1, 1, 1, 1, - -1, -1, -1, 1, - 1, -1, 1, 1 - }, - { - 7, 7, 32, 7, - 7, 8, 32, 8, - 7, 8, 7, 8, - 32, 7, 32, 8 - } - } - }; - - writeRecord(transitionEffects, sizeof(transitionEffects), GBVARS_TRANSITIONEFFECTS_INDEX , GBVARS_SCUMM); -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addGfx() { - addGfx_transitionEffects(); - -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_md5.c b/backends/PalmOS/Src/builder/scumm/bl_md5.c deleted file mode 100644 index f3f4261d99..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_md5.c +++ /dev/null @@ -1,432 +0,0 @@ -#include -#include "b_globals.h" - -enum Language { - UNK_LANG = -1, // Use default language (i.e. none specified) - EN_ANY = 0, - EN_USA = 1, - DE_DEU = 2, - FR_FRA = 3, - IT_ITA = 4, - PT_BRA = 5, - ES_ESP = 6, - JA_JPN = 7, - ZH_TWN = 8, - KO_KOR = 9, - SE_SWE = 10, - EN_GRB = 11, - HB_ISR = 20, - RU_RUS = 21, - CZ_CZE = 22, - NL_NLD = 23, - NB_NOR = 24 -}; - -enum Platform { - kPlatformUnknown = -1, - kPlatformPC = 0, - kPlatformAmiga = 1, - kPlatformAtariST = 2, - kPlatformMacintosh = 3, - kPlatformFMTowns = 4, - kPlatformWindows = 5, - kPlatformNES = 6, - kPlatformC64 = 7 -/* - kPlatformSEGA, - kPlatformPCEngine -*/ -}; - -typedef struct { - const char md5[32 + 1]; - const char target[16 + 1]; - enum Language language; - enum Platform platform; -} MD5Table; - -static void addScumm_mdtable() { - MD5Table md5table[] = { - { "0305e850382b812fec6e5998ef88a966", "pjs-demo", NL_NLD, kPlatformWindows }, - { "035deab53b47bc43abc763560d0f8d4b", "playfate", EN_ANY, kPlatformPC }, - { "037385a953789190298494d92b89b3d0", "catalog2", EN_ANY, kPlatformWindows }, - { "0425954a9db5c340861672892c3e678d", "samdemo", EN_ANY, kPlatformMacintosh }, - { "04401d747f1a2c1c4b388daff71ed378", "ft", DE_DEU, kPlatformMacintosh }, - { "04687cdf7f975a89d2474929f7b80946", "indy3towns", EN_ANY, kPlatformFMTowns }, - { "0557df19f046a84c2fdc63507c6616cb", "farmdemo", NL_NLD, kPlatformWindows }, - { "06b187468113f9ae5a400b148a847fac", "atlantis", EN_ANY, kPlatformMacintosh }, - { "07433205acdca3bc553d0e731588b35f", "airport", EN_ANY, kPlatformWindows }, - { "07b810e37be7489263f7bc7627d4765d", "freddi4", RU_RUS, kPlatformWindows }, - { "084ed0fa98a6d1e9368d67fe9cfbd417", "freddemo", EN_ANY, kPlatformWindows }, - { "0855496dde35356b1a9691e22ba84cdc", "freddemo", EN_ANY, kPlatformWindows }, - { "08cc5c3eedaf72ebe12734eee94f7fa2", "balloon", EN_ANY, kPlatformUnknown }, - { "09820417db26687bb7fe0c83cc4c553b", "ft", EN_ANY, kPlatformUnknown }, - { "0a212fa35fa8421f31c1f3961272caf0", "monkeyvga", DE_DEU, kPlatformAmiga }, - { "0ab19be9e2a3f6938226638b2a3744fe", "timedemo", EN_ANY, kPlatformUnknown }, - { "0ac41e2e3d2174e5a042a6b565328dba", "racedemo", EN_ANY, kPlatformUnknown }, - { "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", RU_RUS, kPlatformPC }, - { "0cccfa5223099a60e76cfcca57a1a141", "freddi3", NL_NLD, kPlatformWindows }, - { "0d1b69471605201ef2fa9cec1f5f02d2", "maniac", ES_ESP, kPlatformPC }, - { "0e4c5d54a0ad4b26132e78b5ea76642a", "snmidemo", EN_ANY, kPlatformPC }, - { "0f5935bd5e88ba6f09e558d64459746d", "1grademo", EN_ANY, kPlatformWindows }, - { "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", IT_ITA, kPlatformUnknown }, - { "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3EGA", FR_FRA, kPlatformAtariST }, - { "0fb73eddfcf584c02ba097984df131ba", "samnmax", DE_DEU, kPlatformUnknown }, - { "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", EN_ANY, kPlatformWindows }, - { "114acdc2659a273c220f86ee9edb24c1", "maniac", FR_FRA, kPlatformPC }, - { "11ddf1fde76e3156eb3a38da213f484e", "monkey2", IT_ITA, kPlatformAmiga }, - { "11e6e244078ff09b0f3832e35420e0a7", "catalog", EN_ANY, kPlatformWindows }, - { "132bff65e6367c09cc69318ce1b59333", "monkey2", EN_ANY, kPlatformAmiga }, - { "145bd3373574feb668cc2eea2ec6cf86", "balloon", RU_RUS, kPlatformWindows }, - { "14d48c95b43ddeb983254cf6c43851f1", "freddi4", NL_NLD, kPlatformWindows }, - { "157367c3c21e0d03a0cba44361b4cf65", "indy3EGA", EN_ANY, kPlatformAtariST }, - { "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkeyvga", EN_ANY, kPlatformPC }, - { "16542a7342a918bfe4ba512007d36c47", "FreddisFunShop", EN_ANY, kPlatformUnknown }, - { "16effd200aa6b8abe9c569c3e578814d", "f4-demo", NL_NLD, kPlatformWindows }, - { "179879b6e35c1ead0d93aab26db0951b", "fbear", EN_ANY, kPlatformWindows }, - { "17b5d5e6af4ae89d62631641d66d5a05", "indy3", IT_ITA, kPlatformPC }, - { "17fa250eb72dae2dad511ba79c0b6b0a", "dottdemo", FR_FRA, kPlatformPC }, - { "182344899c2e2998fca0bebcd82aa81a", "atlantis", EN_ANY, kPlatformPC }, - { "183d7464902d40d00800e8ee1f04117c", "maniac", DE_DEU, kPlatformPC }, - { "1875b90fade138c9253a8e967007031a", "indy3", UNK_LANG, kPlatformPC }, - { "187d315f6b5168f68680dfe8c3d76a3e", "loom", HB_ISR, kPlatformPC }, - { "1900e501a52fbf55bde6e4196f6d2aa6", "zak", IT_ITA, kPlatformPC }, - { "19263586f749a560c1adf8b3393a9593", "socks", RU_RUS, kPlatformWindows }, - { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", EN_ANY, kPlatformMacintosh }, - { "1c792d28376d45e145cb916bca0400a2", "sf2-demo", NL_NLD, kPlatformUnknown }, - { "1ca86e2cf9aaa2068738a1e5ba477e60", "zakTowns", JA_JPN, kPlatformFMTowns }, - { "1d05cd189e4908f79b57e78a4402f292", "monkeyega", EN_ANY, kPlatformPC }, - { "1dd3c11ea4439adfe681e4e405b624e1", "monkeyega", FR_FRA, kPlatformPC }, - { "1dd7aa088e09f96d06818aa9a9deabe0", "indy3EGA", EN_ANY, kPlatformMacintosh }, - { "1fbebd7b2b692df5297870447a80cfed", "atlantis", DE_DEU, kPlatformPC }, - { "2012f854d83d9cc6f73b2b544cd8bbf8", "water", RU_RUS, kPlatformWindows }, - { "2108d83dcf09f8adb4bc524669c8cf51", "PuttTime", EN_ANY, kPlatformUnknown }, - { "21a6592322f92550f144f68a8a4e685e", "dig", FR_FRA, kPlatformMacintosh }, - { "21abe302e1b1e2b66d6f5c12e241ebfd", "freddicove", RU_RUS, kPlatformWindows }, - { "225e18566e810c634bf7de63e7568e3e", "mustard", EN_ANY, kPlatformUnknown }, - { "22c9eb04455440131ffc157aeb8d40a8", "fbdemo", EN_ANY, kPlatformWindows }, - { "22d07d6c386c9c25aca5dac2a0c0d94b", "maniac", SE_SWE, kPlatformNES }, - { "22f4ea88a09da12df9308ba30bcb7d0f", "loom", EN_ANY, kPlatformPC }, - { "2723fea3dae0cb47768c424b145ae0e7", "tentacle", EN_ANY, kPlatformPC }, - { "27b3a4224ad63d5b04627595c1c1a025", "zak", IT_ITA, kPlatformAmiga }, - { "28d24a33448fab6795850bc9f159a4a2", "indydemo", JA_JPN, kPlatformFMTowns }, - { "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", EN_ANY, kPlatformPC }, - { "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", ES_ESP, kPlatformPC }, - { "2ccd8891ce4d3f1a334d21bff6a88ca2", "monkey", EN_ANY, kPlatformMacintosh }, - { "2d1e891fe52df707c30185e52c50cd92", "monkey", EN_ANY, kPlatformPC }, - { "2d388339d6050d8ccaa757b64633954e", "zakTowns", EN_ANY, kPlatformFMTowns }, - { "2d4536a56e01da4b02eb021e7770afa2", "zakTowns", EN_ANY, kPlatformFMTowns }, - { "2e85f7aa054930c692a5b1bed1dfc295", "footdemo", EN_ANY, kPlatformUnknown }, - { "2fe369ad70f52a8cf7ad6077ee64f81a", "loom", DE_DEU, kPlatformAmiga }, - { "305d3dd57c96c65b017bc70c8c7cfb5e", "monkey", DE_DEU, kPlatformPC }, - { "30ba1e825d4ad2b448143ae8df18482a", "pj2demo", NL_NLD, kPlatformWindows }, - { "319a4dde52c7960b5aae8a1ec348d918", "monkeyvga", DE_DEU, kPlatformAmiga }, - { "31aa57f460a3d12429f0552a46a90b39", "puttdemo", EN_ANY, kPlatformPC }, - { "31b8fda4c8c7413fa6b39997e776eba4", "loomTowns", JA_JPN, kPlatformFMTowns }, - { "32709cbeeb3044b34129950860a83f14", "pajama2", RU_RUS, kPlatformWindows }, - { "32a433dea56b86a55b59e4ff7d755711", "ftpcdemo", EN_ANY, kPlatformPC }, - { "330f631502e381a4e199a3f7cb483c20", "indy3EGA", DE_DEU, kPlatformAmiga }, - { "3433be9866ca4261b2d5d25374e3f243", "monkeyvga", FR_FRA, kPlatformAmiga }, - { "3486ede0f904789267d4bcc5537a46d4", "zoodemo", EN_ANY, kPlatformMacintosh }, - { "35a2d3040fa512f8232d9e443319d84d", "dig", EN_ANY, kPlatformMacintosh }, - { "362c1d281fb9899254cda66ad246c66a", "digdemo", EN_ANY, kPlatformUnknown }, - { "3686cf8f89e102ececf4366e1d2c8126", "monkey2", EN_ANY, kPlatformPC }, - { "36a6750e03fb505fc19fc2bf3e4dbe91", "pj2demo", EN_ANY, kPlatformUnknown }, - { "37aed3f91c1ef959e0bd265f9b13781f", "pajama", EN_ANY, kPlatformUnknown }, - { "37f56ceb13e401a7ac7d9e6b37fecaf7", "loom", EN_ANY, kPlatformPC }, - { "37ff1b308999c4cca7319edfcc1280a0", "puttdemo", EN_ANY, kPlatformWindows }, - { "3824e60cdf639d22f6df92a03dc4b131", "fbear", EN_ANY, kPlatformPC }, - { "387a544b8b10b26912d8413bab63a853", "mi2demo", EN_ANY, kPlatformPC }, - { "3905799e081b80a61d4460b7b733c206", "maniac", EN_ANY, kPlatformNES }, - { "3938ee1aa4433fca9d9308c9891172b1", "zakTowns", EN_ANY, kPlatformFMTowns }, - { "399b217b0c8d65d0398076da486363a9", "indy3", DE_DEU, kPlatformPC }, - { "39cb9dec16fa16f38d79acd80effb059", "loom", FR_FRA, kPlatformAmiga }, - { "39cb9dec16fa16f38d79acd80effb059", "loom", IT_ITA, kPlatformAmiga }, - { "3a03dab514e4038df192d8a8de469788", "atlantis", EN_ANY, kPlatformAmiga }, - { "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3towns", JA_JPN, kPlatformFMTowns }, - { "3b301b7892f883ce42ab4be6a274fea6", "samnmax", EN_ANY, kPlatformPC }, - { "3de99ef0523f8ca7958faa3afccd035a", "spyfox", EN_ANY, kPlatformUnknown }, - { "3df6ead57930488bc61e6e41901d0e97", "fbear", EN_ANY, kPlatformMacintosh }, - { "40564ec47da48a67787d1f9bd043902a", "maniac", EN_ANY, kPlatformPC }, - { "4167a92a1d46baa4f4127d918d561f88", "tentacle", EN_ANY, kPlatformUnknown }, - { "430bc518017b6fac046f58bab6baad5d", "monkey2", JA_JPN, kPlatformFMTowns }, - { "45082a5c9f42ba14dacfe1fdeeba819d", "ff5demo", EN_ANY, kPlatformWindows }, - { "45152f7cf2ba8f43cf8a8ea2e740ae09", "monkeyvga", ES_ESP, kPlatformPC }, - { "46b53fd430adcfbed791b48a0d4b079f", "funpack", EN_ANY, kPlatformPC }, - { "477dbafbd66a53c98416dc01aef019ad", "monkeyega", IT_ITA, kPlatformPC }, - { "47e75b1bdcb44c78cb94883d1731ccf8", "fbdemo", EN_ANY, kPlatformPC }, - { "49210e124e4c2b30f1290a9ef6306301", "monkeyega", EN_ANY, kPlatformPC }, - { "499c958affc394f2a3868f1eb568c3ee", "f4-demo", NL_NLD, kPlatformWindows }, - { "4af4a6b248103c1fe9edef619677f540", "moondemo", EN_ANY, kPlatformMacintosh }, - { "4ba37f835be11a59d969f90f272f575b", "water", EN_ANY, kPlatformUnknown }, - { "4ba7fb331296c283e73d8f5b2096e551", "samnmax", ES_ESP, kPlatformUnknown }, - { "4bedb49943df95a9c900a5a82ccbe9de", "ft", FR_FRA, kPlatformUnknown }, - { "4cb9c3618f71668f8e4346c8f323fa82", "monkey2", EN_ANY, kPlatformMacintosh }, - { "4ce2d5b355964bbcb5e5ce73236ef868", "freddicove", RU_RUS, kPlatformWindows }, - { "4d34042713958b971cb139fba4658586", "indy4", JA_JPN, kPlatformFMTowns }, - { "4dbff3787aedcd96b0b325f2d92d7ad9", "maze", EN_ANY, kPlatformUnknown }, - { "4dc780f1bc587a193ce8a97652791438", "loom", EN_ANY, kPlatformAmiga }, - { "4e5867848ee61bc30d157e2c94eee9b4", "timedemo", EN_ANY, kPlatformUnknown }, - { "4edbf9d03550f7ba01e7f34d69b678dd", "spydemo", NL_NLD, kPlatformWindows }, - { "4f04b321a95d4315ce6d65f8e1dd0368", "maze", EN_ANY, kPlatformUnknown }, - { "4f267a901719623de7dde83e47d5b474", "atlantis", DE_DEU, kPlatformAmiga }, - { "4f580a021eee026f3b4589e17d130d78", "freddi4", UNK_LANG, kPlatformUnknown }, - { "4fa6870d9bc8c313b65d54b1da5a1891", "pajama", NL_NLD, kPlatformWindows }, - { "4fbbe9f64b8bc547503a379a301183ce", "tentacle", IT_ITA, kPlatformUnknown }, - { "5057fb0e99e5aa29df1836329232f101", "freddi2", UNK_LANG, kPlatformWindows }, - { "507bb360688dc4180fdf0d7597352a69", "freddi", SE_SWE, kPlatformWindows }, - { "50fcdc982a25063b78ad46bf389b8e8d", "tentacle", IT_ITA, kPlatformPC }, - { "51305e929e330e24a75a0351c8f9975e", "freddi2", EN_ANY, kPlatformUnknown }, - { "5262a27afcaee04e5c4900220bd463e7", "PuttsFunShop", EN_ANY, kPlatformUnknown }, - { "52a4bae0746a11d7b1e8554e91a6645c", "zak", FR_FRA, kPlatformPC }, - { "53e94115b55dd51d4b8ff0871aa1df1e", "spydemo", EN_ANY, kPlatformUnknown }, - { "54a936ad06161ff7bfefcb96200f7bff", "monkeyvga", EN_ANY, kPlatformAmiga }, - { "55518cd73cf9c6d23ea29c51ee06bdfe", "ft", IT_ITA, kPlatformUnknown }, - { "55e4cc866ff9046824e1c638ba2b8c7f", "ft", RU_RUS, kPlatformUnknown }, - { "566165a7338fa11029e7c14d94fa70d0", "freddemo", EN_ANY, kPlatformWindows }, - { "5798972220cd458be2626d54c80f71d7", "atlantis", IT_ITA, kPlatformAmiga }, - { "57b0d89af79befe1cabce3bece869e7f", "tentacle", DE_DEU, kPlatformPC }, - { "589601b676c98b1c0c987bc031ab68b3", "chase", EN_ANY, kPlatformUnknown }, - { "58fdf4c7ad13540a734e18f8584cad89", "puttzoo", EN_ANY, kPlatformMacintosh }, - { "590e6546aacd0d374b7f3a4f53013ab1", "freddicove", EN_ANY, kPlatformUnknown }, - { "5a35e36fd777e9c37a49c5b2faca52f9", "loom", EN_ANY, kPlatformPC }, - { "5b08000a9c47b2887df6506ac767ca68", "fbear", EN_ANY, kPlatformUnknown }, - { "5bd335265a61caa3d78956ad9f88ba23", "footdemo", EN_ANY, kPlatformUnknown }, - { "5c21fc49aee8f46e58fef21579e614a1", "thinker1", EN_ANY, kPlatformUnknown }, - { "5d88b9d6a88e6f8e90cded9d01b7f082", "loomcd", EN_ANY, kPlatformPC }, - { "5e8fb66971a60e523e5afbc4c129c0e8", "socks", EN_ANY, kPlatformUnknown }, - { "5fbe557049892eb4b709d90916ec97ca", "indy3EGA", EN_ANY, kPlatformPC }, - { "600abd3e9f47e63e670188b7e4e86ac7", "spyozon", EN_ANY, kPlatformUnknown }, - { "6027e9ca9c35746d95dee2068cec17e5", "zak", DE_DEU, kPlatformAmiga }, - { "60ba818dc3bede86d40357e3913f8505", "ft", EN_ANY, kPlatformUnknown }, - { "613f64f78ea26c7353b2a5940eb61d6a", "zak", FR_FRA, kPlatformAtariST }, - { "624cdb93654667c869d204a64af7e57f", "maniac", EN_ANY, kPlatformPC }, - { "6271130f440066830eca9056c1d7926f", "water", RU_RUS, kPlatformWindows }, - { "66236cd1aec24e1d4aff4c4cc93b7e18", "indy3EGA", FR_FRA, kPlatformPC }, - { "66fd5ff9a810dfeb6d6bdada18221140", "monkeyvga", IT_ITA, kPlatformPC }, - { "672dec94b82f7f0877ebb5b5cf7f4bc1", "pajama", EN_ANY, kPlatformUnknown }, - { "675d71151e9b5a968c8ce46d9fbf4cbf", "zak", EN_ANY, kPlatformPC }, - { "68155a6bf082221525f431c2cbdac8ab", "SamsFunShop", EN_ANY, kPlatformUnknown }, - { "684732efb5799c0f78804c99d8de9aba", "puttputt", EN_ANY, kPlatformMacintosh }, - { "6886e5d08cee329b1f2e743ae2e3ceed", "monkey2", DE_DEU, kPlatformPC }, - { "695fe0b3963333b7e15b37514db3c745", "kinddemo", EN_ANY, kPlatformUnknown }, - { "697c9b7c55a05d8199c48b48e379d2c8", "puttmoon", HB_ISR, kPlatformPC }, - { "69ea626f1f87eecb78ea0d6c6b983a1d", "monkey2", IT_ITA, kPlatformPC }, - { "6a30a07f353a75cdc602db27d73e1b42", "puttputt", EN_ANY, kPlatformWindows }, - { "6af2419fe3db5c2fdb091ae4e5833770", "racedemo", NL_NLD, kPlatformUnknown }, - { "6b19d0e25cbf720d05822379b8b90ed9", "timedemo", NL_NLD, kPlatformWindows }, - { "6b257bb2827dd894b8109a50a1a18b5a", "FF5Demo", NL_NLD, kPlatformWindows }, - { "6b3ec67da214f558dc5ceaa2acd47453", "indy3EGA", EN_ANY, kPlatformPC }, - { "6bf70eee5de3d24d2403e0dd3d267e8a", "spyfox", EN_ANY, kPlatformWindows }, - { "6c2bff0e327f2962e809c2e1a82d7309", "monkeyvga", EN_ANY, kPlatformAmiga }, - { "6df20c50c1ab19799de9be7ae7716881", "fbdemo", EN_ANY, kPlatformMacintosh }, - { "6e959d65358eedf9b68b81e304b97fa4", "tentacle", DE_DEU, kPlatformUnknown }, - { "6ea966b4d660c870b9ee790d1fbfc535", "monkey2", ES_ESP, kPlatformAmiga }, - { "6f0be328c64d689bb606d22a389e1b0f", "loom", EN_ANY, kPlatformMacintosh }, - { "6f6ef668c608c7f534fea6e6d3878dde", "indy3EGA", DE_DEU, kPlatformPC }, - { "701246819d1a70573f41bf33fc19214f", "soccer", EN_ANY, kPlatformWindows }, - { "7020931d5a2be0a49d68e7a1882363e4", "zak", EN_ANY, kPlatformPC }, - { "71523b539491527d9860f4407faf0411", "monkeyega", EN_ANY, kPlatformPC }, - { "71fe97c3108678cf604f14abe342341b", "spyfox2", NL_NLD, kPlatformWindows }, - { "7222f260253f325c21fcfa68b5bfab67", "sf2-demo", EN_ANY, kPlatformUnknown }, - { "72ac6bc980d5101c2142189d746bd62f", "spyfox", RU_RUS, kPlatformWindows }, - { "73e5ab7dbb9a8061cc6d25df02dbd1e7", "loom", EN_ANY, kPlatformPC }, - { "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", RU_RUS, kPlatformWindows }, - { "754feb59d3bf86b8a00840df74fd7b26", "f3-mdemo", NL_NLD, kPlatformWindows }, - { "75ba23fff4fd63fa446c02864f2a5a4b", "zak", IT_ITA, kPlatformPC }, - { "75bff95816b84672b877d22a911ab811", "freddi3", RU_RUS, kPlatformWindows }, - { "771bc18ec6f93837b839c992b211904b", "monkeyega", DE_DEU, kPlatformPC }, - { "77f5c9cc0986eb729c1a6b4c8823bbae", "zakTowns", EN_ANY, kPlatformFMTowns }, - { "780e4a0ae2ff17dc296f4a79543b44f8", "puttmoon", UNK_LANG, kPlatformPC }, - { "78bd5f036ea35a878b74e4f47941f784", "freddi4", RU_RUS, kPlatformWindows }, - { "7974365d3dc0f43a2748c975f91ff042", "monkey2", ES_ESP, kPlatformPC }, - { "7bad72e332a59f9fcc1d437f4edad32a", "puttcircus", RU_RUS, kPlatformUnknown }, - { "7c2e76087027eeee9c8f8985f93a1cc5", "f4-demo", EN_ANY, kPlatformUnknown }, - { "7ddeaf52c8b9a50551ce0aa2ac811d07", "BluesABCTimeDemo", EN_ANY, kPlatformUnknown }, - { "7e151c17adf624f1966c8fc5827c95e9", "puttputt", EN_ANY, kPlatformUnknown }, - { "7ea2da67ebabea4ac20cee9f4f9d2934", "airdemo", EN_ANY, kPlatformMacintosh }, - { "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", FR_FRA, kPlatformUnknown }, - { "7f45ddd6dbfbf8f80c0c0efea4c295bc", "maniac", EN_ANY, kPlatformPC }, - { "7fc6cdb46b4c9d384c52327f4bca6416", "football", EN_ANY, kPlatformWindows }, - { "810a9da887aefa597b0cf3c77d262897", "BluesABCTimeDemo", EN_ANY, kPlatformWindows }, - { "81bbfa181184cb494e7a81dcfa94fbd9", "maniac", FR_FRA, kPlatformNES }, - { "8299d9b8a1b0e7b881bae7a9971dc5e2", "zak", EN_ANY, kPlatformAtariST }, - { "8368f552b1e3eba559f8d559bcc4cadb", "freddi3", UNK_LANG, kPlatformUnknown }, - { "861e59ed72a1cd0e6d454f7ee7e2bf3d", "comi", RU_RUS, kPlatformUnknown }, - { "86be8ada36371d4fdc35659d0e912a26", "indy3EGA", ES_ESP, kPlatformPC }, - { "86c9902b7bec1a17926d4dae85beaa45", "airdemo", EN_ANY, kPlatformWindows }, - { "870d1e3c86bc50846d808d14a36b4e08", "monkeyvga", ES_ESP, kPlatformAmiga }, - { "87f6e8037b7cc996e13474b491a7a98e", "maniac", IT_ITA, kPlatformPC }, - { "8801fb4a1200b347f7a38523339526dd", "jungle", EN_ANY, kPlatformWindows }, - { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", ES_ESP, kPlatformUnknown }, - { "898ce8eb1234a955ef75e87141902bb3", "freddi3", RU_RUS, kPlatformWindows }, - { "8a484262363a8e18be87112454f1456b", "pjgames", EN_ANY, kPlatformWindows }, - { "8aa05d3cdb0e795436043f0546af2da2", "tentacle", FR_FRA, kPlatformUnknown }, - { "8afb3cf9f95abf208358e984f0c9e738", "funpack", EN_ANY, kPlatformUnknown }, - { "8bdb0bf87b5e303dd35693afb9351215", "ft", DE_DEU, kPlatformUnknown }, - { "8d479e36f35e80257dfc102cf4b8a912", "farmdemo", EN_ANY, kPlatformWindows }, - { "8e3241ddd6c8dadf64305e8740d45e13", "balloon", EN_ANY, kPlatformUnknown }, - { "8e4ee4db46954bfe2912e259a16fad82", "monkey2", FR_FRA, kPlatformPC }, - { "8eb84cee9b429314c7f0bdcf560723eb", "monkey", EN_ANY, kPlatformFMTowns }, - { "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", EN_ANY, kPlatformUnknown }, - { "8f3758ff98c9c5d78e5d635222cad026", "atlantis", IT_ITA, kPlatformPC }, - { "8fec68383202d38c0d25e9e3b757c5df", "comidemo", UNK_LANG, kPlatformUnknown }, - { "8ffd618a776a4c0d8922bb28b09f8ce8", "airdemo", EN_ANY, kPlatformWindows }, - { "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", HB_ISR, kPlatformPC }, - { "90c755e1c9b9b8a4129d37b2259d0655", "chase", EN_ANY, kPlatformUnknown }, - { "910e31cffb28226bd68c569668a0d6b4", "monkeyega", ES_ESP, kPlatformPC }, - { "91469353f7be1b122fa88d23480a1320", "zak", FR_FRA, kPlatformAmiga }, - { "92b078d9d6d9d751da9c26b8b3075779", "tentacle", FR_FRA, kPlatformPC }, - { "92e7727e67f5cd979d8a1070e4eb8cb3", "puttzoo", EN_ANY, kPlatformUnknown }, - { "92fc0073a4cf259ff36070ecb8628ba8", "thinkerk", EN_ANY, kPlatformUnknown }, - { "96a3069a3c63caa7329588ce1fef41ee", "spyozon", RU_RUS, kPlatformUnknown }, - { "9708cf716ed8bcc9ff3fcfc69413b746", "puttputt", EN_ANY, kPlatformPC }, - { "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", EN_ANY, kPlatformUnknown }, - { "98744fe66ff730e8c2b3b1f58803ab0b", "playfate", EN_ANY, kPlatformPC }, - { "99a3699f80b8f776efae592b44b9b991", "maniac", FR_FRA, kPlatformPC }, - { "99b6f822b0b2612415407865438697d6", "fate", EN_ANY, kPlatformPC }, - { "9bc548e179cdb0767009401c094d0895", "maniac", DE_DEU, kPlatformAmiga }, - { "9bd2a8f72613e715c199246dd511e10f", "atlantis", ES_ESP, kPlatformPC }, - { "9bda5fee51d2fda5253d02c642016bf4", "spyfox", NL_NLD, kPlatformWindows }, - { "9c0fee288ad564a7d25ec3e841810d79", "indy3EGA", EN_ANY, kPlatformAmiga }, - { "9c143c5905055d5df7a0f014ab379aee", "moondemo", EN_ANY, kPlatformWindows }, - { "9c92eeaf517a31b7221ec2546ab669fd", "puttmoon", EN_ANY, kPlatformWindows }, - { "9cdd327c1034c046cb595d251c44da2f", "chase", RU_RUS, kPlatformWindows }, - { "9d4ab3e0e1d1ebc6ba8a6a4c470ed184", "spydemo", EN_ANY, kPlatformWindows }, - { "9d7b67be003fea60be4dcbd193611936", "ftdemo", EN_ANY, kPlatformMacintosh }, - { "9dc02577bf50d4cfaf3de3fbac06fbe2", "puttmoon", EN_ANY, kPlatformMacintosh }, - { "9e5e0fb43bd22f4628719b7501adb717", "monkeyega", FR_FRA, kPlatformAtariST }, - { "a194f15f51ee62badab74b9e7da97693", "bb2demo", EN_ANY, kPlatformWindows }, - { "a28135a7ade38cc0208b04507c46efd1", "spyfox", DE_DEU, kPlatformWindows }, - { "a2bb6aa0537402c1b3c2ea899ccef64b", "smaller", EN_ANY, kPlatformWindows }, - { "a3036878840720fbefa41e6965fa4a0a", "samnmax", EN_ANY, kPlatformPC }, - { "a525c1753c1db5011c00417da37887ef", "PuttTime", EN_ANY, kPlatformUnknown }, - { "a561d2e2413cc1c71d5a1bf87bf493ea", "lost", EN_ANY, kPlatformUnknown }, - { "a570381b028972d891052ee1e51dc011", "maniac", EN_ANY, kPlatformAtariST }, - { "a654fb60c3b67d6317a7894ffd9f25c5", "pj3-demo", EN_ANY, kPlatformWindows }, - { "a7cacad9c40c4dc9e1812abf6c8af9d5", "circdemo", EN_ANY, kPlatformUnknown }, - { "a85856675429fe88051744f755b72f93", "farm", EN_ANY, kPlatformWindows }, - { "a86f9c49355579c30d4a55b477c0d869", "baseball2001", EN_ANY, kPlatformUnknown }, - { "a9543ef0d79bcb47cd76ec197ad0a967", "puttmoon", EN_ANY, kPlatformUnknown }, - { "a9f2f04b1ecaab9495b59befffe9bf88", "pj3-demo", EN_ANY, kPlatformUnknown }, - { "aa6a91b7f6f119d1b7b1f2a4c9e24d59", "moondemo", EN_ANY, kPlatformPC }, - { "aa7a07d94ae853f6460be4ce0a1bf530", "monkeyega", FR_FRA, kPlatformPC }, - { "aa8a0cb65f3afbbe2c14c3f9f92775a3", "monkey", FR_FRA, kPlatformPC }, - { "aaa587701cde7e74692c68c1024b85eb", "racedemo", NL_NLD, kPlatformUnknown }, - { "ab0693e9324cfcf498fdcbb12acf8bb4", "puttcircus", EN_ANY, kPlatformUnknown }, - { "ac1642b6edfb8521ca03760126f1c250", "dottdemo", DE_DEU, kPlatformPC }, - { "ac62d50e39492ee3738b4e83a5ac780f", "freddi2", NL_NLD, kPlatformWindows }, - { "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", EN_ANY, kPlatformUnknown }, - { "ae94f110a14ce71fc515d5b648827a8f", "tentacle", ES_ESP, kPlatformPC }, - { "b23f7cd7c304d7dff08e92a96120d5b4", "zak", EN_ANY, kPlatformPC }, - { "b250d0f9cc83f80ced56fe11a4fb057c", "maniac", EN_ANY, kPlatformPC }, - { "b289a2a8cbedbf45786e0b4ad2f510f1", "samnmax", IT_ITA, kPlatformPC }, - { "b597e0403cc0002f69170e6caba7edd9", "indy3EGA", EN_ANY, kPlatformPC }, - { "b628506f7def772e40de0aa5440fb8e1", "activity", EN_ANY, kPlatformWindows }, - { "b886b0a5d909c7158a914e1d7c1c6c65", "loom", FR_FRA, kPlatformPC }, - { "b8955d7d23b4972229060d1592489fef", "freddicove", NL_NLD, kPlatformWindows }, - { "bd126753de619a495f9f22adc951c8d5", "monkey2", IT_ITA, kPlatformPC }, - { "be39a5d4db60e8aa736b9086778cb45c", "spyozon", EN_ANY, kPlatformWindows }, - { "bf8b52fdd9a69c67f34e8e9fec72661c", "farmdemo", EN_ANY, kPlatformWindows }, - { "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", EN_ANY, kPlatformWindows }, - { "c0039ad982999c92d0de81910d640fa0", "freddi", NL_NLD, kPlatformWindows }, - { "c13225cb1bbd3bc9fe578301696d8021", "game", EN_ANY, kPlatformUnknown }, - { "c24c490373aeb48fbd54caa8e7ae376d", "loom", DE_DEU, kPlatformAtariST }, - { "c25755b08a8d0d47695e05f1e2111bfc", "f4-demo", EN_ANY, kPlatformWindows }, - { "c30ef068add4277104243c31ce46c12b", "monkey2", FR_FRA, kPlatformAmiga }, - { "c3196c5349e53e387aaff1533d95e53a", "snmdemo", EN_ANY, kPlatformPC }, - { "c3b22fa4654bb580b20325ebf4174841", "puttzoo", NL_NLD, kPlatformWindows }, - { "c3df37df9d3b481b45f75283a9907c47", "loom", IT_ITA, kPlatformPC }, - { "c4787c3e8b5e2dfda90850ee800af00f ", "zak", FR_FRA, kPlatformPC }, - { "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", EN_ANY, kPlatformUnknown }, - { "c5d10e190d4b4d59114b824f2fdbd00e", "loomTowns", EN_ANY, kPlatformFMTowns }, - { "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", EN_ANY, kPlatformPC }, - { "c6907d44f1166941d982864cd42cdc89", "pajama2", DE_DEU, kPlatformWindows }, - { "c7890e038806df2bb5c0c8c6f1986ea2", "monkeyvga", EN_ANY, kPlatformPC }, - { "c7be10f775404fd9785a8b92a06d240c", "indy4", EN_ANY, kPlatformFMTowns }, - { "c83079157ec765a28de445aec9768d60", "dottdemo", EN_ANY, kPlatformPC }, - { "c8aac5e3e701874e2fa4117896f9e1b1", "freddemo", EN_ANY, kPlatformMacintosh }, - { "cb1559e8405d17a5a278a6b5ad9338d1", "f3-mdemo", EN_ANY, kPlatformUnknown }, - { "cc8ba2b0df2f9c450bcf055fe2711979", "snmdemo", DE_DEU, kPlatformPC }, - { "cd9c05e755d7bf8e9b9590ad1ebe273e", "digdemo", EN_ANY, kPlatformMacintosh }, - { "cdd760228cf1010c2903f37e788ea31c", "zak", DE_DEU, kPlatformPC }, - { "ce3edc99cd4f478c5b37104d70c68ca5", "zakTowns", JA_JPN, kPlatformFMTowns }, - { "ce6a4cef315b20fef58a95bc40a2d8d3", "monkeyega", FR_FRA, kPlatformPC }, - { "ce7733f185b838e248927c7ba1a04204", "maniac", FR_FRA, kPlatformAmiga }, - { "ce7fd0c382389a6791fc3e199c117ef4", "indy3EGA", ES_ESP, kPlatformPC }, - { "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", RU_RUS, kPlatformUnknown }, - { "cf8d13446ec6cb6222287a925fd47c1d", "baseball", EN_ANY, kPlatformWindows }, - { "cf90b4db5486ef798db78fe6fbf897e5", "pj3-demo", EN_ANY, kPlatformWindows }, - { "d06fbe28818fef7bfc45c2cdf0c0849d", "zak", DE_DEU, kPlatformPC }, - { "d0b531227a27c6662018d2bd05aac52a", "monkeyvga", DE_DEU, kPlatformPC }, - { "d37c55388294b66e53e7ced3af88fa68", "ff2-demo", EN_ANY, kPlatformUnknown }, - { "d43352a805d78b5f4936c6d7779bf575", "samnmax", RU_RUS, kPlatformPC }, - { "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", EN_ANY, kPlatformWindows }, - { "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", RU_RUS, kPlatformWindows }, - { "d4e79c3d8645b8266cd78c325bc35154", "pajama2", EN_ANY, kPlatformUnknown }, - { "d62047a6729349ab36f7ee065bf26509", "dig", RU_RUS, kPlatformUnknown }, - { "d62d248c3df6ec177405e2cb23d923b2", "indy3EGA", IT_ITA, kPlatformPC }, - { "d6dd0646404768a63e963891a96daadd", "atlantis", EN_ANY, kPlatformMacintosh }, - { "d7ab7cd6105546016e6a0d46fb36b964", "pjs-demo", EN_ANY, kPlatformUnknown }, - { "d8323015ecb8b10bf53474f6e6b0ae33", "dig", UNK_LANG, kPlatformUnknown }, - { "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", EN_ANY, kPlatformNES }, - { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", EN_ANY, kPlatformUnknown }, - { "d9d0dd93d16ab4dec55cabc2b86bbd17", "samdemo", EN_ANY, kPlatformPC }, - { "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", EN_ANY, kPlatformFMTowns }, - { "da6269b18fcb08189c0aa9c95533cce2", "monkey", IT_ITA, kPlatformPC }, - { "da669b20271b85182e9c17a2a37ea02e", "monkey2", DE_DEU, kPlatformAmiga }, - { "dd30a53035393baa5a5e222e716559af", "maniac", FR_FRA, kPlatformAtariST }, - { "de4efb910210736813c9a1185384bace", "zoodemo", EN_ANY, kPlatformWindows }, - { "debe337f73d660e951ece7c1f1c81add", "zak", EN_ANY, kPlatformPC }, - { "defb8cb9ec4b0f91acfb6b61c6129ad9", "PuttTime", RU_RUS, kPlatformWindows }, - { "df03ee021aa9b81d90cab9c26da07614", "indy3EGA", IT_ITA, kPlatformAmiga }, - { "df047cc4792150f601290357566d36a6", "freddi", EN_ANY, kPlatformUnknown }, - { "e01acc8c12ef44e8f778fe87e5f90f4e", "fbpack", EN_ANY, kPlatformUnknown }, - { "e144f5f49d9241d2a9dee2576b3d09cb", "airdemo", EN_ANY, kPlatformWindows }, - { "e17db1ddf91b39ca6bbc8ad3ed19e883", "monkey", JA_JPN, kPlatformFMTowns }, - { "e246e02db9630533a40d99c9f54a8e01", "monkey2", EN_ANY, kPlatformMacintosh }, - { "e361a7058ed8e8ebb462663c0a3ae8d6", "puttputt", HB_ISR, kPlatformPC }, - { "e41de1c2a15abbcdbf9977e2d7e8a340", "freddi2", RU_RUS, kPlatformWindows }, - { "e534d29afb3c6e0ee9dc3d53c5956714", "atlantis", DE_DEU, kPlatformAmiga }, - { "e63a0b9249b5ca4cc4d3ac34305ae360", "freddi", NB_NOR, kPlatformWindows }, - { "e689bdf67f98b1d760ce4487ec0e8d06", "indy3EGA", FR_FRA, kPlatformAmiga }, - { "e6cd81b25ab1453a8a6d3482118c391e", "pass", EN_ANY, kPlatformPC }, - { "e72bb4c2b613db2cf50f89ff6350e70a", "ft", ES_ESP, kPlatformUnknown }, - { "e781230da44a44e2f0770edb2b3b3633", "maniac", EN_ANY, kPlatformAmiga }, - { "e94c7cc3686fce406d3c91b5eae5a72d", "zak", EN_ANY, kPlatformAmiga }, - { "eae95b2b3546d8ba86ae1d397c383253", "dog", EN_ANY, kPlatformUnknown }, - { "ebd0b2c8a387f18887282afe6cad894a", "sf3-demo", EN_ANY, kPlatformUnknown }, - { "ebd324dcf06a4c49e1ba5c231eee1060", "f4-demo", EN_ANY, kPlatformUnknown }, - { "ed361270102e355afe5236954216aba2", "lost", EN_ANY, kPlatformUnknown }, - { "edfdb24a499d92c59f824c52987c0eec", "atlantis", FR_FRA, kPlatformPC }, - { "ef347474f3c7be3b29584eaa133cca05", "samnmax", FR_FRA, kPlatformPC }, - { "ef74d9071d4e564b037cb44bd6774de7", "fbear", HB_ISR, kPlatformPC }, - { "efe0a04a703e765ebebe92b6c8aa6b86", "baseball2003", EN_ANY, kPlatformWindows }, - { "f049e38c1f8302b5db6170f1872af89a", "monkey", ES_ESP, kPlatformPC }, - { "f06e66fd45b2f8b0f4a2833ff4476050", "fbpack", HB_ISR, kPlatformPC }, - { "f08145577e4f13584cc90b3d6e9caa55", "pj3-demo", NL_NLD, kPlatformUnknown }, - { "f237bf8a5ef9af78b2a6a4f3901da341", "pjs-demo", EN_ANY, kPlatformUnknown }, - { "f27b1ba0eadaf2a6617b2b58192d1dbf", "samnmax", DE_DEU, kPlatformPC }, - { "f3d55aea441e260e9e9c7d2a187097e0", "zoodemo", EN_ANY, kPlatformWindows }, - { "f40a7f495f59188ca57a9d1d50301bb6", "puttdemo", EN_ANY, kPlatformMacintosh }, - { "f7711f9264d4d43c2a1518ec7c10a607", "pajama3", EN_ANY, kPlatformWindows }, - { "f79e60c17cca601e411f1f75e8ee9b5a", "spyfox2", EN_ANY, kPlatformUnknown }, - { "fa127d7c4bb47d05bb1c33ddcaa9f767", "loom", DE_DEU, kPlatformPC }, - { "fb66aa42de21675116346213f176a366", "monkeyvga", IT_ITA, kPlatformAmiga }, - { "fbbbb38a81fc9d6a61d509278390a290", "farm", EN_ANY, kPlatformMacintosh }, - { "fbdd947d21e8f5bac6d6f7a316af1c5a", "spydemo", EN_ANY, kPlatformUnknown }, - { "fc53ce0e5f6562b1c1e1b4b8203acafb", "samnmax", ES_ESP, kPlatformPC }, - { "fc6b6148e80d67939d9a18697c0f626a", "monkeyega", DE_DEU, kPlatformPC }, - { "fc8d197a22146e74766e9cb0cfcaf1da", "ff2-demo", EN_ANY, kPlatformUnknown }, - { "fcb78ebecab2757264c590890c319cc5", "PuttTime", NL_NLD, kPlatformWindows }, - { "fe381e45117878b1e942cb876b050fd6", "ft", EN_ANY, kPlatformMacintosh }, - { "fe60d6b5ff51b0553ac59963123b5777", "comi", UNK_LANG, kPlatformUnknown }, - { 0, 0, UNK_LANG, kPlatformUnknown } -}; - - writeRecord(md5table, sizeof(md5table), GBVARS_MD5TABLE_INDEX , GBVARS_SCUMM); -} - -void addScummTables() { - addScumm_mdtable(); -} diff --git a/backends/PalmOS/Src/builder/scumm/bl_newgui.c b/backends/PalmOS/Src/builder/scumm/bl_newgui.c deleted file mode 100644 index 528bcf5b25..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_newgui.c +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include "b_globals.h" - -typedef unsigned short bitmap_t; -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -static void addNewGui_guifont() { - UInt8 guifont[] = { -0,0,99,1,226,8,4,8,6,8,6,0,0,0,0,0,0,0,0,0,0,0,8,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,4,3,7,8,7,7,8,4,5,5,8,7,4,7,3,8,7,7,7,7,8,7,7,7,7,7,3,4,7,5,7,7,8,7,7,7,7,7,7,7,7,5,7,7, -7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,7,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0, -0,0,0,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,7,0,0,0,0,0,0,0,0,1,3,6,12, -24,62,3,0,128,192,96,48,24,124,192,0,0,3,62,24,12,6,3,1,0,192,124,24,48,96,192,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,74,72,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,60,66,153,161,161,153,66,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,96,96,96,96,0,0,96,0,102,102,102,0,0,0,0,0,102,102,255,102,255,102,102,0,24,62,96,60,6,124,24,0,98,102,12,24,48,102,70,0,60,102,60,56,103,102,63,0,96,48,16,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0, -0,102,60,255,60,102,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0,48,48,96,0,0,0,126,0,0,0,0,0,0,0,0,0,96,96,0,0,3,6,12,24,48,96,0,60,102,102,102,102,102,60,0,24,24,56,24,24,24,126,0,60,102,6,12,48,96,126,0,60,102,6,28,6,102,60,0,6, -14,30,102,127,6,6,0,126,96,124,6,6,102,60,0,60,102,96,124,102,102,60,0,126,102,12,24,24,24,24,0,60,102,102,60,102,102,60,0,60,102,102,62,6,102,60,0,0,0,96,0,0,96,0,0,0,0,48,0,0,48,48,96,14,24,48,96,48,24,14,0,0,0,120,0,120,0,0,0,112,24, -12,6,12,24,112,0,60,102,6,12,24,0,24,0,0,0,0,255,255,0,0,0,24,60,102,126,102,102,102,0,124,102,102,124,102,102,124,0,60,102,96,96,96,102,60,0,120,108,102,102,102,108,120,0,126,96,96,120,96,96,126,0,126,96,96,120,96,96,96,0,60,102,96,110,102,102,60,0,102,102,102, -126,102,102,102,0,120,48,48,48,48,48,120,0,30,12,12,12,12,108,56,0,102,108,120,112,120,108,102,0,96,96,96,96,96,96,126,0,99,119,127,107,99,99,99,0,102,118,126,126,110,102,102,0,60,102,102,102,102,102,60,0,124,102,102,124,96,96,96,0,60,102,102,102,102,60,14,0,124,102,102,124, -120,108,102,0,60,102,96,60,6,102,60,0,126,24,24,24,24,24,24,0,102,102,102,102,102,102,60,0,102,102,102,102,102,60,24,0,99,99,99,107,127,119,99,0,102,102,60,24,60,102,102,0,102,102,102,60,24,24,24,0,126,6,12,24,48,96,126,0,120,96,96,96,96,96,120,0,3,6,12,24,48, -96,192,0,120,24,24,24,24,24,120,0,0,0,0,0,0,219,219,0,0,0,0,0,0,0,0,255,102,102,102,0,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,14,24,62,24,24, -24,0,0,0,62,102,102,62,6,124,0,96,96,124,102,102,102,0,0,48,0,112,48,48,120,0,0,12,0,12,12,12,12,120,0,96,96,108,120,108,102,0,0,112,48,48,48,48,120,0,0,0,102,127,127,107,99,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96, -96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102,102,102,62,12,120,0,0,126,12,24,48,126,0, -24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,97,153,134,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48, -24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,60,96,96,96,60,24,56,24,36,60,102,126,96,60,0,102,0,60,102,126,96,60,0,48,24,60,102,126,96,60,0,0,216,0,112,48,48,120,0,48,72,0,112,48,48,120,0,96,48,0,112,48,48,120,0,102,24,60,102,126,102,102,0,0,0, -0,0,0,0,0,0,24,48,124,96,120,96,124,0,0,0,108,26,126,216,110,0,30,40,40,126,72,136,142,0,24,36,60,102,102,102,60,0,102,0,60,102,102,102,60,0,48,24,60,102,102,102,60,0,24,36,0,102,102,102,62,0,48,24,102,102,102,102,62,0,0,0,0,0,0,0,0,0,102,60,102, -102,102,102,60,0,102,0,102,102,102,102,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,12,24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,28,54,54,124,102,102,124,64,0,0,0 -}; - writeRecord(guifont, sizeof(guifont), GBVARS_GUIFONT_INDEX, GBVARS_COMMON); -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addNewGui() { - addNewGui_guifont(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_player_v2.c b/backends/PalmOS/Src/builder/scumm/bl_player_v2.c deleted file mode 100644 index 9b2a7b0987..0000000000 --- a/backends/PalmOS/Src/builder/scumm/bl_player_v2.c +++ /dev/null @@ -1,334 +0,0 @@ -#include -#include "b_globals.h" - -static void PlayerV2_note_lengths() { - UInt8 note_lengths[] = { - 0, - 0, 0, 2, - 0, 3, 4, - 5, 6, 8, - 9, 12, 16, - 18, 24, 32, - 36, 48, 64, - 72, 96 - }; - - writeRecord(note_lengths, sizeof(note_lengths), GBVARS_NOTELENGTHS_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_hull_offsets() { - UInt16 hull_offsets[] = { - 0, 12, 24, 36, 48, 60, - 72, 88, 104, 120, 136, 256, - 152, 164, 180 - }; - - writeRecord(hull_offsets, sizeof(hull_offsets), GBVARS_HULLOFFSETS_INDEX , GBVARS_SCUMM); -} - -typedef Int16 int16; - -static void PlayerV2_hulls() { - Int16 hulls[] = { - // hull 0 - 3, -1, 0, 0, 0, 0, 0, 0, - 0, -1, 0, 0, - // hull 1 (staccato) - 3, -1, 0, 32, 0, -1, 0, 0, - 0, -1, 0, 0, - // hull 2 (legato) - 3, -1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - // hull 3 (staccatissimo) - 3, -1, 0, 2, 0, -1, 0, 0, - 0, -1, 0, 0, - // hull 4 - 3, -1, 0, 6, 0, -1, 0, 0, - 0, -1, 0, 0, - // hull 5 - 3, -1, 0, 16, 0, -1, 0, 0, - 0, -1, 0, 0, - // hull 6 - (int16) 60000, -1, -1000, 20, 0, 0, 0, 0, - (int16) 40000, -1, -5000, 5, 0, -1, 0, 0, - // hull 7 - (int16) 50000, -1, 0, 8, 30000, -1, 0, 0, - 28000, -1, -5000, 5, 0, -1, 0, 0, - // hull 8 - (int16) 60000, -1, -2000, 16, 0, 0, 0, 0, - 28000, -1, -6000, 5, 0, -1, 0, 0, - // hull 9 - (int16) 55000, -1, 0, 8, (int16) 35000, -1, 0, 0, - (int16) 40000, -1, -2000, 10, 0, -1, 0, 0, - // hull 10 - (int16) 60000, -1, 0, 4, -2000, 8, 0, 0, - (int16) 40000, -1, -6000, 5, 0, -1, 0, 0, - // hull 12 - 0, -1, 150, 340, -150, 340, 0, -1, - 0, -1, 0, 0, - // hull 13 == 164 - 20000, -1, 4000, 7, 1000, 15, 0, 0, - (int16) 35000, -1, -2000, 15, 0, -1, 0, 0, - - // hull 14 == 180 - (int16) 35000, -1, 500, 20, 0, 0, 0, 0, - (int16) 45000, -1, -500, 60, 0, -1, 0, 0, - - // hull misc = 196 - (int16) 44000, -1, -4400, 10, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 53000, -1, -5300, 10, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 63000, -1, -6300, 10, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 44000, -1, -1375, 32, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 53000, -1, -1656, 32, 0, -1, 0, 0, - 0, -1, 0, 0, - - // hull 11 == 256 - (int16) 63000, -1, -1968, 32, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 44000, -1, - 733, 60, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 53000, -1, - 883, 60, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 63000, -1, -1050, 60, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 44000, -1, - 488, 90, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 53000, -1, - 588, 90, 0, -1, 0, 0, - 0, -1, 0, 0, - - (int16) 63000, -1, - 700, 90, 0, -1, 0, 0, - 0, -1, 0, 0 - }; - - writeRecord(hulls, sizeof(hulls), GBVARS_HULLS_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_freqmod_lengths() { - UInt16 freqmod_lengths[] = { - 0x1000, 0x1000, 0x20, 0x2000, 0x1000 - }; - - writeRecord(freqmod_lengths, sizeof(freqmod_lengths), GBVARS_FREQMODLENGTHS_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_freqmod_offsets() { - UInt16 freqmod_offsets[] = { - 0, 0x100, 0x200, 0x302, 0x202 - }; - - writeRecord(freqmod_offsets, sizeof(freqmod_offsets), GBVARS_FREQMODOFFSETS_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_freqmod_table() { - Int8 freqmod_table[0x502] = { - 0, 3, 6, 9, 12, 15, 18, 21, - 24, 27, 30, 33, 36, 39, 42, 45, - 48, 51, 54, 57, 59, 62, 65, 67, - 70, 73, 75, 78, 80, 82, 85, 87, - 89, 91, 94, 96, 98, 100, 102, 103, - 105, 107, 108, 110, 112, 113, 114, 116, - 117, 118, 119, 120, 121, 122, 123, 123, - 124, 125, 125, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 125, 125, - 124, 123, 123, 122, 121, 120, 119, 118, - 117, 116, 114, 113, 112, 110, 108, 107, - 105, 103, 102, 100, 98, 96, 94, 91, - 89, 87, 85, 82, 80, 78, 75, 73, - 70, 67, 65, 62, 59, 57, 54, 51, - 48, 45, 42, 39, 36, 33, 30, 27, - 24, 21, 18, 15, 12, 9, 6, 3, - 0, -3, -6, -9, -12, -15, -18, -21, - -24, -27, -30, -33, -36, -39, -42, -45, - -48, -51, -54, -57, -59, -62, -65, -67, - -70, -73, -75, -78, -80, -82, -85, -87, - -89, -91, -94, -96, -98,-100,-102,-103, - -105,-107,-108,-110,-112,-113,-114,-116, - -117,-118,-119,-120,-121,-122,-123,-123, - -124,-125,-125,-126,-126,-126,-126,-126, - -126,-126,-126,-126,-126,-126,-125,-125, - -124,-123,-123,-122,-121,-120,-119,-118, - -117,-116,-114,-113,-112,-110,-108,-107, - -105,-103,-102,-100, -98, -96, -94, -91, - -89, -87, -85, -82, -80, -78, -75, -73, - -70, -67, -65, -62, -59, -57, -54, -51, - -48, -45, -42, -39, -36, -33, -30, -27, - -24, -21, -18, -15, -12, -9, -6, -3, - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, - -128,-127,-126,-125,-124,-123,-122,-121, - -120,-119,-118,-117,-116,-115,-114,-113, - -112,-111,-110,-109,-108,-107,-106,-105, - -104,-103,-102,-101,-100, -99, -98, -97, - -96, -95, -94, -93, -92, -91, -90, -89, - -88, -87, -86, -85, -84, -83, -82, -81, - -80, -79, -78, -77, -76, -75, -74, -73, - -72, -71, -70, -69, -68, -67, -66, -65, - -64, -63, -62, -61, -60, -59, -58, -57, - -56, -55, -54, -53, -52, -51, -50, -49, - -48, -47, -46, -45, -44, -43, -42, -41, - -40, -39, -38, -37, -36, -35, -34, -33, - -32, -31, -30, -29, -28, -27, -26, -25, - -24, -23, -22, -21, -20, -19, -18, -17, - -16, -15, -14, -13, -12, -11, -10, -9, - -8, -7, -6, -5, -4, -3, -2, -1, - - -120, 120, - - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - -120,-120,-120,-120,-120,-120,-120,-120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, - - 41, 35, -66,-124, -31, 108, -42, -82, - 82,-112, 73, -15, -15, -69, -23, -21, - -77, -90, -37, 60,-121, 12, 62,-103, - 36, 94, 13, 28, 6, -73, 71, -34, - -77, 18, 77, -56, 67, -69,-117, -90, - 31, 3, 90, 125, 9, 56, 37, 31, - 93, -44, -53, -4,-106, -11, 69, 59, - 19, 13,-119, 10, 28, -37, -82, 50, - 32,-102, 80, -18, 64, 120, 54, -3, - 18, 73, 50, -10, -98, 125, 73, -36, - -83, 79, 20, -14, 68, 64, 102, -48, - 107, -60, 48, -73, 50, 59, -95, 34, - -10, 34,-111, -99, -31,-117, 31, -38, - -80, -54,-103, 2, -71, 114, -99, 73, - 44,-128, 126, -59,-103, -43, -23,-128, - -78, -22, -55, -52, 83, -65, 103, -42, - -65, 20, -42, 126, 45, -36,-114, 102, - -125, -17, 87, 73, 97, -1, 105,-113, - 97, -51, -47, 30, -99,-100, 22, 114, - 114, -26, 29, -16,-124, 79, 74, 119, - 2, -41, -24, 57, 44, 83, -53, -55, - 18, 30, 51, 116, -98, 12, -12, -43, - -44, -97, -44, -92, 89, 126, 53, -49, - 50, 34, -12, -52, -49, -45,-112, 45, - 72, -45,-113, 117, -26, -39, 29, 42, - -27, -64, -9, 43, 120,-127,-121, 68, - 14, 95, 80, 0, -44, 97,-115, -66, - 123, 5, 21, 7, 59, 51,-126, 31, - 24, 112,-110, -38, 100, 84, -50, -79, - -123, 62, 105, 21, -8, 70, 106, 4, - -106, 115, 14, -39, 22, 47, 103, 104, - -44, -9, 74, 74, -48, 87, 104, 118, - -6, 22, -69, 17, -83, -82, 36,-120, - 121, -2, 82, -37, 37, 67, -27, 60, - -12, 69, -45, -40, 40, -50, 11, -11, - -59, 96, 89, 61,-105, 39,-118, 89, - 118, 45, -48, -62, -55, -51, 104, -44, - 73, 106, 121, 37, 8, 97, 64, 20, - -79, 59, 106, -91, 17, 40, -63,-116, - -42, -87, 11,-121,-105,-116, 47, -15, - 21, 29,-102,-107, -63,-101, -31, -64, - 126, -23, -88,-102, -89,-122, -62, -75, - 84, -65,-102, -25, -39, 35, -47, 85, - -112, 56, 40, -47, -39, 108, -95, 102, - 94, 78, -31, 48,-100, -2, -39, 113, - -97, -30, -91, -30, 12,-101, -76, 71, - 101, 56, 42, 70,-119, -87,-126, 121, - 122, 118, 120, -62, 99, -79, 38, -33, - -38, 41, 109, 62, 98, -32,-106, 18, - 52, -65, 57, -90, 63,-119, 94, -15, - 109, 14, -29, 108, 40, -95, 30, 32, - 29, -53, -62, 3, 63, 65, 7,-124, - 15, 20, 5, 101, 27, 40, 97, -55, - -59, -25, 44,-114, 70, 54, 8, -36, - -13, -88,-115, -2, -66, -14, -21, 113, - -1, -96, -48, 59, 117, 6,-116, 126, - -121, 120, 115, 77, -48, -66,-126, -66, - -37, -62, 70, 65, 43,-116, -6, 48, - 127, 112, -16, -89, 84,-122, 50,-107, - -86, 91, 104, 19, 11, -26, -4, -11, - -54, -66, 125, -97,-119,-118, 65, 27, - -3, -72, 79, 104, -10, 114, 123, 20, - -103, -51, -45, 13, -16, 68, 58, -76, - -90, 102, 83, 51, 11, -53, -95, 16 -}; - - writeRecord(freqmod_table, sizeof(freqmod_table), GBVARS_FREQMODTABLE_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_spk_freq_table() { - UInt16 spk_freq_table[12] = { - 36484, 34436, 32503, 30679, 28957, 27332, - 25798, 24350, 22983, 21693, 20476, 19326 -}; - - writeRecord(spk_freq_table, sizeof(spk_freq_table), GBVARS_SPKFREQTABLE_INDEX , GBVARS_SCUMM); -} - -static void PlayerV2_pcjr_freq_table() { - UInt16 pcjr_freq_table[12] = { - 65472, 61760, 58304, 55040, 52032, 49024, - 46272, 43648, 41216, 38912, 36736, 34624 -}; - - writeRecord(pcjr_freq_table, sizeof(pcjr_freq_table), GBVARS_PCJRFREQTABLE_INDEX , GBVARS_SCUMM); -} - -void addPlayerV2() { - PlayerV2_note_lengths(); - PlayerV2_hull_offsets(); - PlayerV2_hulls(); - PlayerV2_freqmod_lengths(); - PlayerV2_freqmod_offsets(); - PlayerV2_freqmod_table(); - PlayerV2_spk_freq_table(); - PlayerV2_pcjr_freq_table(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/bl_scumm.c b/backends/PalmOS/Src/builder/scumm/bl_scumm.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c b/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c deleted file mode 100644 index 635bba344f..0000000000 --- a/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "b_globals.h" - -static void addDimuseCodecs_imcTable() { - Int16 imcTable[] = { - 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011, - 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D, - 0x0032, 0x0037, 0x003C, 0x0042, 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, - 0x0082, 0x008F, 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133, - 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292, 0x02D4, 0x031C, - 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583, 0x0610, 0x06AB, 0x0756, 0x0812, - 0x08E0, 0x09C3, 0x0ABD, 0x0BD0, 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE, - 0x1706, 0x1954, 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B, - 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF -}; - writeRecord(imcTable, sizeof(imcTable), GBVARS_IMCTABLE_INDEX , GBVARS_SCUMM); -} - -void addDimuseCodecs() { - addDimuseCodecs_imcTable(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c b/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c deleted file mode 100644 index 1614932343..0000000000 --- a/backends/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c +++ /dev/null @@ -1,921 +0,0 @@ -#include -#include "b_globals.h" -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -typedef Int16 int16; -typedef Int8 int8; -typedef unsigned char byte; - -typedef struct { - int8 roomId; - byte musicTableIndex; - byte unk1; - byte unk2; - byte unk3; - byte unk4; -} imuseRoomMap; - - -typedef struct { - byte opcode; - int16 soundId; - char name[20]; - byte param; - byte hookId; - char filename[13]; -} imuseDigTable; - -typedef struct { - byte opcode; - int16 soundId; - char name[20]; - byte param; - byte hookId; - int16 fadeDelay; - char filename[13]; -} imuseComiTable; - - - -typedef struct { - char audioName[9]; - byte opcode; - byte volume; - char name[21]; -} imuseFtStateTable; - -typedef struct { - char audioName[9]; - byte opcode; - byte volume; -} imuseFtSeqTable; - -typedef struct { - char name[20]; -} imuseFtNames; -/////////////////////////////////////////////////////////////////// - -static void addDimuseTables_digStateMusicMap() { - imuseRoomMap _digStateMusicMap[] = { - {0, 0, 0, 0, 0, 0 }, - {1, 0, 0, 0, 0, 0 }, - {2, 2, 0, 0, 0, 0 }, - {4, 3, 0, 0, 0, 0 }, - {5, 3, 0, 0, 0, 0 }, - {6, 3, 0, 0, 0, 0 }, - {7, 3, 0, 0, 0, 0 }, - {8, 4, 0, 0, 0, 0 }, - {9, 5, 0, 0, 0, 0 }, - {10, 4, 0, 0, 0, 0 }, - {12, 5, 0, 0, 0, 0 }, - {14, 5, 0, 0, 0, 0 }, - {15, 6, 29, 7, 0, 0 }, - {16, 8, 0, 0, 0, 0 }, - {17, 1, 0, 0, 0, 0 }, - {18, 9, 0, 0, 0, 0 }, - {19, 9, 0, 0, 0, 0 }, - {20, 6, 0, 0, 0, 0 }, - {21, 6, 0, 0, 0, 0 }, - {22, 44, 0, 0, 0, 0 }, - {23, 10, 7, 0, 0, 0 }, - {24, 26, 0, 0, 0, 0 }, - {25, 17, 0, 0, 0, 0 }, - {26, 17, 0, 0, 0, 0 }, - {27, 18, 0, 0, 0, 0 }, - {28, 1, 0, 0, 0, 0 }, - {29, 20, 0, 0, 0, 0 }, - {30, 22, 0, 0, 0, 0 }, - {31, 23, 0, 0, 0, 0 }, - {32, 22, 0, 0, 0, 0 }, - {33, 26, 0, 0, 0, 0 }, - {34, 24, 0, 0, 0, 0 }, - {35, 1, 0, 0, 0, 0 }, - {36, 1, 0, 0, 0, 0 }, - {37, 42, 0, 0, 0, 0 }, - {38, 43, 0, 0, 0, 0 }, - {39, 44, 0, 0, 0, 0 }, - {40, 1, 0, 0, 0, 0 }, - {41, 43, 0, 0, 0, 0 }, - {42, 44, 0, 0, 0, 0 }, - {43, 43, 0, 0, 0, 0 }, - {44, 45, 117,45, 114,46}, - {47, 1, 0, 0, 0, 0 }, - {48, 43, 0, 0, 0, 0 }, - {49, 44, 0, 0, 0, 0 }, - {51, 1, 0, 0, 0, 0 }, - {53, 28, 0, 0, 0, 0 }, - {54, 28, 0, 0, 0, 0 }, - {55, 29, 0, 0, 0, 0 }, - {56, 29, 0, 0, 0, 0 }, - {57, 29, 0, 0, 0, 0 }, - {58, 31, 0, 0, 0, 0 }, - {59, 1, 0, 0, 0, 0 }, - {60, 37, 0, 0, 0, 0 }, - {61, 39, 0, 0, 0, 0 }, - {62, 38, 0, 0, 0, 0 }, - {63, 39, 0, 0, 0, 0 }, - {64, 39, 0, 0, 0, 0 }, - {65, 40, 0, 0, 0, 0 }, - {67, 40, 0, 0, 0, 0 }, - {68, 39, 0, 0, 0, 0 }, - {69, 1, 0, 0, 0, 0 }, - {70, 49, 0, 0, 0, 0 }, - {73, 50, 0, 0, 0, 0 }, - {75, 51, 0, 0, 0, 0 }, - {76, 1, 0, 0, 0, 0 }, - {77, 52, 7, 0, 0, 0 }, - {78, 63, 0, 0, 0, 0 }, - {79, 1, 0, 0, 0, 0 }, - {82, 21, 0, 0, 0, 0 }, - {85, 1, 0, 0, 0, 0 }, - {86, 0, 0, 0, 0, 0 }, - {89, 33, 6, 35, 5, 34}, - {90, 16, 0, 0, 0, 0 }, - {91, 57, 0, 0, 0, 0 }, - {88, 32, 0, 0, 0, 0 }, - {92, 25, 0, 0, 0, 0 }, - {93, 0, 0, 0, 0, 0 }, - {95, 19, 0, 0, 0, 0 }, - {80, 41, 0, 0, 0, 0 }, - {81, 48, 0, 0, 0, 0 }, - {83, 27, 0, 0, 0, 0 }, - {94, 36, 0, 0, 0, 0 }, - {40, 1, 0, 0, 0, 0 }, - {96, 13, 0, 0, 0, 0 }, - {97, 14, 0, 0, 0, 0 }, - {98, 11, 0, 0, 0, 0 }, - {99, 15, 0, 0, 0, 0 }, - {100, 17, 0, 0, 0, 0 }, - {101, 38, 0, 0, 0, 0 }, - {103, 0, 0, 0, 0, 0 }, - {104, 0, 0, 0, 0, 0 }, - {11, 44, 0, 0, 0, 0 }, - {3, 47, 0, 0, 0, 0 }, - {105, 30, 128,29, 0, 0 }, - {106, 0, 0, 0, 0, 0 }, - {107, 1, 0, 0, 0, 0 }, - {108, 1, 0, 0, 0, 0 }, - {47, 1, 0, 0, 0, 0 }, - {50, 1, 0, 0, 0, 0 }, - {52, 0, 0, 0, 0, 0 }, - {71, 1, 0, 0, 0, 0 }, - {13, 1, 0, 0, 0, 0 }, - {72, 1, 0, 0, 0, 0 }, - {46, 33, 6, 35, 5, 34}, - {74, 1, 0, 0, 0, 0 }, - {84, 1, 0, 0, 0, 0 }, - {66, 1, 0, 0, 0, 0 }, - {102, 1, 0, 0, 0, 0 }, - {109, 1, 0, 0, 0, 0 }, - {110, 2, 0, 0, 0, 0 }, - {45, 1, 0, 0, 0, 0 }, - {87, 1, 0, 0, 0, 0 }, - {111, 1, 0, 0, 0, 0 }, - {-1, 1, 0, 0, 0, 0 } -}; - writeRecord(_digStateMusicMap, sizeof(_digStateMusicMap), GBVARS_DIGSTATEMUSICMAP_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_digStateMusicTable() { - imuseDigTable _digStateMusicTable[] = { - {0, 1000, "STATE_NULL", 0, 0, ""}, /* 00 */ - {0, 1001, "stateNoChange", 0, 0, ""}, /* 01 */ - {3, 1100, "stateAstShip", 2, 0, "ASTERO~1.IMU"}, /* 02 */ - {3, 1120, "stateAstClose", 2, 0, "ASTERO~2.IMU"}, /* 03 */ - {3, 1140, "stateAstInside", 0, 0, "ASTERO~3.IMU"}, /* 04 */ - {3, 1150, "stateAstCore", 0, 2, "ASTERO~4.IMU"}, /* 05 */ - {3, 1200, "stateCanyonClose", 0, 1, "CANYON~1.IMU"}, /* 06 */ - {3, 1205, "stateCanyonClose_m", 0, 0, "CANYON~2.IMU"}, /* 07 */ - {3, 1210, "stateCanyonOver", 0, 1, "CANYON~3.IMU"}, /* 08 */ - {3, 1220, "stateCanyonWreck", 0, 1, "CANYON~4.IMU"}, /* 09 */ - {3, 1300, "stateNexusCanyon", 10, 0, "NEXUS(~1.IMU"}, /* 10 */ - {3, 1310, "stateNexusPlan", 10, 0, "NEXUS(~1.IMU"}, /* 11 */ - {3, 1320, "stateNexusRamp", 10, 0, "NEXUS(~2.IMU"}, /* 12 */ - {3, 1330, "stateNexusMuseum", 10, 0, "NEXUS(~3.IMU"}, /* 13 */ - {3, 1340, "stateNexusMap", 10, 0, "NEXUS(~4.IMU"}, /* 14 */ - {3, 1350, "stateNexusTomb", 10, 0, "NE3706~5.IMU"}, /* 15 */ - {3, 1360, "stateNexusCath", 10, 0, "NE3305~5.IMU"}, /* 16 */ - {3, 1370, "stateNexusAirlock", 0, 0, "NE2D3A~5.IMU"}, /* 17 */ - {3, 1380, "stateNexusPowerOff", 0, 1, "NE8522~5.IMU"}, /* 18 */ - {3, 1400, "stateMuseumTramNear", 0, 1, "TRAM(M~1.IMU"}, /* 19 */ - {3, 1410, "stateMuseumTramFar", 0, 0, "TRAM(M~2.IMU"}, /* 20 */ - {3, 1420, "stateMuseumLockup", 0, 0, "MUSEUM~1.IMU"}, /* 21 */ - {3, 1433, "stateMuseumPool", 22, 1, "MUSEUM~2.IMU"}, /* 22 */ - {3, 1436, "stateMuseumSpire", 22, 2, "MUSEUM~3.IMU"}, /* 23 */ - {3, 1440, "stateMuseumMuseum", 22, 2, "MUSEUM~4.IMU"}, /* 24 */ - {3, 1450, "stateMuseumLibrary", 0, 0, "MUB575~5.IMU"}, /* 25 */ - {3, 1460, "stateMuseumCavern", 0, 0, "MUF9BE~5.IMU"}, /* 26 */ - {3, 1500, "stateTombTramNear", 0, 1, "TRAM(T~1.IMU"}, /* 27 */ - {3, 1510, "stateTombBase", 28, 2, "TOMB(A~1.IMU"}, /* 28 */ - {3, 1520, "stateTombSpire", 28, 2, "TOMB(A~2.IMU"}, /* 29 */ - {3, 1530, "stateTombCave", 28, 2, "TOMB(A~3.IMU"}, /* 30 */ - {3, 1540, "stateTombCrypt", 31, 1, "TOMB(C~1.IMU"}, /* 31 */ - {3, 1550, "stateTombGuards", 31, 1, "TOMB(C~2.IMU"}, /* 32 */ - {3, 1560, "stateTombInner", 0, 1, "TOMB(I~1.IMU"}, /* 33 */ - {3, 1570, "stateTombCreator1", 0, 0, "TOMB(C~3.IMU"}, /* 34 */ - {3, 1580, "stateTombCreator2", 0, 0, "TOMB(C~4.IMU"}, /* 35 */ - {3, 1600, "statePlanTramNear", 0, 1, "TRAM(P~1.IMU"}, /* 36 */ - {3, 1610, "statePlanTramFar", 0, 0, "TRAM(P~2.IMU"}, /* 37 */ - {3, 1620, "statePlanBase", 38, 2, "PLAN(A~1.IMU"}, /* 38 */ - {3, 1630, "statePlanSpire", 38, 2, "PLAN(A~2.IMU"}, /* 39 */ - {3, 1650, "statePlanDome", 0, 0, "PLAN(D~1.IMU"}, /* 40 */ - {3, 1700, "stateMapTramNear", 0, 1, "TRAM(M~3.IMU"}, /* 41 */ - {3, 1710, "stateMapTramFar", 0, 0, "TRAM(M~4.IMU"}, /* 42 */ - {3, 1720, "stateMapCanyon", 43, 2, "MAP(AM~1.IMU"}, /* 43 */ - {3, 1730, "stateMapExposed", 43, 2, "MAP(AM~2.IMU"}, /* 44 */ - {3, 1750, "stateMapNestEmpty", 43, 2, "MAP(AM~4.IMU"}, /* 45 */ - {3, 1760, "stateMapNestMonster", 0, 0, "MAP(MO~1.IMU"}, /* 46 */ - {3, 1770, "stateMapKlein", 0, 0, "MAP(KL~1.IMU"}, /* 47 */ - {3, 1800, "stateCathTramNear", 0, 1, "TRAM(C~1.IMU"}, /* 48 */ - {3, 1810, "stateCathTramFar", 0, 0, "TRAM(C~2.IMU"}, /* 49 */ - {3, 1820, "stateCathLab", 50, 1, "CATH(A~1.IMU"}, /* 50 */ - {3, 1830, "stateCathOutside", 50, 1, "CATH(A~2.IMU"}, /* 51 */ - {3, 1900, "stateWorldMuseum", 52, 0, "WORLD(~1.IMU"}, /* 52 */ - {3, 1901, "stateWorldPlan", 52, 0, "WORLD(~2.IMU"}, /* 53 */ - {3, 1902, "stateWorldTomb", 52, 0, "WORLD(~3.IMU"}, /* 54 */ - {3, 1903, "stateWorldMap", 52, 0, "WORLD(~4.IMU"}, /* 55 */ - {3, 1904, "stateWorldCath", 52, 0, "WO3227~5.IMU"}, /* 56 */ - {3, 1910, "stateEye1", 0, 0, "EYE1~1.IMU"}, /* 57 */ - {3, 1911, "stateEye2", 0, 0, "EYE2~1.IMU"}, /* 58 */ - {3, 1912, "stateEye3", 0, 0, "EYE3~1.IMU"}, /* 59 */ - {3, 1913, "stateEye4", 0, 0, "EYE4~1.IMU"}, /* 60 */ - {3, 1914, "stateEye5", 0, 0, "EYE5~1.IMU"}, /* 61 */ - {3, 1915, "stateEye6", 0, 0, "EYE6~1.IMU"}, /* 62 */ - {3, 1916, "stateEye7", 0, 0, "EYE7~1.IMU"}, /* 63 */ - {0, -1, "", 0, 0, ""} -}; - - writeRecord(_digStateMusicTable, sizeof(_digStateMusicTable), GBVARS_DIGSTATEMUSICTABLE_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_comiStateMusicTable() { - imuseComiTable _comiStateMusicTable[] = { - {0, 1000, "STATE_NULL", 0, 0, 0, ""}, /* 00 */ - {0, 1001, "stateNoChange", 0, 0, 0, ""}, /* 01 */ - {3, 1098, "stateCredits1", 0, 0, 60, "1098-C~1.IMX"}, /* 02 */ - {3, 1099, "stateMenu", 0, 0, 60, "1099-M~1.IMX"}, /* 03 */ - {3, 1100, "stateHold1", 4, 0, 60, "1100-H~1.IMX"}, /* 04 */ - {3, 1101, "stateWaterline1", 4, 0, 60, "1101-W~1.IMX"}, /* 05 */ - {3, 1102, "stateHold2", 6, 1, 60, "1102-H~1.IMX"}, /* 06 */ - {3, 1103, "stateWaterline2", 6, 0, 60, "1103-W~1.IMX"}, /* 07 */ - {3, 1104, "stateCannon", 0, 0, 60, "1104-C~1.IMX"}, /* 08 */ - {3, 1105, "stateTreasure", 0, 0, 60, "1105-T~1.IMX"}, /* 09 */ - {3, 1200, "stateFortBase", 10, 1, 60, "1200-F~1.IMX"}, /* 10 */ - {3, 1201, "statePreFort", 10, 1, 60, "1201-P~1.IMX"}, /* 11 */ - {3, 1202, "statePreVooOut", 12, 0, 60, "1202-P~1.IMX"}, /* 12 */ - {3, 1203, "statePreVooIn", 12, 0, 60, "1203-P~1.IMX"}, /* 13 */ - {3, 1204, "statePreVooLady", 12, 0, 60, "1204-P~1.IMX"}, /* 14 */ - {3, 1205, "stateVoodooOut", 0, 0, 60, "1205-V~1.IMX"}, /* 15 */ - {3, 1210, "stateVoodooIn", 0, 0, 60, "1210-V~1.IMX"}, /* 16 */ - {12,1212, "stateVoodooInAlt", 0, 1, 42, "1210-V~1.IMX"}, /* 17 */ - {3, 1215, "stateVoodooLady", 0, 0, 60, "1215-V~1.IMX"}, /* 18 */ - {3, 1219, "statePrePlundermap", 0, 0, 60, "1219-P~1.IMX"}, /* 19 */ - {3, 1220, "statePlundermap", 0, 0, 60, "1220-P~1.IMX"}, /* 20 */ - {3, 1222, "statePreCabana", 0, 0, 60, "1222-P~1.IMX"}, /* 21 */ - {3, 1223, "stateCabana", 0, 0, 60, "1223-C~1.IMX"}, /* 22 */ - {3, 1224, "statePostCabana", 23, 0, 60, "1224-P~1.IMX"}, /* 23 */ - {3, 1225, "stateBeachClub", 23, 0, 60, "1225-B~1.IMX"}, /* 24 */ - {3, 1230, "stateCliff", 0, 0, 60, "1230-C~1.IMX"}, /* 25 */ - {3, 1232, "stateBelly", 0, 0, 48, "1232-B~1.IMX"}, /* 26 */ - {3, 1235, "stateQuicksand", 0, 0, 60, "1235-Q~1.IMX"}, /* 27 */ - {3, 1240, "stateDangerBeach", 0, 0, 48, "1240-D~1.IMX"}, /* 28 */ - {12,1241, "stateDangerBeachAlt",0, 2, 48, "1240-D~1.IMX"}, /* 29 */ - {3, 1245, "stateRowBoat", 0, 0, 60, "1245-R~1.IMX"}, /* 30 */ - {3, 1247, "stateAlongside", 0, 0, 48, "1247-A~1.IMX"}, /* 31 */ - {12,1248, "stateAlongsideAlt", 0, 1, 48, "1247-A~1.IMX"}, /* 32 */ - {3, 1250, "stateChimpBoat", 0, 0, 30, "1250-C~1.IMX"}, /* 33 */ - {3, 1255, "stateMrFossey", 0, 0, 48, "1255-M~1.IMX"}, /* 34 */ - {3, 1259, "statePreTown", 0, 0, 60, "1259-P~1.IMX"}, /* 35 */ - {3, 1260, "stateTown", 0, 0, 60, "1260-T~1.IMX"}, /* 36 */ - {3, 1264, "statePreMeadow", 0, 0, 60, "1264-P~1.IMX"}, /* 37 */ - {3, 1265, "stateMeadow", 0, 0, 60, "1265-M~1.IMX"}, /* 38 */ - {3, 1266, "stateMeadowAmb", 0, 0, 60, "1266-M~1.IMX"}, /* 39 */ - {3, 1270, "stateWardrobePre", 40, 0, 60, "1270-W~1.IMX"}, /* 40 */ - {3, 1272, "statePreShow", 40, 0, 60, "1272-P~1.IMX"}, /* 41 */ - {3, 1274, "stateWardrobeShow", 42, 0, 60, "1274-W~1.IMX"}, /* 42 */ - {3, 1276, "stateShow", 42, 0, 60, "1276-S~1.IMX"}, /* 43 */ - {3, 1277, "stateWardrobeJug", 44, 0, 60, "1277-W~1.IMX"}, /* 44 */ - {3, 1278, "stateJuggling", 44, 0, 60, "1278-J~1.IMX"}, /* 45 */ - {3, 1279, "statePostShow", 0, 0, 60, "1279-P~1.IMX"}, /* 46 */ - {3, 1280, "stateChickenShop", 0, 0, 60, "1280-C~1.IMX"}, /* 47 */ - {3, 1285, "stateBarberShop", 48, 0, 60, "1285-B~1.IMX"}, /* 48 */ - {3, 1286, "stateVanHelgen", 48, 0, 60, "1286-V~1.IMX"}, /* 49 */ - {3, 1287, "stateBill", 48, 0, 60, "1287-B~1.IMX"}, /* 50 */ - {3, 1288, "stateHaggis", 48, 0, 60, "1288-H~1.IMX"}, /* 51 */ - {3, 1289, "stateRottingham", 48, 0, 60, "1289-R~1.IMX"}, /* 52 */ - {3, 1305, "stateDeck", 0, 0, 60, "1305-D~1.IMX"}, /* 53 */ - {3, 1310, "stateCombatMap", 0, 0, 60, "1310-C~1.IMX"}, /* 54 */ - {3, 1320, "stateShipCombat", 0, 0, 60, "1320-S~1.IMX"}, /* 55 */ - {3, 1325, "stateSwordfight", 0, 0, 60, "1325-S~1.IMX"}, /* 56 */ - {3, 1327, "stateSwordRott", 0, 0, 60, "1327-S~1.IMX"}, /* 57 */ - {3, 1330, "stateTownEdge", 0, 0, 60, "1330-T~1.IMX"}, /* 58 */ - {3, 1335, "stateSwordLose", 0, 0, 60, "1335-S~1.IMX"}, /* 59 */ - {3, 1340, "stateSwordWin", 0, 0, 60, "1340-S~1.IMX"}, /* 60 */ - {3, 1345, "stateGetMap", 0, 0, 60, "1345-G~1.IMX"}, /* 61 */ - {3, 1400, "stateWreckBeach", 0, 0, 60, "1400-W~1.IMX"}, /* 62 */ - {3, 1405, "stateBloodMap", 63, 0, 60, "1405-B~1.IMX"}, /* 63 */ - {3, 1410, "stateClearing", 0, 0, 60, "1410-C~1.IMX"}, /* 64 */ - {3, 1415, "stateLighthouse", 63, 0, 60, "1415-L~1.IMX"}, /* 65 */ - {3, 1420, "stateVillage", 66, 0, 60, "1420-V~1.IMX"}, /* 66 */ - {3, 1423, "stateVolcano", 66, 0, 60, "1423-V~1.IMX"}, /* 67 */ - {3, 1425, "stateAltar", 66, 0, 60, "1425-A~1.IMX"}, /* 68 */ - {3, 1430, "stateHotelOut", 0, 0, 60, "1430-H~1.IMX"}, /* 69 */ - {3, 1435, "stateHotelBar", 70, 0, 60, "1435-H~1.IMX"}, /* 70 */ - {3, 1440, "stateHotelIn", 70, 0, 60, "1440-H~1.IMX"}, /* 71 */ - {3, 1445, "stateTarotLady", 70, 0, 60, "1445-T~1.IMX"}, /* 72 */ - {3, 1447, "stateGoodsoup", 70, 0, 60, "1447-G~1.IMX"}, /* 73 */ - {3, 1448, "stateGuestRoom", 0, 0, 60, "1448-G~1.IMX"}, /* 74 */ - {3, 1450, "stateWindmill", 63, 0, 60, "1450-W~1.IMX"}, /* 75 */ - {3, 1455, "stateCemetary", 0, 0, 60, "1455-C~1.IMX"}, /* 76 */ - {3, 1460, "stateCrypt", 77, 0, 60, "1460-C~1.IMX"}, /* 77 */ - {3, 1463, "stateGraveDigger", 77, 0, 60, "1463-G~1.IMX"}, /* 78 */ - {3, 1465, "stateMonkey1", 0, 0, 60, "1465-M~1.IMX"}, /* 79 */ - {3, 1475, "stateStanDark", 0, 0, 60, "1475-S~1.IMX"}, /* 80 */ - {3, 1477, "stateStanLight", 0, 0, 60, "1477-S~1.IMX"}, /* 81 */ - {3, 1480, "stateEggBeach", 63, 0, 60, "1480-E~1.IMX"}, /* 82 */ - {3, 1485, "stateSkullIsland", 0, 0, 60, "1485-S~1.IMX"}, /* 83 */ - {3, 1490, "stateSmugglersCave", 0, 0, 60, "1490-S~1.IMX"}, /* 84 */ - {3, 1500, "stateLeChuckTalk", 0, 0, 60, "1500-L~1.IMX"}, /* 85 */ - {3, 1505, "stateCarnival", 0, 0, 60, "1505-C~1.IMX"}, /* 86 */ - {3, 1511, "stateHang", 87, 0, 60, "1511-H~1.IMX"}, /* 87 */ - {3, 1512, "stateRum", 87, 0, 60, "1512-RUM.IMX"}, /* 88 */ - {3, 1513, "stateTorture", 87, 0, 60, "1513-T~1.IMX"}, /* 89 */ - {3, 1514, "stateSnow", 87, 0, 60, "1514-S~1.IMX"}, /* 90 */ - {3, 1515, "stateCredits", 0, 0, 60, "1515-C~1.IMX"}, /* 91 */ - {3, 1520, "stateCarnAmb", 0, 0, 60, "1520-C~1.IMX"}, /* 92 */ - {0, -1, "", 0, 0, 0, ""} -}; - - writeRecord(_comiStateMusicTable, sizeof(_comiStateMusicTable), GBVARS_COMISTATEMUSICTABLE_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_comiSeqMusicTable() { - imuseComiTable _comiSeqMusicTable[] = { - {0, 2000, "SEQ_NULL", 0, 0, 0, ""}, - {0, 2100, "seqINTRO", 0, 0, 0, ""}, - {3, 2105, "seqInterlude1", 0, 0, 60, "2105-I~1.IMX"}, - {8, 2110, "seqLastBoat", 0, 1, 0, ""}, - {0, 2115, "seqSINK_SHIP", 0, 0, 0, ""}, - {0, 2120, "seqCURSED_RING", 0, 0, 60, ""}, - {3, 2200, "seqInterlude2", 0, 0, 60, "2200-I~1.IMX"}, - {3, 2210, "seqKidnapped", 0, 0, 60, "2210-K~1.IMX"}, - {8, 2220, "seqSnakeVomits", 0, 1, 0, ""}, - {8, 2222, "seqPopBalloon", 0, 1, 0, ""}, - {3, 2225, "seqDropBalls", 0, 0, 60, "2225-D~1.IMX"}, - {4, 2232, "seqArriveBarber", 0, 0, 60, "2232-A~1.IMX"}, - {3, 2233, "seqAtonal", 0, 0, 60, "2233-A~1.IMX"}, - {3, 2235, "seqShaveHead1", 0, 0, 60, "2235-S~1.IMX"}, - {2, 2236, "seqShaveHead2", 0, 2, 60, "2235-S~1.IMX"}, - {3, 2245, "seqCaberLose", 0, 0, 60, "2245-C~1.IMX"}, - {3, 2250, "seqCaberWin", 0, 0, 60, "2250-C~1.IMX"}, - {3, 2255, "seqDuel1", 0, 0, 60, "2255-D~1.IMX"}, - {2, 2256, "seqDuel2", 0, 2, 60, "2255-D~1.IMX"}, - {2, 2257, "seqDuel3", 0, 3, 60, "2255-D~1.IMX"}, - {3, 2260, "seqBlowUpTree1", 0, 0, 60, "2260-B~1.IMX"}, - {2, 2261, "seqBlowUpTree2", 0, 2, 60, "2260-B~1.IMX"}, - {3, 2275, "seqMonkeys", 0, 0, 60, "2275-M~1.IMX"}, - {9, 2277, "seqAttack", 0, 1, 0, ""}, - {3, 2285, "seqSharks", 0, 0, 60, "2285-S~1.IMX"}, - {3, 2287, "seqTowelWalk", 0, 0, 60, "2287-T~1.IMX"}, - {0, 2293, "seqNICE_BOOTS", 0, 0, 0, ""}, - {0, 2295, "seqBIG_BONED", 0, 0, 0, ""}, - {3, 2300, "seqToBlood", 0, 0, 60, "2300-T~1.IMX"}, - {3, 2301, "seqInterlude3", 0, 0, 60, "2301-I~1.IMX"}, - {3, 2302, "seqRott1", 0, 0, 60, "2302-R~1.IMX"}, - {2, 2304, "seqRott2", 0, 2, 60, "2302-R~1.IMX"}, - {2, 2305, "seqRott2b", 0,21, 60, "2302-R~1.IMX"}, - {2, 2306, "seqRott3", 0, 3, 60, "2302-R~1.IMX"}, - {2, 2308, "seqRott4", 0, 4, 60, "2302-R~1.IMX"}, - {2, 2309, "seqRott5", 0, 5, 60, "2302-R~1.IMX"}, - {3, 2311, "seqVerse1", 0, 0, 60, "2311-S~1.IMX"}, - {2, 2312, "seqVerse2", 0, 2, 60, "2311-S~1.IMX"}, - {2, 2313, "seqVerse3", 0, 3, 60, "2311-S~1.IMX"}, - {2, 2314, "seqVerse4", 0, 4, 60, "2311-S~1.IMX"}, - {2, 2315, "seqVerse5", 0, 5, 60, "2311-S~1.IMX"}, - {2, 2316, "seqVerse6", 0, 6, 60, "2311-S~1.IMX"}, - {2, 2317, "seqVerse7", 0, 7, 60, "2311-S~1.IMX"}, - {2, 2318, "seqVerse8", 0, 8, 60, "2311-S~1.IMX"}, - {2, 2319, "seqSongEnd", 0, 9, 60, "2311-S~1.IMX"}, - {2, 2336, "seqRiposteLose", 0, 0, 60, "2336-R~1.IMX"}, - {2, 2337, "seqRiposteWin", 0, 0, 60, "2337-R~1.IMX"}, - {2, 2338, "seqInsultLose", 0, 0, 60, "2338-I~1.IMX"}, - {2, 2339, "seqInsultWin", 0, 0, 60, "2339-I~1.IMX"}, - {3, 2340, "seqSwordLose", 0, 0, 60, "1335-S~1.IMX"}, - {3, 2345, "seqSwordWin", 0, 0, 60, "1340-S~1.IMX"}, - {3, 2347, "seqGetMap", 0, 0, 60, "1345-G~1.IMX"}, - {3, 2400, "seqInterlude4", 0, 0, 60, "2400-I~1.IMX"}, - {0, 2405, "seqSHIPWRECK", 0, 0, 0, ""}, - {3, 2408, "seqFakeCredits", 0, 0, 60, "2408-F~1.IMX"}, - {3, 2410, "seqPassOut", 0, 0, 60, "2410-P~1.IMX"}, - {3, 2414, "seqGhostTalk", 0, 0, 60, "2414-G~1.IMX"}, - {2, 2415, "seqGhostWedding", 0, 1, 60, "2414-G~1.IMX"}, - {3, 2420, "seqEruption", 0, 0, 60, "2420-E~1.IMX"}, - {3, 2425, "seqSacrifice", 0, 0, 60, "2425-S~1.IMX"}, - {2, 2426, "seqSacrificeEnd", 0, 1, 60, "2425-S~1.IMX"}, - {3, 2430, "seqScareDigger", 0, 0, 60, "2430-S~1.IMX"}, - {3, 2445, "seqSkullArrive", 0, 0, 60, "2445-S~1.IMX"}, - {3, 2450, "seqFloat", 0, 0, 60, "2450-C~1.IMX"}, - {2, 2451, "seqFall", 0, 1, 60, "2450-C~1.IMX"}, - {2, 2452, "seqUmbrella", 0, 0, 60, "2450-C~1.IMX"}, - {3, 2460, "seqFight", 0, 0, 60, "2460-F~1.IMX"}, - {0, 2465, "seqLAVE_RIDE", 0, 0, 0, ""}, - {0, 2470, "seqMORE_SLAW", 0, 0, 0, ""}, - {0, 2475, "seqLIFT_CURSE", 0, 0, 0, ""}, - {3, 2500, "seqInterlude5", 0, 0, 60, "2500-I~1.IMX"}, - {3, 2502, "seqExitSkycar", 0, 0, 60, "2502-E~1.IMX"}, - {3, 2504, "seqGrow1", 0, 0, 60, "2504-G~1.IMX"}, - {2, 2505, "seqGrow2", 0, 1, 60, "2504-G~1.IMX"}, - {3, 2508, "seqInterlude6", 0, 0, 60, "2508-I~1.IMX"}, - {0, 2515, "seqFINALE", 0, 0, 0, ""}, - {3, 2520, "seqOut", 0, 0, 60, "2520-OUT.IMX"}, - {3, 2530, "seqZap1a", 0, 0, 60, "2530-Z~1.IMX"}, - {2, 2531, "seqZap1b", 0, 1, 60, "2530-Z~1.IMX"}, - {2, 2532, "seqZap1c", 0, 2, 60, "2530-Z~1.IMX"}, - {2, 2540, "seqZap2a", 0, 0, 60, "2540-Z~1.IMX"}, - {2, 2541, "seqZap2b", 0, 1, 60, "2540-Z~1.IMX"}, - {2, 2542, "seqZap2c", 0, 2, 60, "2540-Z~1.IMX"}, - {3, 2550, "seqZap3a", 0, 0, 60, "2550-Z~1.IMX"}, - {2, 2551, "seqZap3b", 0, 1, 60, "2550-Z~1.IMX"}, - {2, 2552, "seqZap3c", 0, 2, 60, "2550-Z~1.IMX"}, - {3, 2560, "seqZap4a", 0, 0, 60, "2560-Z~1.IMX"}, - {2, 2561, "seqZap4b", 0, 1, 60, "2560-Z~1.IMX"}, - {2, 2562, "seqZap4c", 0, 2, 60, "2560-Z~1.IMX"}, - {0, -1, "", 0, 0, 0, ""} -}; - - writeRecord(_comiSeqMusicTable, sizeof(_comiSeqMusicTable), GBVARS_COMISEQMUSICTABLE_INDEX ,GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_digSeqMusicTable() { - - imuseDigTable _digSeqMusicTable[] = { - {0, 2000, "SEQ_NULL", 0, 0, ""}, - {0, 2005, "seqLogo", 0, 0, ""}, - {0, 2010, "seqIntro", 0, 0, ""}, - {6, 2020, "seqExplosion1b", 0, 0, ""}, - {3, 2030, "seqAstTunnel1a", 0, 0, "SEQ(AS~1.IMU"}, - {6, 2031, "seqAstTunnel2b", 0, 0, ""}, - {4, 2032, "seqAstTunnel3a", 0, 0, "SEQ(AS~2.IMU"}, - {5, 2040, "seqToPlanet1b", 0, 0, ""}, - {4, 2045, "seqArgBegin", 0, 0, "SEQ(AR~1.IMU"}, - {4, 2046, "seqArgEnd", 0, 0, "SEQ(AR~2.IMU"}, - {4, 2050, "seqWreckGhost", 0, 0, "SEQ(GH~1.IMU"}, - {4, 2060, "seqCanyonGhost", 0, 0, "SEQ(GH~2.IMU"}, - {0, 2070, "seqBrinkFall", 0, 0, ""}, - {4, 2080, "seqPanUpCanyon", 0, 0, "SEQ(PA~1.IMU"}, - {6, 2091, "seqAirlockTunnel1b", 0, 0, ""}, - {6, 2100, "seqTramToMu", 0, 0, ""}, - {6, 2101, "seqTramFromMu", 0, 0, ""}, - {6, 2102, "seqTramToTomb", 0, 0, ""}, - {6, 2103, "seqTramFromTomb", 0, 0, ""}, - {6, 2104, "seqTramToPlan", 0, 0, ""}, - {6, 2105, "seqTramFromPlan", 0, 0, ""}, - {6, 2106, "seqTramToMap", 0, 0, ""}, - {6, 2107, "seqTramFromMap", 0, 0, ""}, - {6, 2108, "seqTramToCath", 0, 0, ""}, - {6, 2109, "seqTramFromCath", 0, 0, ""}, - {0, 2110, "seqMuseumGhost", 0, 0, ""}, - {0, 2120, "seqSerpentAppears", 0, 0, ""}, - {0, 2130, "seqSerpentEats", 0, 0, ""}, - {6, 2140, "seqBrinkRes1b", 0, 0, ""}, - {4, 2141, "seqBrinkRes2a", 0, 0, "SEQ(BR~1.IMU"}, - {3, 2150, "seqLockupEntry", 0, 0, "SEQ(BR~1.IMU"}, - {0, 2160, "seqSerpentExplodes", 0, 0, ""}, - {4, 2170, "seqSwimUnderwater", 0, 0, "SEQ(DE~1.IMU"}, - {4, 2175, "seqWavesPlunge", 0, 0, "SEQ(PL~1.IMU"}, - {0, 2180, "seqCryptOpens", 0, 0, ""}, - {0, 2190, "seqGuardsFight", 0, 0, ""}, - {3, 2200, "seqCreatorRes1.1a", 0, 0, "SEQ(CR~1.IMU"}, - {6, 2201, "seqCreatorRes1.2b", 0, 0, ""}, - {6, 2210, "seqMaggieCapture1b", 0, 0, ""}, - {3, 2220, "seqStealCrystals", 0, 0, "SEQ(BR~1.IMU"}, - {0, 2230, "seqGetByMonster", 0, 0, ""}, - {6, 2240, "seqKillMonster1b", 0, 0, ""}, - {3, 2250, "seqCreatorRes2.1a", 0, 0, "SEQ(CR~2.IMU"}, - {6, 2251, "seqCreatorRes2.2b", 0, 0, ""}, - {4, 2252, "seqCreatorRes2.3a", 0, 0, "SEQ(CR~3.IMU"}, - {0, 2260, "seqMaggieInsists", 0, 0, ""}, - {0, 2270, "seqBrinkHelpCall", 0, 0, ""}, - {3, 2280, "seqBrinkCrevice1a", 0, 0, "SEQ(BR~2.IMU"}, - {3, 2281, "seqBrinkCrevice2a", 0, 0, "SEQ(BR~3.IMU"}, - {6, 2290, "seqCathAccess1b", 0, 0, ""}, - {4, 2291, "seqCathAccess2a", 0, 0, "SEQ(CA~1.IMU"}, - {3, 2300, "seqBrinkAtGenerator", 0, 0, "SEQ(BR~1.IMU"}, - {6, 2320, "seqFightBrink1b", 0, 0, ""}, - {6, 2340, "seqMaggieDies1b", 0, 0, ""}, - {6, 2346, "seqMaggieRes1b", 0, 0, ""}, - {4, 2347, "seqMaggieRes2a", 0, 0, "SEQ(MA~1.IMU"}, - {0, 2350, "seqCreatureFalls", 0, 0, ""}, - {5, 2360, "seqFinale1b", 0, 0, ""}, - {3, 2370, "seqFinale2a", 0, 0, "SEQ(FI~1.IMU"}, - {6, 2380, "seqFinale3b1", 0, 0, ""}, - {6, 2390, "seqFinale3b2", 0, 0, ""}, - {3, 2400, "seqFinale4a", 0, 0, "SEQ(FI~2.IMU"}, - {3, 2410, "seqFinale5a", 0, 0, "SEQ(FI~3.IMU"}, - {3, 2420, "seqFinale6a", 0, 0, "SEQ(FI~4.IMU"}, - {3, 2430, "seqFinale7a", 0, 0, "SE3D2B~5.IMU"}, - {6, 2440, "seqFinale8b", 0, 0, ""}, - {4, 2450, "seqFinale9a", 0, 0, "SE313B~5.IMU"}, - {0, -1, "", 0, 0, ""} -}; - - writeRecord(_digSeqMusicTable, sizeof(_digSeqMusicTable), GBVARS_DIGSEQMUSICTABLE_INDEX ,GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_ftStateMusicTable() { - - imuseFtStateTable _ftStateMusicTable[] = { - {"", 0, 0, "STATE_NULL" }, - {"", 4, 127, "stateKstandOutside" }, - {"kinside", 2, 127, "stateKstandInside" }, - {"moshop", 3, 64, "stateMoesInside" }, - {"melcut", 2, 127, "stateMoesOutside" }, - {"mellover", 2, 127, "stateMellonAbove" }, - {"radloop", 3, 28, "stateTrailerOutside" }, - {"radloop", 3, 58, "stateTrailerInside" }, - {"radloop", 3, 127, "stateTodShop" }, - {"junkgate", 2, 127, "stateJunkGate" }, - {"junkover", 3, 127, "stateJunkAbove" }, - {"gastower", 2, 127, "stateGasTower" }, - {"", 4, 0, "stateTowerAlarm" }, - {"melcut", 2, 127, "stateCopsOnGround" }, - {"melcut", 2, 127, "stateCopsAround" }, - {"melcut", 2, 127, "stateMoesRuins" }, - {"melcut", 2, 127, "stateKstandNight" }, - {"trukblu2", 2, 127, "stateTruckerTalk" }, - {"stretch", 2, 127, "stateMumblyPeg" }, - {"kstand", 2, 100, "stateRanchOutside" }, - {"kinside", 2, 127, "stateRanchInside" }, - {"desert", 2, 127, "stateWreckedTruck" }, - {"opening", 2, 100, "stateGorgeVista" }, - {"caveopen", 2, 127, "stateCaveOpen" }, - {"cavecut1", 2, 127, "stateCaveOuter" }, - {"cavecut1", 1, 127, "stateCaveMiddle" }, - {"cave", 2, 127, "stateCaveInner" }, - {"corville", 2, 127, "stateCorvilleFront" }, - {"mines", 2, 127, "stateMineField" }, - {"bunyman3", 2, 127, "stateBunnyStore" }, - {"stretch", 2, 127, "stateStretchBen" }, - {"saveme", 2, 127, "stateBenPleas" }, - {"", 4, 0, "stateBenConvinces" }, - {"derby", 3, 127, "stateDemoDerby" }, - {"fire", 3, 127, "stateLightMyFire" }, - {"derby", 3, 127, "stateDerbyChase" }, - {"carparts", 2, 127, "stateVultureCarParts"}, - {"cavecut1", 2, 127, "stateVulturesInside" }, - {"mines", 2, 127, "stateFactoryRear" }, - {"croffice", 2, 127, "stateCorleyOffice" }, - {"melcut", 2, 127, "stateCorleyHall" }, - {"", 4, 0, "stateProjRoom" }, - {"", 4, 0, "stateMMRoom" }, - {"bumper", 2, 127, "stateBenOnBumper" }, - {"benump", 2, 127, "stateBenOnBack" }, - {"plane", 2, 127, "stateInCargoPlane" }, - {"saveme", 2, 127, "statePlaneControls" }, - {"", 4, 0, "stateCliffHanger1" }, - {"", 4, 0, "stateCliffHanger2" }, -}; - - writeRecord(_ftStateMusicTable, sizeof(_ftStateMusicTable), GBVARS_FTSTATEMUSICTABLE_INDEX , GBVARS_SCUMM); -} -/////////////////////////////////////////////////////////////////// -static void addDimuseTables_ftSeqMusicTable() { - - imuseFtSeqTable _ftSeqMusicTable[] = { - {"", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"opening", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"barbeat", 2, 127}, - {"barwarn", 2, 127}, - {"", 0, 0 }, - {"", 0, 0, }, - - {"benwakes", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"barwarn", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"swatben", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"dogattak", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 4, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 4, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"cops2", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"cops2", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"cops2", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"bunymrch", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 4, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 0, 0 }, - {"melcut", 2, 127}, - {"tada", 2, 127}, - {"", 0, 0 }, - - {"", 4, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"trucker", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"cops2", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"barwarn", 2, 127}, - {"murder", 2, 127}, - {"murder2", 2, 127}, - {"", 0, 0 }, - - {"corldie", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"barwarn", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"picture", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"ripintro", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"trucker", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"hosed", 2, 127}, - - {"ripdead", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"nesranch", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"scolding", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"desert", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"cavecut1", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"caveamb", 2, 80 }, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"castle", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"bunymrch", 2, 105}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"valkyrs", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"melcut", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"veltures", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"sorry", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"makeplan", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"castle", 2, 127}, - {"derby", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - - {"fire", 3, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"saveme", 3, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"scolding", 2, 127}, - - {"cops2", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"sorry", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"sorry", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"caveamb", 2, 85 }, - {"tada", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - - {"expose", 2, 127}, - {"", 4, 0 }, - {"", 0, 0 }, - {"mocoup", 2, 127}, - - {"ripscram", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"valkyrs", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"ripdead", 2, 127}, - {"", 0, 0 }, - {"", 0, 0 }, - {"", 0, 0 }, - - {"funeral", 2, 127}, - {"", 2, 127}, - {"moshop", 3, 64 }, - {"", 0, 0 }, - - {"bornbad", 2, 127}, - {"hammvox", 2, 127}, - {"legavox", 2, 127}, - {"chances", 2, 90 }, -}; - writeRecord(_ftSeqMusicTable, sizeof(_ftSeqMusicTable), GBVARS_FTSEQMUSICTABLE_INDEX , GBVARS_SCUMM); -} - -static void addDimuseTables_ftSeqNames() { - imuseFtNames _ftSeqNames[] = { - {"SEQ_NULL" }, - {"seqLogo" }, - {"seqOpenFlick" }, - {"seqBartender" }, - {"seqBenWakes" }, - {"seqPhotoScram" }, - {"seqClimbChain" }, - {"seqDogChase" }, - {"seqDogSquish" }, - {"seqDogHoist" }, - {"seqCopsArrive" }, - {"seqCopsLand" }, - {"seqCopsLeave" }, - {"seqCopterFlyby" }, - {"seqCopterCrash" }, - {"seqMoGetsParts" }, - {"seqMoFixesBike" }, - {"seqFirstGoodbye" }, - {"seqCopRoadblock" }, - {"seqDivertCops" }, - {"seqMurder" }, - {"seqCorleyDies" }, - {"seqTooLateAtMoes" }, - {"seqPicture" }, - {"seqNewsReel" }, - {"seqCopsInspect" }, - {"seqHijack" }, - {"seqNestolusAtRanch" }, - {"seqRipLimo" }, - {"seqGorgeTurn" }, - {"seqCavefishTalk" }, - {"seqArriveCorville" }, - {"seqSingleBunny" }, - {"seqBunnyArmy" }, - {"seqArriveAtMines" }, - {"seqArriveAtVultures"}, - {"seqMakePlan" }, - {"seqShowPlan" }, - {"seqDerbyStart" }, - {"seqLightBales" }, - {"seqNestolusBBQ" }, - {"seqCallSecurity" }, - {"seqFilmFail" }, - {"seqFilmBurn" }, - {"seqRipSpeech" }, - {"seqExposeRip" }, - {"seqRipEscape" }, - {"seqRareMoment" }, - {"seqFanBunnies" }, - {"seqRipDead" }, - {"seqFuneral" }, - {"seqCredits" } -}; - writeRecord(_ftSeqNames, sizeof(_ftSeqNames), GBVARS_FTSEQNAMES_INDEX , GBVARS_SCUMM); -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addDimuseTables() { - addDimuseTables_digStateMusicMap(); - addDimuseTables_digStateMusicTable(); - addDimuseTables_digSeqMusicTable(); - addDimuseTables_comiStateMusicTable(); - addDimuseTables_comiSeqMusicTable(); - addDimuseTables_ftStateMusicTable(); - addDimuseTables_ftSeqMusicTable(); - addDimuseTables_ftSeqNames(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/scumm/smush/bl_codec47.c b/backends/PalmOS/Src/builder/scumm/smush/bl_codec47.c deleted file mode 100644 index 8a3f3e1b99..0000000000 --- a/backends/PalmOS/Src/builder/scumm/smush/bl_codec47.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include "b_globals.h" - -static void addCodec47_codec47_table() { - Int8 codec47_table[] = { - 0, 0, -1, -43, 6, -43, -9, -42, 13, -41, - -16, -40, 19, -39, -23, -36, 26, -34, -2, -33, - 4, -33, -29, -32, -9, -32, 11, -31, -16, -29, - 32, -29, 18, -28, -34, -26, -22, -25, -1, -25, - 3, -25, -7, -24, 8, -24, 24, -23, 36, -23, - -12, -22, 13, -21, -38, -20, 0, -20, -27, -19, - -4, -19, 4, -19, -17, -18, -8, -17, 8, -17, - 18, -17, 28, -17, 39, -17, -12, -15, 12, -15, - -21, -14, -1, -14, 1, -14, -41, -13, -5, -13, - 5, -13, 21, -13, -31, -12, -15, -11, -8, -11, - 8, -11, 15, -11, -2, -10, 1, -10, 31, -10, - -23, -9, -11, -9, -5, -9, 4, -9, 11, -9, - 42, -9, 6, -8, 24, -8, -18, -7, -7, -7, - -3, -7, -1, -7, 2, -7, 18, -7, -43, -6, - -13, -6, -4, -6, 4, -6, 8, -6, -33, -5, - -9, -5, -2, -5, 0, -5, 2, -5, 5, -5, - 13, -5, -25, -4, -6, -4, -3, -4, 3, -4, - 9, -4, -19, -3, -7, -3, -4, -3, -2, -3, - -1, -3, 0, -3, 1, -3, 2, -3, 4, -3, - 6, -3, 33, -3, -14, -2, -10, -2, -5, -2, - -3, -2, -2, -2, -1, -2, 0, -2, 1, -2, - 2, -2, 3, -2, 5, -2, 7, -2, 14, -2, - 19, -2, 25, -2, 43, -2, -7, -1, -3, -1, - -2, -1, -1, -1, 0, -1, 1, -1, 2, -1, - 3, -1, 10, -1, -5, 0, -3, 0, -2, 0, - -1, 0, 1, 0, 2, 0, 3, 0, 5, 0, - 7, 0, -10, 1, -7, 1, -3, 1, -2, 1, - -1, 1, 0, 1, 1, 1, 2, 1, 3, 1, - -43, 2, -25, 2, -19, 2, -14, 2, -5, 2, - -3, 2, -2, 2, -1, 2, 0, 2, 1, 2, - 2, 2, 3, 2, 5, 2, 7, 2, 10, 2, - 14, 2, -33, 3, -6, 3, -4, 3, -2, 3, - -1, 3, 0, 3, 1, 3, 2, 3, 4, 3, - 19, 3, -9, 4, -3, 4, 3, 4, 7, 4, - 25, 4, -13, 5, -5, 5, -2, 5, 0, 5, - 2, 5, 5, 5, 9, 5, 33, 5, -8, 6, - -4, 6, 4, 6, 13, 6, 43, 6, -18, 7, - -2, 7, 0, 7, 2, 7, 7, 7, 18, 7, - -24, 8, -6, 8, -42, 9, -11, 9, -4, 9, - 5, 9, 11, 9, 23, 9, -31, 10, -1, 10, - 2, 10, -15, 11, -8, 11, 8, 11, 15, 11, - 31, 12, -21, 13, -5, 13, 5, 13, 41, 13, - -1, 14, 1, 14, 21, 14, -12, 15, 12, 15, - -39, 17, -28, 17, -18, 17, -8, 17, 8, 17, - 17, 18, -4, 19, 0, 19, 4, 19, 27, 19, - 38, 20, -13, 21, 12, 22, -36, 23, -24, 23, - -8, 24, 7, 24, -3, 25, 1, 25, 22, 25, - 34, 26, -18, 28, -32, 29, 16, 29, -11, 31, - 9, 32, 29, 32, -4, 33, 2, 33, -26, 34, - 23, 36, -19, 39, 16, 40, -13, 41, 9, 42, - -6, 43, 1, 43, 0, 0, 0, 0, 0, 0 -}; - writeRecord(codec47_table, sizeof(codec47_table), GBVARS_CODEC47TABLE_INDEX , GBVARS_SCUMM); -} - -void addCodec47() { - addCodec47_codec47_table(); -} \ No newline at end of file diff --git a/backends/PalmOS/Src/builder/simon/bs_charset.c b/backends/PalmOS/Src/builder/simon/bs_charset.c deleted file mode 100644 index 662884682f..0000000000 --- a/backends/PalmOS/Src/builder/simon/bs_charset.c +++ /dev/null @@ -1,745 +0,0 @@ -#include -#include "b_globals.h" - -static void addCharset_russian_video_font() { - byte russian_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 0, 100, 40, 48, 40, 100, 0, - 0, 0, 96, 48, 40, 40, 112, 0, - 60, 68, 68, 60, 36, 68, 68, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 72, 84, 84, 116, 84, 84, 72, 0, - 0, 0, 60, 68, 60, 36, 100, 0, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 16, 32, 0, 120, 112, 64, 56, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 32, 16, 0, 112, 8, 248, 120, 0, - 0, 0, 96, 48, 40, 40, 112, 0, - 0, 0, 112, 88, 20, 20, 56, 0, - 0, 0, 120, 4, 28, 4, 120, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 0, 0, 84, 84, 84, 84, 56, 4, - 56, 68, 68, 124, 68, 68, 68, 0, - 124, 36, 32, 56, 36, 36, 120, 0, - 120, 36, 36, 56, 36, 36, 120, 0, - 124, 36, 32, 32, 32, 32, 112, 0, - 56, 40, 40, 40, 40, 40, 124, 68, - 124, 36, 32, 56, 32, 36, 124, 0, - 84, 84, 84, 56, 84, 84, 84, 0, - 56, 68, 4, 24, 4, 68, 56, 0, - 68, 68, 76, 84, 100, 68, 68, 0, - 100, 40, 40, 48, 40, 36, 100, 0, - 28, 36, 36, 36, 36, 36, 100, 0, - 68, 108, 84, 68, 68, 68, 68, 0, - 68, 68, 68, 124, 68, 68, 68, 0, - 56, 68, 68, 68, 68, 68, 56, 0, - 124, 68, 68, 68, 68, 68, 68, 0, - 120, 36, 36, 56, 32, 32, 112, 0, - 56, 68, 64, 64, 64, 68, 56, 0, - 124, 84, 16, 16, 16, 16, 56, 0, - 100, 36, 36, 28, 4, 4, 56, 0, - 56, 84, 84, 84, 56, 16, 56, 0, - 108, 40, 16, 16, 40, 40, 108, 0, - 72, 72, 72, 72, 72, 72, 60, 4, - 76, 72, 72, 56, 8, 8, 28, 0, - 84, 84, 84, 84, 84, 84, 60, 0, - 84, 84, 84, 84, 84, 84, 56, 4, - 56, 68, 4, 28, 4, 68, 56, 0, - 0, 0, 68, 100, 84, 84, 100, 0, - 0, 0, 72, 84, 116, 84, 72, 0, - 0, 0, 60, 68, 60, 36, 100, 0, - 0, 0, 120, 4, 24, 4, 120, 0, - 0, 0, 100, 40, 48, 40, 100, 0, - 60, 68, 68, 60, 36, 68, 68, 0, - 0, 0, 56, 4, 60, 68, 60, 0, - 60, 64, 32, 56, 68, 68, 56, 0, - 48, 72, 80, 120, 68, 68, 56, 0, - 0, 0, 120, 4, 56, 64, 60, 0, - 56, 4, 4, 60, 68, 68, 56, 0, - 0, 0, 56, 68, 120, 64, 56, 0, - 40, 0, 56, 68, 120, 64, 56, 0, - 0, 0, 84, 84, 56, 84, 84, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 0, 0, 68, 68, 68, 68, 60, 0, - 56, 0, 68, 68, 68, 68, 60, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 28, 36, 36, 36, 100, 0, - 0, 0, 68, 108, 84, 68, 68, 0, - 0, 0, 56, 68, 68, 68, 56, 0, - 0, 0, 68, 68, 124, 68, 68, 0, - 0, 0, 124, 68, 68, 68, 68, 0, - 0, 0, 120, 36, 36, 56, 32, 112, - 0, 0, 60, 64, 64, 64, 60, 0, - 0, 0, 124, 84, 16, 16, 56, 0, - 0, 0, 68, 68, 60, 4, 56, 0, - 48, 16, 56, 84, 84, 56, 16, 56, - 0, 0, 68, 40, 16, 40, 68, 0, - 0, 0, 72, 72, 72, 72, 60, 4, - 0, 0, 76, 72, 72, 56, 8, 28, - 0, 0, 84, 84, 84, 84, 60, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(russian_video_font, sizeof(russian_video_font), GBVARS_RUSSIANVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_french_video_font() { - byte french_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 32, 80, 0, 112, 136, 136, 112, 0, - 32, 80, 0, 112, 8, 248, 120, 0, - 112, 136, 128, 128, 136, 112, 32, 96, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 112, 136, 128, 128, 136, 112, 32, 96, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 32, 64, 0, 112, 248, 128, 112, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 32, 16, 0, 112, 8, 248, 120, 0, - 32, 80, 0, 144, 144, 144, 104, 0, - 32, 16, 0, 112, 248, 128, 112, 0, - 32, 80, 0, 112, 248, 128, 112, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 32, 80, 0, 192, 64, 64, 224, 0, - 112, 136, 136, 248, 136, 136, 136, 0, - 240, 72, 72, 112, 72, 72, 240, 0, - 48, 72, 128, 128, 128, 72, 48, 0, - 224, 80, 72, 72, 72, 80, 224, 0, - 248, 72, 64, 112, 64, 72, 248, 0, - 248, 72, 64, 112, 64, 64, 224, 0, - 48, 72, 128, 152, 136, 72, 56, 0, - 136, 136, 136, 248, 136, 136, 136, 0, - 248, 32, 32, 32, 32, 32, 248, 0, - 24, 8, 8, 8, 136, 136, 112, 0, - 200, 72, 80, 96, 80, 72, 200, 0, - 224, 64, 64, 64, 64, 72, 248, 0, - 136, 216, 168, 168, 136, 136, 136, 0, - 136, 200, 168, 152, 136, 136, 136, 0, - 112, 136, 136, 136, 136, 136, 112, 0, - 240, 72, 72, 112, 64, 64, 224, 0, - 112, 136, 136, 136, 136, 168, 112, 8, - 240, 72, 72, 112, 72, 72, 200, 0, - 112, 136, 128, 112, 8, 136, 112, 0, - 248, 168, 32, 32, 32, 32, 112, 0, - 136, 136, 136, 136, 136, 136, 120, 0, - 136, 136, 136, 80, 80, 32, 32, 0, - 136, 136, 136, 136, 168, 216, 136, 0, - 136, 136, 80, 32, 80, 136, 136, 0, - 136, 136, 136, 112, 32, 32, 112, 0, - 248, 136, 16, 32, 64, 136, 248, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 0, 0, 112, 136, 128, 112, 32, 96, - 160, 0, 192, 64, 64, 64, 224, 0, - 32, 16, 0, 144, 144, 144, 104, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - - writeRecord(french_video_font, sizeof(french_video_font), GBVARS_FRENCHVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_german_video_font() { - byte german_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 80, 0, 112, 8, 120, 136, 120, 0, - 80, 0, 112, 136, 136, 136, 112, 0, - 80, 0, 144, 144, 144, 144, 104, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 96, 144, 144, 160, 144, 144, 160, 128, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 80, 0, 112, 136, 248, 136, 136, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 136, 112, 136, 136, 136, 136, 112, 0, - 80, 0, 136, 136, 136, 136, 112, 0, - 80, 0, 144, 144, 144, 144, 104, 0, - 32, 64, 0, 112, 248, 128, 112, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 32, 80, 0, 192, 64, 64, 224, 0, - 112, 136, 136, 248, 136, 136, 136, 0, - 240, 72, 72, 112, 72, 72, 240, 0, - 48, 72, 128, 128, 128, 72, 48, 0, - 224, 80, 72, 72, 72, 80, 224, 0, - 248, 72, 64, 112, 64, 72, 248, 0, - 248, 72, 64, 112, 64, 64, 224, 0, - 48, 72, 128, 152, 136, 72, 56, 0, - 136, 136, 136, 248, 136, 136, 136, 0, - 248, 32, 32, 32, 32, 32, 248, 0, - 24, 8, 8, 8, 136, 136, 112, 0, - 200, 72, 80, 96, 80, 72, 200, 0, - 224, 64, 64, 64, 64, 72, 248, 0, - 136, 216, 168, 168, 136, 136, 136, 0, - 136, 200, 168, 152, 136, 136, 136, 0, - 112, 136, 136, 136, 136, 136, 112, 0, - 240, 72, 72, 112, 64, 64, 224, 0, - 112, 136, 136, 136, 136, 168, 112, 8, - 240, 72, 72, 112, 72, 72, 200, 0, - 112, 136, 128, 112, 8, 136, 112, 0, - 248, 168, 32, 32, 32, 32, 112, 0, - 136, 136, 136, 136, 136, 136, 120, 0, - 136, 136, 136, 80, 80, 32, 32, 0, - 136, 136, 136, 136, 168, 216, 136, 0, - 136, 136, 80, 32, 80, 136, 136, 0, - 136, 136, 136, 112, 32, 32, 112, 0, - 248, 136, 16, 32, 64, 136, 248, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 0, 48, 72, 64, 72, 48, 16, 48, - 0, 80, 0, 96, 32, 40, 48, 0, - 32, 16, 0, 152, 144, 144, 232, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(german_video_font, sizeof(german_video_font), GBVARS_GERMANVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_hebrew_video_font() { - byte hebrew_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 144, 0, 96, 144, 144, 104, 0, - 0, 144, 0, 96, 144, 144, 96, 0, - 0, 144, 0, 144, 144, 144, 96, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 0, 112, 136, 240, 136, 136, 240, 0, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 16, 32, 0, 120, 112, 64, 56, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 5, 5, 4, 6, 5, 3, 4, 5, - 6, 3, 5, 5, 4, 6, 5, 3, - 4, 6, 5, 6, 6, 6, 5, 5, - 5, 6, 5, 6, 6, 6, 6, 6, - 112, 136, 8, 16, 32, 0, 32, 0, - 0, 0, 144, 80, 160, 144, 144, 0, - 0, 0, 224, 32, 32, 32, 240, 0, - 0, 0, 224, 32, 96, 160, 160, 0, - 0, 0, 248, 16, 16, 16, 16, 0, - 0, 0, 240, 16, 16, 144, 144, 0, - 0, 0, 192, 64, 64, 64, 64, 0, - 0, 0, 224, 64, 32, 64, 64, 0, - 0, 0, 240, 144, 144, 144, 144, 0, - 0, 0, 184, 168, 136, 136, 112, 0, - 0, 0, 192, 64, 0, 0, 0, 0, - 0, 0, 240, 16, 16, 16, 16, 16, - 0, 0, 224, 16, 16, 16, 224, 0, - 128, 128, 224, 32, 32, 32, 192, 0, - 0, 0, 248, 72, 72, 72, 120, 0, - 0, 0, 176, 208, 144, 144, 176, 0, - 0, 0, 192, 64, 64, 64, 64, 64, - 0, 0, 96, 32, 32, 32, 224, 0, - 0, 0, 248, 72, 72, 72, 48, 0, - 0, 0, 80, 80, 80, 80, 224, 0, - 0, 0, 248, 72, 104, 8, 8, 8, - 0, 0, 248, 72, 104, 8, 248, 0, - 0, 0, 216, 72, 48, 16, 16, 16, - 0, 0, 144, 80, 32, 16, 240, 0, - 0, 0, 240, 16, 144, 160, 128, 128, - 0, 0, 240, 16, 16, 16, 16, 0, - 0, 0, 168, 168, 200, 136, 112, 0, - 0, 0, 240, 80, 80, 80, 208, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 0, 48, 72, 64, 72, 48, 16, 48, - 0, 80, 0, 96, 32, 40, 48, 0, - 32, 16, 0, 152, 144, 144, 232, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(hebrew_video_font, sizeof(hebrew_video_font), GBVARS_HEBREWVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_italian_video_font() { - byte italian_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 80, 0, 112, 8, 120, 136, 120, 0, - 80, 0, 112, 136, 136, 136, 112, 0, - 32, 16, 0, 112, 136, 136, 112, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 32, 16, 0, 192, 64, 64, 224, 0, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 32, 64, 0, 112, 248, 128, 112, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 32, 16, 0, 112, 8, 248, 120, 0, - 32, 16, 0, 112, 136, 136, 112, 0, - 32, 16, 0, 112, 248, 128, 112, 0, - 32, 80, 0, 112, 248, 128, 112, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 32, 80, 0, 96, 32, 40, 48, 0, - 112, 136, 136, 248, 136, 136, 136, 0, - 240, 72, 72, 112, 72, 72, 240, 0, - 48, 72, 128, 128, 128, 72, 48, 0, - 224, 80, 72, 72, 72, 80, 224, 0, - 248, 72, 64, 112, 64, 72, 248, 0, - 248, 72, 64, 112, 64, 64, 224, 0, - 48, 72, 128, 152, 136, 72, 56, 0, - 136, 136, 136, 248, 136, 136, 136, 0, - 248, 32, 32, 32, 32, 32, 248, 0, - 24, 8, 8, 8, 136, 136, 112, 0, - 200, 72, 80, 96, 80, 72, 200, 0, - 224, 64, 64, 64, 64, 72, 248, 0, - 136, 216, 168, 168, 136, 136, 136, 0, - 136, 200, 168, 152, 136, 136, 136, 0, - 112, 136, 136, 136, 136, 136, 112, 0, - 240, 72, 72, 112, 64, 64, 224, 0, - 112, 136, 136, 136, 136, 168, 112, 8, - 240, 72, 72, 112, 72, 72, 200, 0, - 112, 136, 128, 112, 8, 136, 112, 0, - 248, 168, 32, 32, 32, 32, 112, 0, - 136, 136, 136, 136, 136, 136, 120, 0, - 136, 136, 136, 80, 80, 32, 32, 0, - 136, 136, 136, 136, 168, 216, 136, 0, - 136, 136, 80, 32, 80, 136, 136, 0, - 136, 136, 136, 112, 32, 32, 112, 0, - 248, 136, 16, 32, 64, 136, 248, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 0, 0, 112, 136, 128, 112, 32, 96, - 160, 0, 192, 64, 64, 64, 224, 0, - 32, 16, 0, 144, 144, 144, 104, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(italian_video_font, sizeof(italian_video_font), GBVARS_ITALIANVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_spanish_video_font() { - byte spanish_video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 80, 0, 112, 8, 120, 136, 120, 0, - 80, 0, 112, 136, 136, 136, 112, 0, - 80, 0, 144, 144, 144, 144, 104, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 96, 144, 144, 160, 144, 144, 160, 128, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 32, 64, 0, 112, 248, 128, 112, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 32, 64, 0, 112, 8, 248, 120, 0, - 32, 64, 0, 192, 64, 64, 224, 0, - 32, 64, 0, 112, 136, 136, 112, 0, - 32, 64, 0, 144, 144, 144, 104, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 80, 160, 0, 240, 136, 136, 136, 0, - 112, 136, 136, 248, 136, 136, 136, 0, - 240, 72, 72, 112, 72, 72, 240, 0, - 48, 72, 128, 128, 128, 72, 48, 0, - 224, 80, 72, 72, 72, 80, 224, 0, - 248, 72, 64, 112, 64, 72, 248, 0, - 248, 72, 64, 112, 64, 64, 224, 0, - 48, 72, 128, 152, 136, 72, 56, 0, - 136, 136, 136, 248, 136, 136, 136, 0, - 248, 32, 32, 32, 32, 32, 248, 0, - 24, 8, 8, 8, 136, 136, 112, 0, - 200, 72, 80, 96, 80, 72, 200, 0, - 224, 64, 64, 64, 64, 72, 248, 0, - 136, 216, 168, 168, 136, 136, 136, 0, - 136, 200, 168, 152, 136, 136, 136, 0, - 112, 136, 136, 136, 136, 136, 112, 0, - 240, 72, 72, 112, 64, 64, 224, 0, - 112, 136, 136, 136, 136, 168, 112, 8, - 240, 72, 72, 112, 72, 72, 200, 0, - 112, 136, 128, 112, 8, 136, 112, 0, - 248, 168, 32, 32, 32, 32, 112, 0, - 136, 136, 136, 136, 136, 136, 120, 0, - 136, 136, 136, 80, 80, 32, 32, 0, - 136, 136, 136, 136, 168, 216, 136, 0, - 136, 136, 80, 32, 80, 136, 136, 0, - 136, 136, 136, 112, 32, 32, 112, 0, - 248, 136, 16, 32, 64, 136, 248, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 32, 0, 32, 64, 128, 136, 112, 0, - 32, 0, 32, 32, 112, 112, 32, 0, - 80, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(spanish_video_font, sizeof(spanish_video_font), GBVARS_SPANISHVIDEOFONT_INDEX , GBVARS_SIMON); -} - -static void addCharset_video_font() { - byte video_font[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 32, 112, 112, 32, 32, 0, 32, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 144, 0, 96, 144, 144, 104, 0, - 0, 144, 0, 96, 144, 144, 96, 0, - 0, 144, 0, 144, 144, 144, 96, 0, - 0, 16, 40, 16, 42, 68, 58, 0, - 48, 48, 96, 0, 0, 0, 0, 0, - 0, 4, 8, 8, 8, 8, 4, 0, - 0, 32, 16, 16, 16, 16, 32, 0, - 0, 0, 20, 8, 62, 8, 20, 0, - 0, 112, 136, 240, 136, 136, 240, 0, - 0, 0, 0, 0, 0, 48, 48, 96, - 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, - 16, 32, 0, 120, 112, 64, 56, 0, - 112, 136, 152, 168, 200, 136, 112, 0, - 32, 96, 32, 32, 32, 32, 112, 0, - 112, 136, 8, 48, 64, 136, 248, 0, - 112, 136, 8, 48, 8, 136, 112, 0, - 16, 48, 80, 144, 248, 16, 56, 0, - 248, 128, 240, 8, 8, 136, 112, 0, - 48, 64, 128, 240, 136, 136, 112, 0, - 248, 136, 8, 16, 32, 32, 32, 0, - 112, 136, 136, 112, 136, 136, 112, 0, - 112, 136, 136, 120, 8, 16, 96, 0, - 0, 0, 48, 48, 0, 48, 48, 0, - 32, 16, 0, 112, 8, 248, 120, 0, - 32, 80, 0, 144, 144, 144, 104, 0, - 80, 0, 144, 144, 144, 144, 104, 0, - 32, 80, 0, 112, 248, 128, 112, 0, - 112, 136, 8, 16, 32, 0, 32, 0, - 32, 80, 0, 192, 64, 64, 224, 0, - 112, 136, 136, 248, 136, 136, 136, 0, - 240, 72, 72, 112, 72, 72, 240, 0, - 48, 72, 128, 128, 128, 72, 48, 0, - 224, 80, 72, 72, 72, 80, 224, 0, - 248, 72, 64, 112, 64, 72, 248, 0, - 248, 72, 64, 112, 64, 64, 224, 0, - 48, 72, 128, 152, 136, 72, 56, 0, - 136, 136, 136, 248, 136, 136, 136, 0, - 248, 32, 32, 32, 32, 32, 248, 0, - 24, 8, 8, 8, 136, 136, 112, 0, - 200, 72, 80, 96, 80, 72, 200, 0, - 224, 64, 64, 64, 64, 72, 248, 0, - 136, 216, 168, 168, 136, 136, 136, 0, - 136, 200, 168, 152, 136, 136, 136, 0, - 112, 136, 136, 136, 136, 136, 112, 0, - 240, 72, 72, 112, 64, 64, 224, 0, - 112, 136, 136, 136, 136, 168, 112, 8, - 240, 72, 72, 112, 72, 72, 200, 0, - 112, 136, 128, 112, 8, 136, 112, 0, - 248, 168, 32, 32, 32, 32, 112, 0, - 136, 136, 136, 136, 136, 136, 120, 0, - 136, 136, 136, 80, 80, 32, 32, 0, - 136, 136, 136, 136, 168, 216, 136, 0, - 136, 136, 80, 32, 80, 136, 136, 0, - 136, 136, 136, 112, 32, 32, 112, 0, - 248, 136, 16, 32, 64, 136, 248, 0, - 0, 14, 8, 8, 8, 8, 14, 0, - 0, 128, 64, 32, 16, 8, 4, 0, - 0, 112, 16, 16, 16, 16, 112, 0, - 0, 48, 72, 64, 72, 48, 16, 48, - 0, 80, 0, 96, 32, 40, 48, 0, - 32, 16, 0, 152, 144, 144, 232, 0, - 0, 0, 112, 8, 120, 136, 120, 0, - 192, 64, 80, 104, 72, 72, 112, 0, - 0, 0, 112, 136, 128, 136, 112, 0, - 24, 16, 80, 176, 144, 144, 112, 0, - 0, 0, 112, 136, 248, 128, 112, 0, - 48, 72, 64, 224, 64, 64, 224, 0, - 0, 0, 104, 144, 144, 112, 136, 112, - 192, 64, 80, 104, 72, 72, 200, 0, - 64, 0, 192, 64, 64, 64, 224, 0, - 8, 0, 8, 8, 8, 8, 136, 112, - 192, 64, 72, 80, 96, 80, 200, 0, - 192, 64, 64, 64, 64, 64, 224, 0, - 0, 0, 144, 216, 168, 136, 136, 0, - 0, 0, 240, 136, 136, 136, 136, 0, - 0, 0, 112, 136, 136, 136, 112, 0, - 0, 0, 176, 72, 72, 112, 64, 224, - 0, 0, 104, 144, 144, 112, 16, 56, - 0, 0, 176, 72, 72, 64, 224, 0, - 0, 0, 120, 128, 112, 8, 240, 0, - 64, 64, 240, 64, 64, 72, 48, 0, - 0, 0, 144, 144, 144, 144, 104, 0, - 0, 0, 136, 136, 136, 80, 32, 0, - 0, 0, 136, 136, 168, 216, 144, 0, - 0, 0, 136, 80, 32, 80, 136, 0, - 0, 0, 136, 136, 136, 112, 32, 192, - 0, 0, 248, 144, 32, 72, 248, 0, - 32, 80, 0, 96, 144, 144, 96, 0, - 0, 14, 8, 48, 8, 8, 14, 0, - 0, 8, 8, 8, 8, 8, 8, 0, - 0, 112, 16, 12, 16, 16, 112, 0, - 0, 0, 0, 0, 0, 0, 248, 0, - 252, 252, 252, 252, 252, 252, 252, 252, - 240, 240, 240, 240, 240, 240, 240, 240, - }; - writeRecord(video_font, sizeof(video_font), GBVARS_VIDEOFONT_INDEX , GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void Simon_addCharset() { - addCharset_russian_video_font(); - addCharset_french_video_font(); - addCharset_german_video_font(); - addCharset_hebrew_video_font(); - addCharset_italian_video_font(); - addCharset_spanish_video_font(); - addCharset_video_font(); -} diff --git a/backends/PalmOS/Src/builder/simon/bs_simon.c b/backends/PalmOS/Src/builder/simon/bs_simon.c deleted file mode 100644 index 885a41f8e9..0000000000 --- a/backends/PalmOS/Src/builder/simon/bs_simon.c +++ /dev/null @@ -1,377 +0,0 @@ -#include -#include "b_globals.h" -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -typedef struct { -#if 0 // original struct - const char *gme_filename; - const char *wav_filename; - const char *voc_filename; - const char *mp3_filename; - const char *vorbis_filename; - const char *voc_effects_filename; - const char *mp3_effects_filename; - const char *vorbis_effects_filename; - const char *gamepc_filename; - #else - const char gme_filename[12]; - const char wav_filename[12]; - const char voc_filename[12]; - const char mp3_filename[12]; - const char flac_filename[12]; - const char vorbis_filename[12]; - const char voc_effects_filename[12]; - const char mp3_effects_filename[12]; - const char vorbis_effects_filename[12]; - const char flac_effects_filename[12]; - const char gamepc_filename[12]; - #endif -} GameSpecificSettings; -/////////////////////////////////////////////////////////////////// -static void addSimon_simon1_settings() { - - - GameSpecificSettings simon1_settings = { - "SIMON.GME", // gme_filename - "SIMON.WAV", // wav_filename - "SIMON.VOC", // voc_filename - "SIMON.MP3", // mp3_filename - "SIMON.OGG", // vorbis_filename - "SIMON.FLA", // flac_filename - "EFFECTS.VOC", // voc_effects_filename - "EFFECTS.MP3", // mp3_effects_filename - "EFFECTS.OGG", // vorbis_effects_filename - "EFFECTS.FLA", // flac_effects_filename - "GAMEPC", // gamepc_filename - }; - - writeRecord(&simon1_settings, sizeof(simon1_settings), GBVARS_SIMON1SETTINGS_INDEX, GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// -static void addSimon_simon1acorn_settings() { - - - GameSpecificSettings simon1acorn_settings = { - "DATA", // gme_filename - "", // wav_filename - "SIMON", // voc_filename - "SIMON.MP3", // mp3_filename - "SIMON.OGG", // vorbis_filename - "SIMON.FLA", // flac_filename - "EFFECTS", // voc_effects_filename - "EFFECTS.MP3", // mp3_effects_filename - "EFFECTS.OGG", // vorbis_effects_filename - "EFFECTS.FLA", // flac_effects_filename - "GAMEBASE", // gamepc_filename -}; - - writeRecord(&simon1acorn_settings, sizeof(simon1acorn_settings), GBVARS_SIMON1ACORNSETTINGS_INDEX, GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// -static void addSimon_simon1amiga_settings() { - - - GameSpecificSettings simon1amiga_settings = { - "", // gme_filename - "", // wav_filename - "", // voc_filename - "SIMON.MP3", // mp3_filename - "SIMON.OGG", // vorbis_filename - "SIMON.FLA", // flac_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "", // vorbis_effects_filename - "", // flac_effects_filename - "gameamiga", // gamepc_filename -}; - - - writeRecord(&simon1amiga_settings, sizeof(simon1amiga_settings), GBVARS_SIMON1AMIGASETTINGS_INDEX, GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// - -static void addSimon_simon1demo_settings() { - - - GameSpecificSettings simon1demo_settings = { - "", // gme_filename - "", // wav_filename - "", // voc_filename - "", // mp3_filename - "", // vorbis_filename - "", // flac_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "", // vorbis_effects_filename - "", // flac_effects_filename - "GDEMO", // gamepc_filename -}; - - writeRecord(&simon1demo_settings, sizeof(simon1demo_settings), GBVARS_SIMON1DEMOSETTINGS_INDEX, GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// -static void addSimon_simon2win_settings() { - - - GameSpecificSettings simon2win_settings = { - "SIMON2.GME", // gme_filename - "SIMON2.WAV", // wav_filename - "SIMON2.VOC", // voc_filename - "SIMON2.MP3", // mp3_filename - "SIMON2.OGG", // vorbis_filename - "SIMON2.FLA", // flac_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "", // vorbis_effects_filename - "", // flac_effects_filename - "GSPTR30", // gamepc_filename -}; - - - writeRecord(&simon2win_settings, sizeof(simon2win_settings), GBVARS_SIMON2WINSETTINGS_INDEX, GBVARS_SIMON); -} -/////////////////////////////////////////////////////////////////// -static void addSimon_simon2dos_settings() { - - - GameSpecificSettings simon2dos_settings = { - "SIMON2.GME", // gme_filename - "", // wav_filename - "", // voc_filename - "", // mp3_filename - "", // vorbis_filename - "", // flac_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "", // vorbis_effects_filename - "", // flac_effects_filename - "GAME32", // gamepc_filename -}; - - writeRecord(&simon2dos_settings, sizeof(simon2dos_settings), GBVARS_SIMON2DOSSETTINGS_INDEX, GBVARS_SIMON); -} - -typedef unsigned char byte; -static void addSimon_simon1_cursor() { - - - byte _simon1_cursor[256] = { - 0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe1,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -}; - - writeRecord(&_simon1_cursor, sizeof(_simon1_cursor), GBVARS_SIMON1CURSOR_INDEX, GBVARS_SIMON); -} -/* -static void addSimon_simon2_cursors() { - - - byte _simon2_cursors[10][256] = { - // cross hair - { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xec,0xec,0xec,0xec,0xec,0xef,0xff,0xea,0xff,0xef,0xec,0xec,0xec,0xec,0xec,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // examine - { 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xef,0xee,0xeb,0xe4,0xe4,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xec,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xeb,0xee,0xef,0xee,0xee,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xeb,0xef,0xef,0xef,0xec,0xee,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xeb,0xef,0xef,0xee,0xef,0xef,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xeb,0xee,0xef,0xef,0xef,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xee,0xe4,0xec,0xef,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xeb,0xe4,0xee,0xef,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xeb,0xef,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // pick up - { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xe5,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe9,0xe7,0xe5,0xff,0xff, - 0xff,0xe5,0xe6,0xe7,0xe6,0xe5,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff, - 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff, - 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe5,0xff, - 0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff, - 0xff,0xef,0xee,0xeb,0xee,0xef,0xff,0xff,0xff,0xff,0xef,0xee,0xeb,0xee,0xef,0xff, - 0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff, - 0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff, - 0xff,0xff,0xff,0xef,0xe4,0xeb,0xef,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xeb,0xeb,0xeb,0xef,0xef,0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xef,0xee,0xee,0xee,0xee,0xe1,0xe1,0xef,0xff,0xff,0xff,0xe4, - 0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xeb,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xeb,0xec, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe4 }, - // give - { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe9,0xe7,0xe8,0xe8,0xe8,0xe7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xe5,0xe7,0xea,0xe8,0xe8,0xe8,0xea,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe7,0xe8,0xe8,0xea,0xe9,0xea,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff, - 0xe5,0xe7,0xe9,0xe8,0xe8,0xe9,0xec,0xe9,0xe8,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff, - 0xe5,0xe7,0xe7,0xe9,0xe8,0xec,0xe9,0xec,0xe8,0xe9,0xe7,0xe6,0xe5,0xff,0xff,0xff, - 0xe5,0xe7,0xe7,0xe8,0xec,0xe9,0xe9,0xe9,0xec,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff, - 0xe5,0xe7,0xe7,0xea,0xe8,0xe9,0xe9,0xe9,0xe7,0xec,0xec,0xe4,0xe5,0xff,0xff,0xff, - 0xe5,0xe7,0xe7,0xe9,0xe7,0xe8,0xe9,0xe7,0xe6,0xec,0xe4,0xec,0xe4,0xef,0xff,0xff, - 0xe5,0xe6,0xe7,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe4,0xec,0xe4,0xec,0xe4,0xef,0xff, - 0xff,0xe5,0xe6,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe4,0xec,0xe4,0xec,0xeb,0xff, - 0xff,0xff,0xe5,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe6,0xe4,0xec,0xeb,0xef,0xff, - 0xff,0xff,0xff,0xe8,0xe7,0xe7,0xe8,0xe6,0xe6,0xe7,0xff,0xef,0xeb,0xef,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // talk - { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe8,0xe7,0xe6,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe6,0xe9,0xea,0xe6,0xea,0xe9,0xe8,0xe9,0xe8,0xe7,0xe5,0xff,0xff,0xff, - 0xff,0xe5,0xe7,0xe5,0xef,0xe5,0xec,0xea,0xe5,0xea,0xec,0xe5,0xe9,0xe6,0xff,0xff, - 0xff,0xe5,0xe6,0xe5,0xef,0xef,0xef,0xe5,0xef,0xef,0xe5,0xef,0xef,0xe8,0xe5,0xff, - 0xff,0xe5,0xe9,0xea,0xe5,0xe8,0xe7,0xe6,0xe6,0xe8,0xe7,0xe5,0xec,0xe9,0xe5,0xff, - 0xff,0xe5,0xe9,0xe8,0xe5,0xe7,0xe8,0xe8,0xe9,0xe9,0xe8,0xe5,0xe9,0xe9,0xe5,0xff, - 0xff,0xe5,0xe6,0xec,0xea,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe5,0xec,0xe8,0xe5,0xff, - 0xff,0xff,0xe5,0xe9,0xe8,0xe9,0xe5,0xe8,0xe5,0xe8,0xe5,0xe9,0xe9,0xe7,0xe5,0xff, - 0xff,0xff,0xe5,0xe7,0xe9,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xe5,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // use - { 0xff,0xff,0xff,0xff,0xff,0xee,0xe1,0xeb,0xee,0xef,0xef,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xef,0xe4,0xeb,0xee,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xe4,0xeb,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xec,0xe4,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xe4,0xe4,0xee,0xef,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xeb,0xeb,0xeb,0xe1,0xef,0xee,0xef, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xef,0xef,0xee,0xeb,0xeb,0xe4,0xee, - 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xee,0xe4,0xeb,0xef,0xff, - 0xff,0xff,0xff,0xe5,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xef,0xee,0xef,0xff,0xff, - 0xff,0xff,0xe5,0xe6,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff, - 0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xe5,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // wear - { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xef,0xeb,0xed,0xe4,0xe2,0xeb,0xee,0xee,0xee,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xef,0xe2,0xec,0xe2,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xef,0xeb,0xed,0xeb,0xee,0xef,0xef,0xef,0xee,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xef,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xef,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xef,0xe2,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff, - 0xff,0xef,0xef,0xef,0xe1,0xe4,0xe4,0xe4,0xe1,0xeb,0xee,0xef,0xef,0xef,0xff,0xff, - 0xef,0xee,0xee,0xef,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xee,0xee,0xef,0xff, - 0xff,0xef,0xef,0xee,0xe1,0xe2,0xe4,0xe4,0xe4,0xeb,0xe1,0xee,0xef,0xef,0xff,0xff, - 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // move - { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff, - 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff, - 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff, - 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff, - 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff, - 0xff,0xe1,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe1,0xff, - 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff, - 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff, - 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff, - 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff, - 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, - // open - { 0xff,0xff,0xe5,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xff,0xe5,0xe7,0xe6,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xe7,0xe5,0xff,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe5,0xff,0xff,0xff, - 0xff,0xe5,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe5,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xea,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xe5,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe5,0xff,0xff,0xff,0xff }, - // question mark - { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xea,0xe9,0xea,0xec,0xe9,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe8,0xe7,0xe8,0xea,0xec,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xe5,0xe8,0xe9,0xec,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe8,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xec,0xea,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xea,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe9,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, -}; - - writeRecord(&_simon2_cursors, sizeof(_simon2_cursors), GBVARS_SIMON2CURSORS_INDEX, GBVARS_SIMON); -}*/ -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void addSimon() { - addSimon_simon1_settings(); - addSimon_simon1acorn_settings(); - addSimon_simon1amiga_settings(); - addSimon_simon1demo_settings(); - addSimon_simon2win_settings(); - addSimon_simon2dos_settings(); - - addSimon_simon1_cursor(); -// addSimon_simon2_cursors(); -} diff --git a/backends/PalmOS/Src/builder/sky/sk_hufftext.c b/backends/PalmOS/Src/builder/sky/sk_hufftext.c deleted file mode 100644 index 36c770eeda..0000000000 --- a/backends/PalmOS/Src/builder/sky/sk_hufftext.c +++ /dev/null @@ -1,2031 +0,0 @@ -#include -#include "b_globals.h" - -typedef struct { - unsigned char lChild; - unsigned char rChild; - unsigned char value; -} HuffTree; - -static void addHufftext_huffTree_00109() { - HuffTree _huffTree_00109[] = { - { 1, 22, 0 }, - { 2, 9, 0 }, - { 3, 6, 0 }, - { 4, 5, 0 }, - { 0, 0, 0x20 }, - { 0, 0, 0x65 }, - { 7, 8, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x6F }, - { 10, 17, 0 }, - { 11, 14, 0 }, - { 12, 13, 0 }, - { 0, 0, 0x2E }, - { 0, 0, 0x61 }, - { 15, 16, 0 }, - { 0, 0, 0x00 }, - { 0, 0, 0x73 }, - { 18, 21, 0 }, - { 19, 20, 0 }, - { 0, 0, 0x6E }, - { 0, 0, 0x68 }, - { 0, 0, 0x69 }, - { 23, 46, 0 }, - { 24, 35, 0 }, - { 25, 30, 0 }, - { 26, 29, 0 }, - { 27, 28, 0 }, - { 0, 0, 0x45 }, - { 0, 0, 0x49 }, - { 0, 0, 0x72 }, - { 31, 34, 0 }, - { 32, 33, 0 }, - { 0, 0, 0x54 }, - { 0, 0, 0x75 }, - { 0, 0, 0x6D }, - { 36, 41, 0 }, - { 37, 40, 0 }, - { 38, 39, 0 }, - { 0, 0, 0x6C }, - { 0, 0, 0x79 }, - { 0, 0, 0x4F }, - { 42, 45, 0 }, - { 43, 44, 0 }, - { 0, 0, 0x41 }, - { 0, 0, 0x53 }, - { 0, 0, 0x4E }, - { 47, 66, 0 }, - { 48, 57, 0 }, - { 49, 54, 0 }, - { 50, 53, 0 }, - { 51, 52, 0 }, - { 0, 0, 0x52 }, - { 0, 0, 0x64 }, - { 0, 0, 0x27 }, - { 55, 56, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x4C }, - { 58, 63, 0 }, - { 59, 62, 0 }, - { 60, 61, 0 }, - { 0, 0, 0x67 }, - { 0, 0, 0x43 }, - { 0, 0, 0x63 }, - { 64, 65, 0 }, - { 0, 0, 0x48 }, - { 0, 0, 0x21 }, - { 67, 84, 0 }, - { 68, 77, 0 }, - { 69, 74, 0 }, - { 70, 73, 0 }, - { 71, 72, 0 }, - { 0, 0, 0x55 }, - { 0, 0, 0x77 }, - { 0, 0, 0x66 }, - { 75, 76, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x4D }, - { 78, 81, 0 }, - { 79, 80, 0 }, - { 0, 0, 0x62 }, - { 0, 0, 0x57 }, - { 82, 83, 0 }, - { 0, 0, 0x3F }, - { 0, 0, 0x47 }, - { 85, 94, 0 }, - { 86, 91, 0 }, - { 87, 90, 0 }, - { 88, 89, 0 }, - { 0, 0, 0x59 }, - { 0, 0, 0x2C }, - { 0, 0, 0x70 }, - { 92, 93, 0 }, - { 0, 0, 0x42 }, - { 0, 0, 0x6B }, - { 95, 100, 0 }, - { 96, 99, 0 }, - { 97, 98, 0 }, - { 0, 0, 0x76 }, - { 0, 0, 0x46 }, - { 0, 0, 0x4B }, - { 101, 106, 0 }, - { 102, 105, 0 }, - { 103, 104, 0 }, - { 0, 0, 0x2D }, - { 0, 0, 0x56 }, - { 0, 0, 0x4A }, - { 107, 120, 0 }, - { 108, 113, 0 }, - { 109, 112, 0 }, - { 110, 111, 0 }, - { 0, 0, 0x3A }, - { 0, 0, 0x58 }, - { 0, 0, 0x6A }, - { 114, 117, 0 }, - { 115, 116, 0 }, - { 0, 0, 0x60 }, - { 0, 0, 0x5A }, - { 118, 119, 0 }, - { 0, 0, 0x78 }, - { 0, 0, 0x30 }, - { 121, 132, 0 }, - { 122, 127, 0 }, - { 123, 126, 0 }, - { 124, 125, 0 }, - { 0, 0, 0x32 }, - { 0, 0, 0x31 }, - { 0, 0, 0x51 }, - { 128, 131, 0 }, - { 129, 130, 0 }, - { 0, 0, 0x33 }, - { 0, 0, 0x39 }, - { 0, 0, 0x71 }, - { 133, 142, 0 }, - { 134, 137, 0 }, - { 135, 136, 0 }, - { 0, 0, 0x34 }, - { 0, 0, 0x38 }, - { 138, 141, 0 }, - { 139, 140, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x7A }, - { 0, 0, 0x26 }, - { 143, 150, 0 }, - { 144, 147, 0 }, - { 145, 146, 0 }, - { 0, 0, 0x36 }, - { 0, 0, 0x29 }, - { 148, 149, 0 }, - { 0, 0, 0x28 }, - { 0, 0, 0x37 }, - { 151, 158, 0 }, - { 152, 155, 0 }, - { 153, 154, 0 }, - { 0, 0, 0x24 }, - { 0, 0, 0x22 }, - { 156, 157, 0 }, - { 0, 0, 0x2F }, - { 0, 0, 0x3C }, - { 159, 162, 0 }, - { 160, 161, 0 }, - { 0, 0, 0x3E }, - { 0, 0, 0x25 }, - { 163, 164, 0 }, - { 0, 0, 0x23 }, - { 165, 166, 0 }, - { 0, 0, 0x5F }, - { 0, 0, 0x7C } - }; - writeRecord(_huffTree_00109, sizeof(_huffTree_00109), GBVARS_HUFFTREE_00109_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00267() { - HuffTree _huffTree_00267[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 6, 0 }, - { 4, 5, 0 }, - { 0, 0, 0x20 }, - { 0, 0, 0x65 }, - { 0, 0, 0x73 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6d }, - { 0, 0, 0x61 }, - { 13, 14, 0 }, - { 0, 0, 0x0 }, - { 0, 0, 0x6e }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x69 }, - { 0, 0, 0x74 }, - { 0, 0, 0x75 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x2e }, - { 0, 0, 0x72 }, - { 0, 0, 0x45 }, - { 29, 30, 0 }, - { 0, 0, 0x6f }, - { 0, 0, 0x68 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x67 }, - { 37, 38, 0 }, - { 0, 0, 0x49 }, - { 0, 0, 0x79 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x53 }, - { 0, 0, 0x64 }, - { 0, 0, 0x6c }, - { 45, 64, 0 }, - { 46, 53, 0 }, - { 47, 50, 0 }, - { 48, 49, 0 }, - { 0, 0, 0x54 }, - { 0, 0, 0x4e }, - { 51, 52, 0 }, - { 0, 0, 0x63 }, - { 0, 0, 0x52 }, - { 54, 59, 0 }, - { 55, 58, 0 }, - { 56, 57, 0 }, - { 0, 0, 0x41 }, - { 0, 0, 0x4f }, - { 0, 0, 0x4c }, - { 60, 63, 0 }, - { 61, 62, 0 }, - { 0, 0, 0x48 }, - { 0, 0, 0x43 }, - { 0, 0, 0x55 }, - { 65, 84, 0 }, - { 66, 75, 0 }, - { 67, 72, 0 }, - { 68, 71, 0 }, - { 69, 70, 0 }, - { 0, 0, 0x62 }, - { 0, 0, 0x21 }, - { 0, 0, 0x27 }, - { 73, 74, 0 }, - { 0, 0, 0x77 }, - { 0, 0, 0x66 }, - { 76, 81, 0 }, - { 77, 80, 0 }, - { 78, 79, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x4d }, - { 0, 0, 0x2c }, - { 82, 83, 0 }, - { 0, 0, 0x57 }, - { 0, 0, 0x42 }, - { 85, 98, 0 }, - { 86, 93, 0 }, - { 87, 90, 0 }, - { 88, 89, 0 }, - { 0, 0, 0x3f }, - { 0, 0, 0x50 }, - { 91, 92, 0 }, - { 0, 0, 0x6b }, - { 0, 0, 0x70 }, - { 94, 97, 0 }, - { 95, 96, 0 }, - { 0, 0, 0x76 }, - { 0, 0, 0x46 }, - { 0, 0, 0x4b }, - { 99, 110, 0 }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 0x56 }, - { 0, 0, 0x59 }, - { 0, 0, 0x7a }, - { 106, 109, 0 }, - { 107, 108, 0 }, - { 0, 0, 0x2d }, - { 0, 0, 0x23 }, - { 0, 0, 0x4a }, - { 111, 124, 0 }, - { 112, 117, 0 }, - { 113, 116, 0 }, - { 114, 115, 0 }, - { 0, 0, 0x5a }, - { 0, 0, 0x28 }, - { 0, 0, 0x29 }, - { 118, 121, 0 }, - { 119, 120, 0 }, - { 0, 0, 0x6a }, - { 0, 0, 0x2b }, - { 122, 123, 0 }, - { 0, 0, 0x2a }, - { 0, 0, 0x71 }, - { 125, 138, 0 }, - { 126, 131, 0 }, - { 127, 130, 0 }, - { 128, 129, 0 }, - { 0, 0, 0x7d }, - { 0, 0, 0x3a }, - { 0, 0, 0x60 }, - { 132, 135, 0 }, - { 133, 134, 0 }, - { 0, 0, 0x30 }, - { 0, 0, 0x32 }, - { 136, 137, 0 }, - { 0, 0, 0x31 }, - { 0, 0, 0x51 }, - { 139, 150, 0 }, - { 140, 145, 0 }, - { 141, 144, 0 }, - { 142, 143, 0 }, - { 0, 0, 0x58 }, - { 0, 0, 0x78 }, - { 0, 0, 0x33 }, - { 146, 149, 0 }, - { 147, 148, 0 }, - { 0, 0, 0x39 }, - { 0, 0, 0x34 }, - { 0, 0, 0x3c }, - { 151, 160, 0 }, - { 152, 157, 0 }, - { 153, 156, 0 }, - { 154, 155, 0 }, - { 0, 0, 0x38 }, - { 0, 0, 0x5d }, - { 0, 0, 0x3d }, - { 158, 159, 0 }, - { 0, 0, 0x26 }, - { 0, 0, 0x35 }, - { 161, 168, 0 }, - { 162, 165, 0 }, - { 163, 164, 0 }, - { 0, 0, 0x36 }, - { 0, 0, 0x2f }, - { 166, 167, 0 }, - { 0, 0, 0x37 }, - { 0, 0, 0x24 }, - { 169, 174, 0 }, - { 170, 173, 0 }, - { 171, 172, 0 }, - { 0, 0, 0x3e }, - { 0, 0, 0x25 }, - { 0, 0, 0x5e }, - { 175, 180, 0 }, - { 176, 179, 0 }, - { 177, 178, 0 }, - { 0, 0, 0x22 }, - { 0, 0, 0x40 }, - { 0, 0, 0x5b }, - { 181, 184, 0 }, - { 182, 183, 0 }, - { 0, 0, 0x5f }, - { 0, 0, 0x7b }, - { 185, 186, 0 }, - { 0, 0, 0x5c }, - { 0, 0, 0x7c }, - }; - writeRecord(_huffTree_00267, sizeof(_huffTree_00267), GBVARS_HUFFTREE_00267_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00288() { - HuffTree _huffTree_00288[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, 0x20 }, - { 5, 6, 0 }, - { 0, 0, 0x65 }, - { 0, 0, 0x73 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6e }, - { 0, 0, 0x69 }, - { 13, 14, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x61 }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x2e }, - { 0, 0, 0x0 }, - { 0, 0, 0x45 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x72 }, - { 0, 0, 0x6f }, - { 0, 0, 0x75 }, - { 29, 30, 0 }, - { 0, 0, 0x6d }, - { 0, 0, 0x68 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x49 }, - { 0, 0, 0x6c }, - { 37, 38, 0 }, - { 0, 0, 0x53 }, - { 0, 0, 0x52 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x4e }, - { 0, 0, 0x54 }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 0x63 }, - { 0, 0, 0x41 }, - { 0, 0, 0x4f }, - { 53, 54, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x4c }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 0x43 }, - { 0, 0, 0x67 }, - { 61, 62, 0 }, - { 0, 0, 0x55 }, - { 0, 0, 0x27 }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, 0x79 }, - { 0, 0, 0x48 }, - { 0, 0, 0x70 }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 0x21 }, - { 0, 0, 0x4d }, - { 0, 0, 0x62 }, - { 77, 78, 0 }, - { 0, 0, 0x76 }, - { 0, 0, 0x2c }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x66 }, - { 0, 0, 0x3f }, - { 86, 87, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x42 }, - { 89, 104, 0 }, - { 90, 97, 0 }, - { 91, 94, 0 }, - { 92, 93, 0 }, - { 0, 0, 0x77 }, - { 0, 0, 0x57 }, - { 95, 96, 0 }, - { 0, 0, 0x46 }, - { 0, 0, 0x56 }, - { 98, 101, 0 }, - { 99, 100, 0 }, - { 0, 0, 0x6b }, - { 0, 0, 0x7a }, - { 102, 103, 0 }, - { 0, 0, 0x4b }, - { 0, 0, 0x2d }, - { 105, 116, 0 }, - { 106, 111, 0 }, - { 107, 110, 0 }, - { 108, 109, 0 }, - { 0, 0, 0x4a }, - { 0, 0, 0x2b }, - { 0, 0, 0x71 }, - { 112, 115, 0 }, - { 113, 114, 0 }, - { 0, 0, 0x59 }, - { 0, 0, 0x6a }, - { 0, 0, 0x5a }, - { 117, 132, 0 }, - { 118, 125, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 0x23 }, - { 0, 0, 0x51 }, - { 123, 124, 0 }, - { 0, 0, 0x28 }, - { 0, 0, 0x29 }, - { 126, 129, 0 }, - { 127, 128, 0 }, - { 0, 0, 0x3c }, - { 0, 0, 0x78 }, - { 130, 131, 0 }, - { 0, 0, 0x3a }, - { 0, 0, 0x2a }, - { 133, 146, 0 }, - { 134, 141, 0 }, - { 135, 138, 0 }, - { 136, 137, 0 }, - { 0, 0, 0x58 }, - { 0, 0, 0x7d }, - { 139, 140, 0 }, - { 0, 0, 0x3d }, - { 0, 0, 0x60 }, - { 142, 145, 0 }, - { 143, 144, 0 }, - { 0, 0, 0x5d }, - { 0, 0, 0x30 }, - { 0, 0, 0x32 }, - { 147, 158, 0 }, - { 148, 153, 0 }, - { 149, 152, 0 }, - { 150, 151, 0 }, - { 0, 0, 0x31 }, - { 0, 0, 0x33 }, - { 0, 0, 0x39 }, - { 154, 157, 0 }, - { 155, 156, 0 }, - { 0, 0, 0x2f }, - { 0, 0, 0x34 }, - { 0, 0, 0x5e }, - { 159, 168, 0 }, - { 160, 165, 0 }, - { 161, 164, 0 }, - { 162, 163, 0 }, - { 0, 0, 0x38 }, - { 0, 0, 0x3e }, - { 0, 0, 0x26 }, - { 166, 167, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x40 }, - { 169, 176, 0 }, - { 170, 173, 0 }, - { 171, 172, 0 }, - { 0, 0, 0x36 }, - { 0, 0, 0x5f }, - { 174, 175, 0 }, - { 0, 0, 0x5c }, - { 0, 0, 0x37 }, - { 177, 182, 0 }, - { 178, 181, 0 }, - { 179, 180, 0 }, - { 0, 0, 0x5b }, - { 0, 0, 0x24 }, - { 0, 0, 0x7b }, - { 183, 186, 0 }, - { 184, 185, 0 }, - { 0, 0, 0x25 }, - { 0, 0, 0x9 }, - { 187, 188, 0 }, - { 0, 0, 0x22 }, - { 0, 0, 0x7c }, - }; - writeRecord(_huffTree_00288, sizeof(_huffTree_00288), GBVARS_HUFFTREE_00288_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00303() { - HuffTree _huffTree_00303[] = { - { 1, 22, 0 }, - { 2, 9, 0 }, - { 3, 6, 0 }, - { 4, 5, 0 }, - { 0, 0, 0x20 }, - { 0, 0, 0x65 }, - { 7, 8, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x73 }, - { 10, 17, 0 }, - { 11, 14, 0 }, - { 12, 13, 0 }, - { 0, 0, 0x6e }, - { 0, 0, 0x61 }, - { 15, 16, 0 }, - { 0, 0, 0x69 }, - { 0, 0, 0x2e }, - { 18, 21, 0 }, - { 19, 20, 0 }, - { 0, 0, 0x6f }, - { 0, 0, 0x0 }, - { 0, 0, 0x45 }, - { 23, 46, 0 }, - { 24, 35, 0 }, - { 25, 30, 0 }, - { 26, 29, 0 }, - { 27, 28, 0 }, - { 0, 0, 0x72 }, - { 0, 0, 0x75 }, - { 0, 0, 0x68 }, - { 31, 34, 0 }, - { 32, 33, 0 }, - { 0, 0, 0x49 }, - { 0, 0, 0x6d }, - { 0, 0, 0x6c }, - { 36, 41, 0 }, - { 37, 40, 0 }, - { 38, 39, 0 }, - { 0, 0, 0x54 }, - { 0, 0, 0x53 }, - { 0, 0, 0x52 }, - { 42, 45, 0 }, - { 43, 44, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x4e }, - { 0, 0, 0x41 }, - { 47, 70, 0 }, - { 48, 59, 0 }, - { 49, 54, 0 }, - { 50, 53, 0 }, - { 51, 52, 0 }, - { 0, 0, 0x63 }, - { 0, 0, 0x4f }, - { 0, 0, 0x44 }, - { 55, 58, 0 }, - { 56, 57, 0 }, - { 0, 0, 0x4c }, - { 0, 0, 0x43 }, - { 0, 0, 0x79 }, - { 60, 65, 0 }, - { 61, 64, 0 }, - { 62, 63, 0 }, - { 0, 0, 0x67 }, - { 0, 0, 0x27 }, - { 0, 0, 0x55 }, - { 66, 69, 0 }, - { 67, 68, 0 }, - { 0, 0, 0x48 }, - { 0, 0, 0x21 }, - { 0, 0, 0x70 }, - { 71, 88, 0 }, - { 72, 81, 0 }, - { 73, 78, 0 }, - { 74, 77, 0 }, - { 75, 76, 0 }, - { 0, 0, 0x4d }, - { 0, 0, 0x62 }, - { 0, 0, 0x3f }, - { 79, 80, 0 }, - { 0, 0, 0x76 }, - { 0, 0, 0x66 }, - { 82, 85, 0 }, - { 83, 84, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x2c }, - { 86, 87, 0 }, - { 0, 0, 0x77 }, - { 0, 0, 0x47 }, - { 89, 102, 0 }, - { 90, 95, 0 }, - { 91, 94, 0 }, - { 92, 93, 0 }, - { 0, 0, 0x42 }, - { 0, 0, 0x57 }, - { 0, 0, 0x6b }, - { 96, 99, 0 }, - { 97, 98, 0 }, - { 0, 0, 0x46 }, - { 0, 0, 0x56 }, - { 100, 101, 0 }, - { 0, 0, 0x59 }, - { 0, 0, 0x4b }, - { 103, 114, 0 }, - { 104, 109, 0 }, - { 105, 108, 0 }, - { 106, 107, 0 }, - { 0, 0, 0x2d }, - { 0, 0, 0x7a }, - { 0, 0, 0x4a }, - { 110, 113, 0 }, - { 111, 112, 0 }, - { 0, 0, 0x71 }, - { 0, 0, 0x2b }, - { 0, 0, 0x6a }, - { 115, 132, 0 }, - { 116, 123, 0 }, - { 117, 120, 0 }, - { 118, 119, 0 }, - { 0, 0, 0x5a }, - { 0, 0, 0x23 }, - { 121, 122, 0 }, - { 0, 0, 0x51 }, - { 0, 0, 0x78 }, - { 124, 129, 0 }, - { 125, 128, 0 }, - { 126, 127, 0 }, - { 0, 0, 0x3a }, - { 0, 0, 0x29 }, - { 0, 0, 0x28 }, - { 130, 131, 0 }, - { 0, 0, 0x3c }, - { 0, 0, 0x58 }, - { 133, 148, 0 }, - { 134, 141, 0 }, - { 135, 138, 0 }, - { 136, 137, 0 }, - { 0, 0, 0x2a }, - { 0, 0, 0x60 }, - { 139, 140, 0 }, - { 0, 0, 0x7d }, - { 0, 0, 0x3d }, - { 142, 145, 0 }, - { 143, 144, 0 }, - { 0, 0, 0x32 }, - { 0, 0, 0x30 }, - { 146, 147, 0 }, - { 0, 0, 0x5d }, - { 0, 0, 0x31 }, - { 149, 160, 0 }, - { 150, 155, 0 }, - { 151, 154, 0 }, - { 152, 153, 0 }, - { 0, 0, 0x7e }, - { 0, 0, 0x33 }, - { 0, 0, 0x7f }, - { 156, 159, 0 }, - { 157, 158, 0 }, - { 0, 0, 0x39 }, - { 0, 0, 0x34 }, - { 0, 0, 0x2f }, - { 161, 172, 0 }, - { 162, 167, 0 }, - { 163, 166, 0 }, - { 164, 165, 0 }, - { 0, 0, 0x38 }, - { 0, 0, 0x5e }, - { 0, 0, 0x26 }, - { 168, 171, 0 }, - { 169, 170, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x36 }, - { 0, 0, 0x3e }, - { 173, 182, 0 }, - { 174, 179, 0 }, - { 175, 178, 0 }, - { 176, 177, 0 }, - { 0, 0, 0x40 }, - { 0, 0, 0x37 }, - { 0, 0, 0x5f }, - { 180, 181, 0 }, - { 0, 0, 0x5c }, - { 0, 0, 0x24 }, - { 183, 190, 0 }, - { 184, 187, 0 }, - { 185, 186, 0 }, - { 0, 0, 0x5b }, - { 0, 0, 0x80 }, - { 188, 189, 0 }, - { 0, 0, 0x81 }, - { 0, 0, 0x22 }, - { 191, 194, 0 }, - { 192, 193, 0 }, - { 0, 0, 0x25 }, - { 0, 0, 0x82 }, - { 195, 196, 0 }, - { 0, 0, 0x7b }, - { 197, 198, 0 }, - { 0, 0, 0x9 }, - { 0, 0, 0x7c }, - }; - writeRecord(_huffTree_00303, sizeof(_huffTree_00303), GBVARS_HUFFTREE_00303_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00331() { - HuffTree _huffTree_00331[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, 0x20 }, - { 5, 6, 0 }, - { 0, 0, 0x65 }, - { 0, 0, 0x61 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6f }, - { 0, 0, 0x73 }, - { 13, 14, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x6e }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x2e }, - { 0, 0, 0x69 }, - { 0, 0, 0x72 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x0 }, - { 0, 0, 0x45 }, - { 0, 0, 0x75 }, - { 29, 30, 0 }, - { 0, 0, 0x6d }, - { 0, 0, 0x41 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x6c }, - { 0, 0, 0x49 }, - { 37, 38, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x52 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x4e }, - { 0, 0, 0x53 }, - { 0, 0, 0x54 }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 0x4f }, - { 0, 0, 0x68 }, - { 0, 0, 0x63 }, - { 53, 54, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x67 }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 0x4c }, - { 0, 0, 0x43 }, - { 61, 62, 0 }, - { 0, 0, 0x70 }, - { 0, 0, 0x55 }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, 0x21 }, - { 0, 0, 0x79 }, - { 0, 0, 0x4d }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x76 }, - { 0, 0, 0x48 }, - { 77, 78, 0 }, - { 0, 0, 0x3f }, - { 0, 0, 0x62 }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 0x27 }, - { 0, 0, 0x66 }, - { 0, 0, 0x2c }, - { 86, 87, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x42 }, - { 89, 108, 0 }, - { 90, 99, 0 }, - { 91, 96, 0 }, - { 92, 95, 0 }, - { 93, 94, 0 }, - { 0, 0, 0x56 }, - { 0, 0, 0x6b }, - { 0, 0, 0x46 }, - { 97, 98, 0 }, - { 0, 0, 0x71 }, - { 0, 0, 0x2a }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 0x77 }, - { 0, 0, 0x4b }, - { 0, 0, 0x2d }, - { 106, 107, 0 }, - { 0, 0, 0x57 }, - { 0, 0, 0x4a }, - { 109, 126, 0 }, - { 110, 117, 0 }, - { 111, 114, 0 }, - { 112, 113, 0 }, - { 0, 0, 0x7a }, - { 0, 0, 0x2b }, - { 115, 116, 0 }, - { 0, 0, 0x59 }, - { 0, 0, 0x6a }, - { 118, 123, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 0x85 }, - { 0, 0, 0x29 }, - { 0, 0, 0x51 }, - { 124, 125, 0 }, - { 0, 0, 0x5a }, - { 0, 0, 0x7e }, - { 127, 148, 0 }, - { 128, 137, 0 }, - { 129, 134, 0 }, - { 130, 133, 0 }, - { 131, 132, 0 }, - { 0, 0, 0x8b }, - { 0, 0, 0x3c }, - { 0, 0, 0x8a }, - { 135, 136, 0 }, - { 0, 0, 0x7f }, - { 0, 0, 0x3a }, - { 138, 143, 0 }, - { 139, 142, 0 }, - { 140, 141, 0 }, - { 0, 0, 0x87 }, - { 0, 0, 0x23 }, - { 0, 0, 0x78 }, - { 144, 147, 0 }, - { 145, 146, 0 }, - { 0, 0, 0x58 }, - { 0, 0, 0x91 }, - { 0, 0, 0x83 }, - { 149, 168, 0 }, - { 150, 159, 0 }, - { 151, 156, 0 }, - { 152, 155, 0 }, - { 153, 154, 0 }, - { 0, 0, 0x88 }, - { 0, 0, 0x60 }, - { 0, 0, 0x32 }, - { 157, 158, 0 }, - { 0, 0, 0x30 }, - { 0, 0, 0x31 }, - { 160, 165, 0 }, - { 161, 164, 0 }, - { 162, 163, 0 }, - { 0, 0, 0x28 }, - { 0, 0, 0x2f }, - { 0, 0, 0x5d }, - { 166, 167, 0 }, - { 0, 0, 0x3d }, - { 0, 0, 0x86 }, - { 169, 184, 0 }, - { 170, 177, 0 }, - { 171, 174, 0 }, - { 172, 173, 0 }, - { 0, 0, 0x5e }, - { 0, 0, 0x33 }, - { 175, 176, 0 }, - { 0, 0, 0x39 }, - { 0, 0, 0x34 }, - { 178, 181, 0 }, - { 179, 180, 0 }, - { 0, 0, 0x7d }, - { 0, 0, 0x38 }, - { 182, 183, 0 }, - { 0, 0, 0x5c }, - { 0, 0, 0x22 }, - { 185, 198, 0 }, - { 186, 193, 0 }, - { 187, 190, 0 }, - { 188, 189, 0 }, - { 0, 0, 0x3e }, - { 0, 0, 0x26 }, - { 191, 192, 0 }, - { 0, 0, 0x8d }, - { 0, 0, 0x7b }, - { 194, 197, 0 }, - { 195, 196, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x36 }, - { 0, 0, 0x8f }, - { 199, 210, 0 }, - { 200, 205, 0 }, - { 201, 204, 0 }, - { 202, 203, 0 }, - { 0, 0, 0x8e }, - { 0, 0, 0x8c }, - { 0, 0, 0x37 }, - { 206, 209, 0 }, - { 207, 208, 0 }, - { 0, 0, 0x89 }, - { 0, 0, 0x24 }, - { 0, 0, 0x92 }, - { 211, 218, 0 }, - { 212, 215, 0 }, - { 213, 214, 0 }, - { 0, 0, 0x5b }, - { 0, 0, 0x80 }, - { 216, 217, 0 }, - { 0, 0, 0x81 }, - { 0, 0, 0x40 }, - { 219, 222, 0 }, - { 220, 221, 0 }, - { 0, 0, 0x5f }, - { 0, 0, 0x82 }, - { 223, 224, 0 }, - { 0, 0, 0x25 }, - { 225, 226, 0 }, - { 0, 0, 0x9 }, - { 227, 228, 0 }, - { 0, 0, 0x3b }, - { 0, 0, 0x7c }, - }; - writeRecord(_huffTree_00331, sizeof(_huffTree_00331), GBVARS_HUFFTREE_00331_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00348() { - HuffTree _huffTree_00348[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, 0x20 }, - { 5, 6, 0 }, - { 0, 0, 0x65 }, - { 0, 0, 0x61 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6F }, - { 0, 0, 0x73 }, - { 13, 14, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x6E }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x2E }, - { 0, 0, 0x69 }, - { 0, 0, 0x72 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x00 }, - { 0, 0, 0x45 }, - { 0, 0, 0x75 }, - { 29, 30, 0 }, - { 0, 0, 0x6D }, - { 0, 0, 0x41 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x6C }, - { 0, 0, 0x49 }, - { 37, 38, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x52 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x4E }, - { 0, 0, 0x53 }, - { 0, 0, 0x54 }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 0x4F }, - { 0, 0, 0x68 }, - { 0, 0, 0x63 }, - { 53, 54, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x67 }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 0x4C }, - { 0, 0, 0x43 }, - { 61, 62, 0 }, - { 0, 0, 0x70 }, - { 0, 0, 0x55 }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, 0x21 }, - { 0, 0, 0x79 }, - { 0, 0, 0x4D }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x76 }, - { 0, 0, 0x48 }, - { 77, 78, 0 }, - { 0, 0, 0x3F }, - { 0, 0, 0x62 }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 0x27 }, - { 0, 0, 0x66 }, - { 0, 0, 0x2C }, - { 86, 87, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x42 }, - { 89, 108, 0 }, - { 90, 99, 0 }, - { 91, 96, 0 }, - { 92, 95, 0 }, - { 93, 94, 0 }, - { 0, 0, 0x56 }, - { 0, 0, 0x6B }, - { 0, 0, 0x46 }, - { 97, 98, 0 }, - { 0, 0, 0x71 }, - { 0, 0, 0x77 }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 0x4B }, - { 0, 0, 0x2D }, - { 0, 0, 0x57 }, - { 106, 107, 0 }, - { 0, 0, 0x4A }, - { 0, 0, 0x2A }, - { 109, 128, 0 }, - { 110, 117, 0 }, - { 111, 114, 0 }, - { 112, 113, 0 }, - { 0, 0, 0x7A }, - { 0, 0, 0x59 }, - { 115, 116, 0 }, - { 0, 0, 0x6A }, - { 0, 0, 0x2B }, - { 118, 123, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 0x51 }, - { 0, 0, 0x29 }, - { 0, 0, 0x85 }, - { 124, 127, 0 }, - { 125, 126, 0 }, - { 0, 0, 0x5A }, - { 0, 0, 0x8B }, - { 0, 0, 0x3C }, - { 129, 150, 0 }, - { 130, 139, 0 }, - { 131, 136, 0 }, - { 132, 135, 0 }, - { 133, 134, 0 }, - { 0, 0, 0x95 }, - { 0, 0, 0x7E }, - { 0, 0, 0x8A }, - { 137, 138, 0 }, - { 0, 0, 0x87 }, - { 0, 0, 0x3A }, - { 140, 145, 0 }, - { 141, 144, 0 }, - { 142, 143, 0 }, - { 0, 0, 0x7F }, - { 0, 0, 0x5D }, - { 0, 0, 0x23 }, - { 146, 149, 0 }, - { 147, 148, 0 }, - { 0, 0, 0x78 }, - { 0, 0, 0x58 }, - { 0, 0, 0x91 }, - { 151, 172, 0 }, - { 152, 163, 0 }, - { 153, 158, 0 }, - { 154, 157, 0 }, - { 155, 156, 0 }, - { 0, 0, 0x88 }, - { 0, 0, 0x60 }, - { 0, 0, 0x32 }, - { 159, 162, 0 }, - { 160, 161, 0 }, - { 0, 0, 0x30 }, - { 0, 0, 0x83 }, - { 0, 0, 0x31 }, - { 164, 169, 0 }, - { 165, 168, 0 }, - { 166, 167, 0 }, - { 0, 0, 0x2F }, - { 0, 0, 0x28 }, - { 0, 0, 0x3D }, - { 170, 171, 0 }, - { 0, 0, 0x86 }, - { 0, 0, 0x5E }, - { 173, 190, 0 }, - { 174, 181, 0 }, - { 175, 178, 0 }, - { 176, 177, 0 }, - { 0, 0, 0x33 }, - { 0, 0, 0x39 }, - { 179, 180, 0 }, - { 0, 0, 0x98 }, - { 0, 0, 0x34 }, - { 182, 187, 0 }, - { 183, 186, 0 }, - { 184, 185, 0 }, - { 0, 0, 0x7D }, - { 0, 0, 0x38 }, - { 0, 0, 0x5C }, - { 188, 189, 0 }, - { 0, 0, 0x22 }, - { 0, 0, 0x9B }, - { 191, 206, 0 }, - { 192, 199, 0 }, - { 193, 196, 0 }, - { 194, 195, 0 }, - { 0, 0, 0x26 }, - { 0, 0, 0x8D }, - { 197, 198, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x36 }, - { 200, 203, 0 }, - { 201, 202, 0 }, - { 0, 0, 0x92 }, - { 0, 0, 0x8F }, - { 204, 205, 0 }, - { 0, 0, 0x8E }, - { 0, 0, 0x93 }, - { 207, 222, 0 }, - { 208, 215, 0 }, - { 209, 212, 0 }, - { 210, 211, 0 }, - { 0, 0, 0x8C }, - { 0, 0, 0x37 }, - { 213, 214, 0 }, - { 0, 0, 0x99 }, - { 0, 0, 0x24 }, - { 216, 219, 0 }, - { 217, 218, 0 }, - { 0, 0, 0x80 }, - { 0, 0, 0x81 }, - { 220, 221, 0 }, - { 0, 0, 0x40 }, - { 0, 0, 0x5B }, - { 223, 232, 0 }, - { 224, 229, 0 }, - { 225, 228, 0 }, - { 226, 227, 0 }, - { 0, 0, 0x9A }, - { 0, 0, 0x5F }, - { 0, 0, 0x3E }, - { 230, 231, 0 }, - { 0, 0, 0x96 }, - { 0, 0, 0x82 }, - { 233, 238, 0 }, - { 234, 237, 0 }, - { 235, 236, 0 }, - { 0, 0, 0x25 }, - { 0, 0, 0x09 }, - { 0, 0, 0x9C }, - { 239, 240, 0 }, - { 0, 0, 0x97 }, - { 241, 242, 0 }, - { 0, 0, 0x7B }, - { 243, 244, 0 }, - { 0, 0, 0x94 }, - { 0, 0, 0x7C }, - }; - - writeRecord(_huffTree_00348, sizeof(_huffTree_00348), GBVARS_HUFFTREE_00348_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00365() { - HuffTree _huffTree_00365[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, 0x20 }, - { 5, 6, 0 }, - { 0, 0, 0x65 }, - { 0, 0, 0x61 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6F }, - { 0, 0, 0x73 }, - { 13, 14, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x6E }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x2E }, - { 0, 0, 0x69 }, - { 0, 0, 0x72 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x00 }, - { 0, 0, 0x45 }, - { 0, 0, 0x75 }, - { 29, 30, 0 }, - { 0, 0, 0x6D }, - { 0, 0, 0x41 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x6C }, - { 0, 0, 0x49 }, - { 37, 38, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x52 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x4E }, - { 0, 0, 0x53 }, - { 0, 0, 0x54 }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 0x4F }, - { 0, 0, 0x68 }, - { 0, 0, 0x63 }, - { 53, 54, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x67 }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 0x4C }, - { 0, 0, 0x43 }, - { 61, 62, 0 }, - { 0, 0, 0x70 }, - { 0, 0, 0x55 }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, 0x21 }, - { 0, 0, 0x79 }, - { 0, 0, 0x4D }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x76 }, - { 0, 0, 0x48 }, - { 77, 78, 0 }, - { 0, 0, 0x3F }, - { 0, 0, 0x62 }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 0x27 }, - { 0, 0, 0x66 }, - { 0, 0, 0x2C }, - { 86, 87, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x42 }, - { 89, 108, 0 }, - { 90, 99, 0 }, - { 91, 96, 0 }, - { 92, 95, 0 }, - { 93, 94, 0 }, - { 0, 0, 0x56 }, - { 0, 0, 0x6B }, - { 0, 0, 0x46 }, - { 97, 98, 0 }, - { 0, 0, 0x71 }, - { 0, 0, 0x77 }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 0x4B }, - { 0, 0, 0x2D }, - { 0, 0, 0x57 }, - { 106, 107, 0 }, - { 0, 0, 0x4A }, - { 0, 0, 0x2A }, - { 109, 128, 0 }, - { 110, 117, 0 }, - { 111, 114, 0 }, - { 112, 113, 0 }, - { 0, 0, 0x7A }, - { 0, 0, 0x59 }, - { 115, 116, 0 }, - { 0, 0, 0x6A }, - { 0, 0, 0x2B }, - { 118, 123, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 0x51 }, - { 0, 0, 0x85 }, - { 0, 0, 0x29 }, - { 124, 127, 0 }, - { 125, 126, 0 }, - { 0, 0, 0x5A }, - { 0, 0, 0x8B }, - { 0, 0, 0x3C }, - { 129, 150, 0 }, - { 130, 139, 0 }, - { 131, 136, 0 }, - { 132, 135, 0 }, - { 133, 134, 0 }, - { 0, 0, 0x95 }, - { 0, 0, 0x7E }, - { 0, 0, 0x8A }, - { 137, 138, 0 }, - { 0, 0, 0x87 }, - { 0, 0, 0x3A }, - { 140, 145, 0 }, - { 141, 144, 0 }, - { 142, 143, 0 }, - { 0, 0, 0x7F }, - { 0, 0, 0x5D }, - { 0, 0, 0x23 }, - { 146, 149, 0 }, - { 147, 148, 0 }, - { 0, 0, 0x78 }, - { 0, 0, 0x58 }, - { 0, 0, 0x91 }, - { 151, 172, 0 }, - { 152, 163, 0 }, - { 153, 158, 0 }, - { 154, 157, 0 }, - { 155, 156, 0 }, - { 0, 0, 0x88 }, - { 0, 0, 0x60 }, - { 0, 0, 0x32 }, - { 159, 162, 0 }, - { 160, 161, 0 }, - { 0, 0, 0x30 }, - { 0, 0, 0x83 }, - { 0, 0, 0x31 }, - { 164, 169, 0 }, - { 165, 168, 0 }, - { 166, 167, 0 }, - { 0, 0, 0x2F }, - { 0, 0, 0x28 }, - { 0, 0, 0x3D }, - { 170, 171, 0 }, - { 0, 0, 0x86 }, - { 0, 0, 0x5E }, - { 173, 190, 0 }, - { 174, 181, 0 }, - { 175, 178, 0 }, - { 176, 177, 0 }, - { 0, 0, 0x33 }, - { 0, 0, 0x39 }, - { 179, 180, 0 }, - { 0, 0, 0x98 }, - { 0, 0, 0x34 }, - { 182, 187, 0 }, - { 183, 186, 0 }, - { 184, 185, 0 }, - { 0, 0, 0x7D }, - { 0, 0, 0x38 }, - { 0, 0, 0x5C }, - { 188, 189, 0 }, - { 0, 0, 0x22 }, - { 0, 0, 0x90 }, - { 191, 206, 0 }, - { 192, 199, 0 }, - { 193, 196, 0 }, - { 194, 195, 0 }, - { 0, 0, 0x26 }, - { 0, 0, 0x8D }, - { 197, 198, 0 }, - { 0, 0, 0x35 }, - { 0, 0, 0x36 }, - { 200, 203, 0 }, - { 201, 202, 0 }, - { 0, 0, 0x92 }, - { 0, 0, 0x8F }, - { 204, 205, 0 }, - { 0, 0, 0x8E }, - { 0, 0, 0x93 }, - { 207, 220, 0 }, - { 208, 213, 0 }, - { 209, 212, 0 }, - { 210, 211, 0 }, - { 0, 0, 0x8C }, - { 0, 0, 0x37 }, - { 0, 0, 0x80 }, - { 214, 217, 0 }, - { 215, 216, 0 }, - { 0, 0, 0x81 }, - { 0, 0, 0x99 }, - { 218, 219, 0 }, - { 0, 0, 0x24 }, - { 0, 0, 0x40 }, - { 221, 230, 0 }, - { 222, 227, 0 }, - { 223, 226, 0 }, - { 224, 225, 0 }, - { 0, 0, 0x5B }, - { 0, 0, 0x9A }, - { 0, 0, 0x5F }, - { 228, 229, 0 }, - { 0, 0, 0x3E }, - { 0, 0, 0x96 }, - { 231, 236, 0 }, - { 232, 235, 0 }, - { 233, 234, 0 }, - { 0, 0, 0x82 }, - { 0, 0, 0x25 }, - { 0, 0, 0x09 }, - { 237, 240, 0 }, - { 238, 239, 0 }, - { 0, 0, 0x9C }, - { 0, 0, 0x97 }, - { 241, 242, 0 }, - { 0, 0, 0x7B }, - { 243, 244, 0 }, - { 0, 0, 0x94 }, - { 0, 0, 0x7C }, - }; - writeRecord(_huffTree_00365, sizeof(_huffTree_00365), GBVARS_HUFFTREE_00365_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00368() { - HuffTree _huffTree_00368[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, 0x20 }, - { 5, 6, 0 }, - { 0, 0, 0x65 }, - { 0, 0, 0x61 }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 0x6F }, - { 0, 0, 0x73 }, - { 13, 14, 0 }, - { 0, 0, 0x74 }, - { 0, 0, 0x6E }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, 0x2E }, - { 0, 0, 0x69 }, - { 0, 0, 0x72 }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0x00 }, - { 0, 0, 0x45 }, - { 0, 0, 0x75 }, - { 29, 30, 0 }, - { 0, 0, 0x6D }, - { 0, 0, 0x41 }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 0x6C }, - { 0, 0, 0x49 }, - { 37, 38, 0 }, - { 0, 0, 0x64 }, - { 0, 0, 0x52 }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 0x4E }, - { 0, 0, 0x53 }, - { 0, 0, 0x54 }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 0x4F }, - { 0, 0, 0x68 }, - { 0, 0, 0x63 }, - { 53, 54, 0 }, - { 0, 0, 0x44 }, - { 0, 0, 0x67 }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 0x4C }, - { 0, 0, 0x43 }, - { 61, 62, 0 }, - { 0, 0, 0x70 }, - { 0, 0, 0x55 }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, 0x21 }, - { 0, 0, 0x79 }, - { 0, 0, 0x4D }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 0x50 }, - { 0, 0, 0x76 }, - { 0, 0, 0x48 }, - { 77, 78, 0 }, - { 0, 0, 0x3F }, - { 0, 0, 0x62 }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 0x27 }, - { 0, 0, 0x66 }, - { 0, 0, 0x2C }, - { 86, 87, 0 }, - { 0, 0, 0x47 }, - { 0, 0, 0x42 }, - { 89, 108, 0 }, - { 90, 99, 0 }, - { 91, 96, 0 }, - { 92, 95, 0 }, - { 93, 94, 0 }, - { 0, 0, 0x56 }, - { 0, 0, 0x6B }, - { 0, 0, 0x46 }, - { 97, 98, 0 }, - { 0, 0, 0x71 }, - { 0, 0, 0x77 }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 0x4B }, - { 0, 0, 0x2D }, - { 0, 0, 0x57 }, - { 106, 107, 0 }, - { 0, 0, 0x4A }, - { 0, 0, 0x2A }, - { 109, 128, 0 }, - { 110, 117, 0 }, - { 111, 114, 0 }, - { 112, 113, 0 }, - { 0, 0, 0x7A }, - { 0, 0, 0x59 }, - { 115, 116, 0 }, - { 0, 0, 0x6A }, - { 0, 0, 0x2B }, - { 118, 123, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 0x51 }, - { 0, 0, 0x85 }, - { 0, 0, 0x29 }, - { 124, 127, 0 }, - { 125, 126, 0 }, - { 0, 0, 0x5A }, - { 0, 0, 0x8B }, - { 0, 0, 0x3C }, - { 129, 152, 0 }, - { 130, 139, 0 }, - { 131, 136, 0 }, - { 132, 135, 0 }, - { 133, 134, 0 }, - { 0, 0, 0x95 }, - { 0, 0, 0x7E }, - { 0, 0, 0x8A }, - { 137, 138, 0 }, - { 0, 0, 0x87 }, - { 0, 0, 0x3A }, - { 140, 145, 0 }, - { 141, 144, 0 }, - { 142, 143, 0 }, - { 0, 0, 0x7F }, - { 0, 0, 0x23 }, - { 0, 0, 0x78 }, - { 146, 149, 0 }, - { 147, 148, 0 }, - { 0, 0, 0x58 }, - { 0, 0, 0x5D }, - { 150, 151, 0 }, - { 0, 0, 0x91 }, - { 0, 0, 0x88 }, - { 153, 174, 0 }, - { 154, 165, 0 }, - { 155, 160, 0 }, - { 156, 159, 0 }, - { 157, 158, 0 }, - { 0, 0, 0x5F }, - { 0, 0, 0x60 }, - { 0, 0, 0x32 }, - { 161, 164, 0 }, - { 162, 163, 0 }, - { 0, 0, 0x30 }, - { 0, 0, 0x83 }, - { 0, 0, 0x31 }, - { 166, 171, 0 }, - { 167, 170, 0 }, - { 168, 169, 0 }, - { 0, 0, 0x2F }, - { 0, 0, 0x28 }, - { 0, 0, 0x3D }, - { 172, 173, 0 }, - { 0, 0, 0x86 }, - { 0, 0, 0x5E }, - { 175, 190, 0 }, - { 176, 183, 0 }, - { 177, 180, 0 }, - { 178, 179, 0 }, - { 0, 0, 0x33 }, - { 0, 0, 0x39 }, - { 181, 182, 0 }, - { 0, 0, 0x98 }, - { 0, 0, 0x34 }, - { 184, 187, 0 }, - { 185, 186, 0 }, - { 0, 0, 0x7D }, - { 0, 0, 0x38 }, - { 188, 189, 0 }, - { 0, 0, 0x5C }, - { 0, 0, 0x22 }, - { 191, 206, 0 }, - { 192, 199, 0 }, - { 193, 196, 0 }, - { 194, 195, 0 }, - { 0, 0, 0x90 }, - { 0, 0, 0x26 }, - { 197, 198, 0 }, - { 0, 0, 0x8D }, - { 0, 0, 0x35 }, - { 200, 203, 0 }, - { 201, 202, 0 }, - { 0, 0, 0x36 }, - { 0, 0, 0x3E }, - { 204, 205, 0 }, - { 0, 0, 0x93 }, - { 0, 0, 0x8C }, - { 207, 220, 0 }, - { 208, 215, 0 }, - { 209, 212, 0 }, - { 210, 211, 0 }, - { 0, 0, 0x37 }, - { 0, 0, 0x80 }, - { 213, 214, 0 }, - { 0, 0, 0x81 }, - { 0, 0, 0x8E }, - { 216, 219, 0 }, - { 217, 218, 0 }, - { 0, 0, 0x8F }, - { 0, 0, 0x99 }, - { 0, 0, 0x24 }, - { 221, 230, 0 }, - { 222, 227, 0 }, - { 223, 226, 0 }, - { 224, 225, 0 }, - { 0, 0, 0x92 }, - { 0, 0, 0x40 }, - { 0, 0, 0x5B }, - { 228, 229, 0 }, - { 0, 0, 0x9A }, - { 0, 0, 0x96 }, - { 231, 236, 0 }, - { 232, 235, 0 }, - { 233, 234, 0 }, - { 0, 0, 0x82 }, - { 0, 0, 0x25 }, - { 0, 0, 0x09 }, - { 237, 240, 0 }, - { 238, 239, 0 }, - { 0, 0, 0x9C }, - { 0, 0, 0x97 }, - { 241, 242, 0 }, - { 0, 0, 0x7B }, - { 243, 244, 0 }, - { 0, 0, 0x94 }, - { 0, 0, 0x7C }, - }; - writeRecord(_huffTree_00368, sizeof(_huffTree_00368), GBVARS_HUFFTREE_00368_INDEX , GBVARS_SKY); -} - -static void addHufftext_huffTree_00372() { - HuffTree _huffTree_00372[] = { - { 1, 20, 0 }, - { 2, 7, 0 }, - { 3, 4, 0 }, - { 0, 0, ' ' }, - { 5, 6, 0 }, - { 0, 0, 'e' }, - { 0, 0, 'a' }, - { 8, 15, 0 }, - { 9, 12, 0 }, - { 10, 11, 0 }, - { 0, 0, 'o' }, - { 0, 0, 's' }, - { 13, 14, 0 }, - { 0, 0, 't' }, - { 0, 0, 'n' }, - { 16, 19, 0 }, - { 17, 18, 0 }, - { 0, 0, '.' }, - { 0, 0, 'i' }, - { 0, 0, 'r' }, - { 21, 44, 0 }, - { 22, 31, 0 }, - { 23, 28, 0 }, - { 24, 27, 0 }, - { 25, 26, 0 }, - { 0, 0, 0 }, - { 0, 0, 'E' }, - { 0, 0, 'u' }, - { 29, 30, 0 }, - { 0, 0, 'm' }, - { 0, 0, 'A' }, - { 32, 39, 0 }, - { 33, 36, 0 }, - { 34, 35, 0 }, - { 0, 0, 'l' }, - { 0, 0, 'I' }, - { 37, 38, 0 }, - { 0, 0, 'd' }, - { 0, 0, 'R' }, - { 40, 43, 0 }, - { 41, 42, 0 }, - { 0, 0, 'N' }, - { 0, 0, 'S' }, - { 0, 0, 'T' }, - { 45, 68, 0 }, - { 46, 55, 0 }, - { 47, 52, 0 }, - { 48, 51, 0 }, - { 49, 50, 0 }, - { 0, 0, 'O' }, - { 0, 0, 'h' }, - { 0, 0, 'c' }, - { 53, 54, 0 }, - { 0, 0, 'D' }, - { 0, 0, 'g' }, - { 56, 63, 0 }, - { 57, 60, 0 }, - { 58, 59, 0 }, - { 0, 0, 'L' }, - { 0, 0, 'C' }, - { 61, 62, 0 }, - { 0, 0, 'p' }, - { 0, 0, 'U' }, - { 64, 67, 0 }, - { 65, 66, 0 }, - { 0, 0, '!' }, - { 0, 0, 'y' }, - { 0, 0, 'M' }, - { 69, 88, 0 }, - { 70, 79, 0 }, - { 71, 76, 0 }, - { 72, 75, 0 }, - { 73, 74, 0 }, - { 0, 0, 'P' }, - { 0, 0, 'v' }, - { 0, 0, 'H' }, - { 77, 78, 0 }, - { 0, 0, '?' }, - { 0, 0, 'b' }, - { 80, 85, 0 }, - { 81, 84, 0 }, - { 82, 83, 0 }, - { 0, 0, 39 }, - { 0, 0, 'f' }, - { 0, 0, ',' }, - { 86, 87, 0 }, - { 0, 0, 'G' }, - { 0, 0, 'B' }, - { 89, 108, 0 }, - { 90, 99, 0 }, - { 91, 96, 0 }, - { 92, 95, 0 }, - { 93, 94, 0 }, - { 0, 0, 'V' }, - { 0, 0, 'k' }, - { 0, 0, 'F' }, - { 97, 98, 0 }, - { 0, 0, 'q' }, - { 0, 0, 'w' }, - { 100, 105, 0 }, - { 101, 104, 0 }, - { 102, 103, 0 }, - { 0, 0, 'K' }, - { 0, 0, '-' }, - { 0, 0, 'W' }, - { 106, 107, 0 }, - { 0, 0, 'J' }, - { 0, 0, '*' }, - { 109, 128, 0 }, - { 110, 117, 0 }, - { 111, 114, 0 }, - { 112, 113, 0 }, - { 0, 0, 'z' }, - { 0, 0, 'Y' }, - { 115, 116, 0 }, - { 0, 0, 'j' }, - { 0, 0, '+' }, - { 118, 123, 0 }, - { 119, 122, 0 }, - { 120, 121, 0 }, - { 0, 0, 'Q' }, - { 0, 0, 133 }, - { 0, 0, ')' }, - { 124, 127, 0 }, - { 125, 126, 0 }, - { 0, 0, 'Z' }, - { 0, 0, 139 }, - { 0, 0, '<' }, - { 129, 150, 0 }, - { 130, 139, 0 }, - { 131, 136, 0 }, - { 132, 135, 0 }, - { 133, 134, 0 }, - { 0, 0, 149 }, - { 0, 0, 126 }, - { 0, 0, 138 }, - { 137, 138, 0 }, - { 0, 0, 135 }, - { 0, 0, ':' }, - { 140, 145, 0 }, - { 141, 144, 0 }, - { 142, 143, 0 }, - { 0, 0, 127 }, - { 0, 0, ']' }, - { 0, 0, '#' }, - { 146, 149, 0 }, - { 147, 148, 0 }, - { 0, 0, 'x' }, - { 0, 0, 'X' }, - { 0, 0, 145 }, - { 151, 172, 0 }, - { 152, 163, 0 }, - { 153, 158, 0 }, - { 154, 157, 0 }, - { 155, 156, 0 }, - { 0, 0, 136 }, - { 0, 0, '`' }, - { 0, 0, '2' }, - { 159, 162, 0 }, - { 160, 161, 0 }, - { 0, 0, '0' }, - { 0, 0, 131 }, - { 0, 0, '1' }, - { 164, 169, 0 }, - { 165, 168, 0 }, - { 166, 167, 0 }, - { 0, 0, '/' }, - { 0, 0, '(' }, - { 0, 0, '=' }, - { 170, 171, 0 }, - { 0, 0, 134 }, - { 0, 0, '^' }, - { 173, 190, 0 }, - { 174, 181, 0 }, - { 175, 178, 0 }, - { 176, 177, 0 }, - { 0, 0, '3' }, - { 0, 0, '9' }, - { 179, 180, 0 }, - { 0, 0, 152 }, - { 0, 0, '4' }, - { 182, 187, 0 }, - { 183, 186, 0 }, - { 184, 185, 0 }, - { 0, 0, '}' }, - { 0, 0, '8' }, - { 0, 0, '\\' }, - { 188, 189, 0 }, - { 0, 0, '"' }, - { 0, 0, 144 }, - { 191, 206, 0 }, - { 192, 199, 0 }, - { 193, 196, 0 }, - { 194, 195, 0 }, - { 0, 0, '&' }, - { 0, 0, 141 }, - { 197, 198, 0 }, - { 0, 0, '5' }, - { 0, 0, '6' }, - { 200, 203, 0 }, - { 201, 202, 0 }, - { 0, 0, 146 }, - { 0, 0, 143 }, - { 204, 205, 0 }, - { 0, 0, 142 }, - { 0, 0, 147 }, - { 207, 220, 0 }, - { 208, 213, 0 }, - { 209, 212, 0 }, - { 210, 211, 0 }, - { 0, 0, 140 }, - { 0, 0, '7' }, - { 0, 0, 128 }, - { 214, 217, 0 }, - { 215, 216, 0 }, - { 0, 0, 129 }, - { 0, 0, 153 }, - { 218, 219, 0 }, - { 0, 0, '$' }, - { 0, 0, '@' }, - { 221, 230, 0 }, - { 222, 227, 0 }, - { 223, 226, 0 }, - { 224, 225, 0 }, - { 0, 0, '[' }, - { 0, 0, 154 }, - { 0, 0, '_' }, - { 228, 229, 0 }, - { 0, 0, '>' }, - { 0, 0, 150 }, - { 231, 236, 0 }, - { 232, 235, 0 }, - { 233, 234, 0 }, - { 0, 0, 130 }, - { 0, 0, '%' }, - { 0, 0, 9 }, - { 237, 240, 0 }, - { 238, 239, 0 }, - { 0, 0, 156 }, - { 0, 0, 151 }, - { 241, 242, 0 }, - { 0, 0, '{' }, - { 243, 244, 0 }, - { 0, 0, 148 }, - { 0, 0, '!' }, - }; - writeRecord(_huffTree_00372, sizeof(_huffTree_00372), GBVARS_HUFFTREE_00372_INDEX , GBVARS_SKY); -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -void Sky_addHufftext() { - addHufftext_huffTree_00109(); - addHufftext_huffTree_00267(); - addHufftext_huffTree_00288(); - addHufftext_huffTree_00303(); - addHufftext_huffTree_00331(); - addHufftext_huffTree_00348(); - addHufftext_huffTree_00365(); - addHufftext_huffTree_00368(); - addHufftext_huffTree_00372(); -} diff --git a/backends/PalmOS/Src/builder/sword1/sw1_staticres.c b/backends/PalmOS/Src/builder/sword1/sw1_staticres.c deleted file mode 100644 index 92860a843c..0000000000 --- a/backends/PalmOS/Src/builder/sword1/sw1_staticres.c +++ /dev/null @@ -1,3576 +0,0 @@ -#include -#include "b_globals.h" - -#include "sw1_staticres.h" - -#define MAX_ROOMS_PER_FX 7 - -#define FX_SPOT 1 -#define FX_LOOP 2 -#define FX_RANDOM 3 - -typedef struct { - int32 roomNo, leftVol, rightVol; -} RoomVol; - -typedef struct { - uint32 sampleId, type, delay; - RoomVol roomVolList[MAX_ROOMS_PER_FX]; -} FxDef; - -static void addStaticres_fxList() { - FxDef _fxList[312] = { - // 0 - { - 0, // sampleId - 0, // type (FX_LOOP, FX_RANDOM or FX_SPOT) - 0, // delay (random chance for FX_RANDOM sound fx) - { // roomVolList - {0,0,0}, // {roomNo,leftVol,rightVol} - }, - }, - //------------------------ - // 1 Newton's cradle. Anim=NEWTON. - { - FX_NEWTON, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {45,4,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 2 - { - FX_TRAFFIC2, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {1,12,12}, // {roomNo,leftVol,rightVol} - {2,1,1}, - {3,1,1}, - {4,13,13}, - {5,1,1}, - {8,7,7}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 3 - { - FX_HORN1, // sampleId - FX_RANDOM, // type - 1200, // delay (or random chance) - { // roomVolList - {1,3,3}, // {roomNo,leftVol,rightVol} - {3,1,1}, - {4,1,1}, - {5,2,2}, - {8,4,4}, - {18,2,3}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 4 - { - FX_HORN2, // sampleId - FX_RANDOM, // type - 1200, // delay (or random chance) - { // roomVolList - {1,4,4}, // {roomNo,leftVol,rightVol} - {3,2,2}, - {4,3,3}, - {5,2,2}, - {8,4,4}, - {18,1,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 5 - { - FX_HORN3, // sampleId - FX_RANDOM, // type - 1200, // delay (or random chance) - { // roomVolList - {1,4,4}, // {roomNo,leftVol,rightVol} - {2,4,4}, - {3,2,2}, - {4,3,3}, - {5,2,2}, - {8,4,4}, - {18,1,1}, - }, - }, - //------------------------ - // 6 - { - FX_CAMERA1, // sampleId - FX_SPOT, // type - 25, // delay (or random chance) - { // roomVolList - {1,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 7 - { - FX_CAMERA2, // sampleId - FX_SPOT, // type - 25, // delay (or random chance) - { // roomVolList - {1,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 8 - { - FX_CAMERA3, // sampleId - FX_SPOT, // type - 25, // delay (or random chance) - { // roomVolList - {1,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 9 - { - FX_SWATER1, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {7,12,12}, // {roomNo,leftVol,rightVol} - {6,12,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 10 Mad dogs in Spain, triggered by George going around the corner in the villa hall. - // In 56 and 57, the dogs will continue barking after George has either been ejected or sneaked up stairs - // for a couple of loops before stopping. - { - FX_DOGS56, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {60,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0} // NULL-TERMINATOR - }, - }, - //------------------------ - // 11 - { - FX_DRIP1, // sampleId - FX_RANDOM, // type - 20, // delay (or random chance) - { // roomVolList - {7,15,15}, // {roomNo,leftVol,rightVol} - {6,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 12 - { - FX_DRIP2, // sampleId - FX_RANDOM, // type - 30, // delay (or random chance) - { // roomVolList - {7,15,15}, // {roomNo,leftVol,rightVol} - {6,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 13 - { - FX_DRIP3, // sampleId - FX_RANDOM, // type - 40, // delay (or random chance) - { // roomVolList - {7,15,15}, // {roomNo,leftVol,rightVol} - {6,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 14 - { - FX_TWEET1, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 15 - { - FX_TWEET2, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 16 - { - FX_TWEET3, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 17 - { - FX_TWEET4, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 18 - { - FX_TWEET5, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 19 Tied to large bird flying up screen anim - { - FX_CAW1, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) - { // roomVolList - {1,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 20 George picking the canopy up: GEOCAN - { - FX_CANUP, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) * - { // roomVolList - {1,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 21 George dropping the canopy: GEOCAN - { - FX_CANDO, // sampleId - FX_SPOT, // type - 52, // delay (or random chance) * - { // roomVolList - {1,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 22 George dusts himself down: GEOCAN - { - FX_DUST, // sampleId - FX_SPOT, // type - 58, // delay (or random chance) * - { // roomVolList - {1,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 23 George picks up the paper and opens it: GEOPAP - { - FX_PAP1, // sampleId - FX_SPOT, // type - 23, // delay (or random chance) * - { // roomVolList - {1,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 24 George puts the paper away: GEOPAP2 - { - FX_PAP2, // sampleId - FX_SPOT, // type - 3, // delay (or random chance) * - { // roomVolList - {1,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 25 George gives the paper away: GEOWRK8 - { - FX_PAP3, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) * - { // roomVolList - {4,14,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 26 Workman examines paper: WRKOPN - it's now just WRKPPR - { - FX_PAP4, // sampleId - FX_SPOT, // type - 15, // delay (or random chance) * - { // roomVolList - {4,14,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 27 Workman puts paper down: WRKOPN (REVERSED) - now just WRKCLM - { - FX_PAP5, // sampleId - FX_SPOT, // type - 2, // delay (or random chance)* - { // roomVolList - {4,14,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 28 Pickaxe sound 1:, Screen 4 - WRKDIG - { - FX_PICK1, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {4,10,10}, - {0,0,0} // NULL-TERMINATOR - }, - }, - //------------------------ - // 29 Pickaxe sound 2:, Screen 4 - WRKDIG - { - FX_PICK2, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {4,10,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 30 Pickaxe sound 3:, Screen 4 - WRKDIG - { - FX_PICK3, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {4,10,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 31 Pickaxe sound 4:, Screen 4 - WRKDIG - { - FX_PICK4, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {4,10,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 32 Shorting light: FLICKER - { - FX_LIGHT, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {3,15,15}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 33 Cat leaps out of bin and runs: CATJMP! - { - FX_CAT, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) * - { // roomVolList - {2,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 34 George rocks plastic crate: GEOCRT - { - FX_CRATE, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {2,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 35 George tries to climb drainpipe: GEOCLM02 - { - FX_DRAIN, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {2,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 36 George removes manhole cover: GEOMAN8 - { - FX_HOLE, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) ? - { // roomVolList - {2,12,11}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 37 Brandy bottle put down: CHNDRN - { - FX_BOTDN, // sampleId - FX_SPOT, // type - 43, // delay (or random chance) * - { // roomVolList - {3,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 38 Brandy bottle picked up: GEOBOT3 - { - FX_BOTUP, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {3,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 39 Chantelle gulps on brandy: CHNDRN - { - FX_GULP, // sampleId - FX_SPOT, // type - 23, // delay (or random chance) * - { // roomVolList - {3,4,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 40 Chantelle picked up off the floor: GEOCHN - { - FX_PIKUP, // sampleId - FX_SPOT, // type - 28, // delay (or random chance) * - { // roomVolList - {3,11,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 41 George searches Plantard's body: GEOCPS - { - FX_BODY, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {3,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 42 Moue cocks handgun. MOUENT - { - FX_PISTOL, // sampleId - FX_SPOT, // type - 23, // delay (or random chance) * - { // roomVolList - {4,4,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 43 George rummages in toolbox: GEOTBX - { - FX_TBOX, // sampleId - FX_SPOT, // type - 12, // delay (or random chance) * - { // roomVolList - {4,12,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 44 rat squeak 1 - { - FX_RAT1, // sampleId - FX_RANDOM, // type - 193, // delay (or random chance) - { // roomVolList - {6,5,7}, // {roomNo,leftVol,rightVol} - {7,5,3}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 45 rat squeak 2 - { - FX_RAT2, // sampleId - FX_RANDOM, // type - 201, // delay (or random chance) - { // roomVolList - {6,3,5}, // {roomNo,leftVol,rightVol} - {7,4,6}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 46 George climbs down ladder: - { - FX_LADD1, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {6,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 47 Rushing water loop - { - FX_SWATER3, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {6,10,11}, // {roomNo,leftVol,rightVol} - {7,12,11}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 48 Left hand bin being opened: GEOCAT? - { - FX_BIN3, // sampleId - FX_SPOT, // type - 12, // delay (or random chance) - { // roomVolList - {2,12,11}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 49 Middle bin being opened: GEOBIN - { - FX_BIN2, // sampleId - FX_SPOT, // type - 12, // delay (or random chance) - { // roomVolList - {2,11,11}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 50 Right hand bin being opened: GEOLID? - { - FX_BIN1, // sampleId - FX_SPOT, // type - 12, // delay (or random chance) - { // roomVolList - {2,10,11}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 51 Passing car sound - { - FX_CARS, // sampleId - FX_RANDOM, // type - 120, // delay (or random chance) - { // roomVolList - {10,8,1}, - {12,7,7}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 52 Passing car sound - { - FX_FIESTA, // sampleId - FX_RANDOM, // type - 127, // delay (or random chance) - { // roomVolList - {10,8,1}, - {12,7,7}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 53 Passing car sound - { - FX_CARLTON , // sampleId - FX_RANDOM, // type - 119, // delay (or random chance) - { // roomVolList - {10,8,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 54 Bird - { - FX_BIRD, // sampleId - FX_RANDOM, // type - 500, // delay (or random chance) - { // roomVolList - {9,10,10}, // {roomNo,leftVol,rightVol} - {10,2,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 55 George tries the door: GEOTRY - { - FX_DOORTRY, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {9,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 56 George opens the door: GEODOOR9 - { - FX_FLATDOOR, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {9,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 57 George picks the 'phone up: GEOPHN10 - { - FX_FONEUP, // sampleId - FX_SPOT, // type - 15, // delay (or random chance) - { // roomVolList - {10,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 58 George puts the 'phone down: GEPDWN10 - { - FX_FONEDN, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) - { // roomVolList - {10,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 59 Albert opens the door: ALBOPEN - { - FX_ALBOP, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) - { // roomVolList - {5,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 60 Albert closes the door: ALBCLOSE - { - FX_ALBCLO, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) - { // roomVolList - {5,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 61 George enter Nico's flat. GEOENT10 - { - FX_NICOPEN, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {10,7,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 62 George leaves Nico's. GEOLVS10 - { - FX_NICLOSE, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) - { // roomVolList - {10,7,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 63 Another bird for the street. - { - FX_BIRD2, // sampleId - FX_RANDOM, // type - 500, // WAS 15 (TOO LATE) - { // roomVolList - {9,10,10}, // {roomNo,leftVol,rightVol} - {10,2,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 64 George sits in the chair: GEOCHR - { - FX_GEOCHAIR, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) - { // roomVolList - {10,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 65 George sits on the couch: GEOCCH - { - FX_GEOCCH, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) - { // roomVolList - {10,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 66 George gets up from the chair: GEOCHR9 - { - FX_GEOCHR9, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) - { // roomVolList - {10,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 67 George is electrocuted: COSSHK - { - FX_SHOCK1, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) - { // roomVolList - {11,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 68 George plays record: GEOWIND - { - FX_GRAMOFON, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {11,11,13}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 69 George is frisked: GORFRK - { - FX_FRISK, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {12,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 70 Traffic sound - { - FX_TRAFFIC3, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {11,5,4}, - {12,1,1}, - {16,4,4}, - {18,2,3}, - {46,4,3}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 71 Latvian reading: LATRDS - { - FX_PAPER6, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) - { // roomVolList - {13,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 72 Deskbell - { - FX_DESKBELL, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {13,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 73 George picks up hotel 'phone: GEOTEL - { - FX_PHONEUP2, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {13,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 74 George puts down hotel 'phone: GEOTEL9 - { - FX_PHONEDN2, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {13,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 75 George tries doors in corridor: GEODOR - { - FX_TRYDOR14, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {14,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 76 George opens bedside cabinet: BEDDOR - { - FX_CABOPEN, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) - { // roomVolList - {15,10,14}, // {roomNo,leftVol,rightVol} - {17,10,14}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 77 George closes bedside cabinet: BEDDOR (reversed) - { - FX_CABCLOSE, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) - { // roomVolList - {15,10,14}, // {roomNo,leftVol,rightVol} - {17,10,14}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 78 George opens the window: WINDOW - { - FX_WINDOPEN, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) - { // roomVolList - {15,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 79 George goes right along the ledge: GEOIRW - { - FX_LEDGE1, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {16,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 80 George goes left along the ledge: GEOILW - { - FX_LEDGE2, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {16,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 81 Pigeon noises - { - FX_COO, // sampleId - FX_RANDOM, // type - 80, // delay (or random chance) - { // roomVolList - {16,7,9}, // {roomNo,leftVol,rightVol} - {46,5,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 82 Pigeon noises - { - FX_COO2, // sampleId - FX_RANDOM, // type - 60, // delay (or random chance) - { // roomVolList - {15,3,4}, // {roomNo,leftVol,rightVol} - {16,8,5}, // {roomNo,leftVol,rightVol} - {17,3,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 83 George picks up and opens case: GEOBFC - { - FX_BRIEFON, // sampleId - FX_SPOT, // type - 16, // delay (or random chance) - { // roomVolList - {17,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 84 George closes and puts down case: GEOBFC (reversed) - { - FX_BRIEFOFF, // sampleId - FX_SPOT, // type - 12, // delay (or random chance) - { // roomVolList - {17,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 85 George gets into wardrobe. GEOWRB2 Attention, James. This is new as of 15/7/96 - { - FX_WARDIN, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {17,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 86 George gets out of wardrobe. GEOWRB2 (Reversed). Attention, James. This is new as of 15/7/96 - { - FX_WARDOUT, // sampleId - FX_SPOT, // type - 41, // delay (or random chance) - { // roomVolList - {17,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 87 George jumps in through window: GEOWIN2 - { - FX_JUMPIN, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {15,8,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 88 George climbs in: GEOWIN2/GEOWIN8 - { - FX_CLIMBIN, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {17,8,16}, // {roomNo,leftVol,rightVol} - {15,8,16}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 89 George climbs out: GEOWIN1/GEOWIN9 - { - FX_CLIMBOUT, // sampleId - FX_SPOT, // type - 17, // delay (or random chance) - { // roomVolList - {17,9,10}, // {roomNo,leftVol,rightVol} - {15,9,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 90 George picks the 'phone up: GEOTEL18 - { - FX_FONEUP, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {18,4,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 91 George puts the 'phone down: GEOTL18A - { - FX_FONEDN, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) - { // roomVolList - {18,4,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 92 George tries to get keys. GEOKEY - { - FX_KEY13, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) - { // roomVolList - {13,3,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 93 George manages to get keys. GEOKEY13 - { - FX_KEY13, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) - { // roomVolList - {13,3,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 94 George electrocutes Maguire: MAGSHK - { - FX_SHOCK2, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) - { // roomVolList - {19,9,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 95 George opens dray door : GEOTRP8 - { - FX_TRAPOPEN, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) - { // roomVolList - {19,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 96 George breaks switch : Which anim? - { - FX_SWITCH19, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {19,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 97 Leary pulls pint: LESPMP - { - FX_PULLPINT, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {20,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 98 Glasswasher fuse blows (and the glass washer grinds to a halt) - { - FX_FUSE20, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {20,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 99 Fitz leaps to his feet: FTZSTD - { - FX_FITZUP, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) - { // roomVolList - {20,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 100 Fitz runs for it: FTZRUN - { - FX_FITZRUN, // sampleId - FX_SPOT, // type - 15, // delay (or random chance) - { // roomVolList - {20,12,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 101 George pulls lever: GEOLVR & GEOLVR26 - { - FX_LEVER, // sampleId - FX_SPOT, // type - 26, // delay (or random chance) - { // roomVolList - {21,8,10}, // {roomNo,leftVol,rightVol} - {26,8,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 102 George pulls lever: GEOLVR8 & GEOLVR08 - { - FX_LEVER2, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) - { // roomVolList - {21,8,10}, // {roomNo,leftVol,rightVol} - {26,8,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 103 George opens tap: No idea what the anim is - { - FX_TAP, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {21,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 104 George closes tap: No idea what this anim is either - { - FX_TAP2, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {21,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 105 Bar flap: FLPOPN - { - FX_BARFLAP, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {20,6,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 106 Farmer leaves: FRMWLK - { - FX_FARMERGO, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) - { // roomVolList - {22,6,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 107 George climbs haystack: GEOCLM - { - FX_CLIMBHAY, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) - { // roomVolList - {22,14,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 108 George drives sewer key into wall: GEOKEY23 - { - FX_KEYSTEP, // sampleId - FX_SPOT, // type - 39, // delay (or random chance) - { // roomVolList - {23,8,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 109 George climbs over wall: GEOCLM23 - { - FX_CASTLWAL, // sampleId - FX_SPOT, // type - 17, // delay (or random chance) - { // roomVolList - {23,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 110 George falls from wall: GEOTRY23 - { - FX_CLIMBFAL, // sampleId - FX_SPOT, // type - 43, // delay (or random chance) - { // roomVolList - {23,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 111 Goat chewing: GOTEAT - { - FX_GOATCHEW, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {24,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 112 George moves plough: GEOPLW - { - FX_PLOUGH, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) - { // roomVolList - {24,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 113 George drops slab: STNFALL - { - FX_SLABFALL, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {25,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 114 George picks up slab: GEOSTN8 - { - FX_SLABUP, // sampleId - FX_SPOT, // type - 29, // delay (or random chance) - { // roomVolList - {25,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 115 Secret door opens: ALTOPN - { - FX_SECDOR25, // sampleId - FX_SPOT, // type - 17, // delay (or random chance) - { // roomVolList - {25,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 116 George wrings out cloth: GEOTWL25 - { - FX_WRING, // sampleId - FX_SPOT, // type - 24, // delay (or random chance) - { // roomVolList - {25,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 117 Rat running across barrels: RATJMP - { - FX_RAT3A, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {26,8,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 118 Rat running across barrels: RATJMP - { - FX_RAT3B, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) - { // roomVolList - {26,7,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 119 Rat running across barrels: RATJMP - { - FX_RAT3C, // sampleId - FX_SPOT, // type - 26, // delay (or random chance) - { // roomVolList - {26,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 120 Irish bird song 1: - { - FX_EIRBIRD1, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) - { // roomVolList - {19,6,8}, // {roomNo,leftVol,rightVol} - {21,2,3}, - {22,8,5}, - {23,6,5}, - {24,8,8}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 121 Irish bird song 2: - { - FX_EIRBIRD2, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) - { // roomVolList - {19,8,6}, // {roomNo,leftVol,rightVol} - {21,2,3}, - {22,6,8}, - {23,5,5}, - {24,8,8}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 122 Irish bird song 3: - { - FX_EIRBIRD3, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) - { // roomVolList - {19,8,8}, // {roomNo,leftVol,rightVol} - {21,3,4}, - {22,8,8}, - {23,5,6}, - {24,6,8}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 123 Rat 3D: - { - FX_RAT3D, // sampleId - FX_RANDOM, // type - 600, // delay (or random chance) - { // roomVolList - {26,2,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 124 Wind atop the battlements - { - FX_WIND, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {23,6,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 125 Glasswasher in the pub (Room 20) *JEL* Stops after fuse blows and starts when george fixes it. - { - FX_WASHER, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {20,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 126 Running tap in the cellar: (Room 21) *JEL* Only when the tap is on. - { - FX_CELTAP, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {21,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 127 Lopez's hose. Basically a loop but stops when George cuts the water supply. Replaces MUTTER1. - { - FX_HOSE57, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {57,3,1}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 128 Lopez's hose being switched off. Anim GARD05. Replaces MUTTER2. - { - FX_HOSE57B, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {57,3,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 129 Nejo bouncing the ball off the door. NEJ8 - { - FX_BALLPLAY, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) - { // roomVolList - {45,5,1}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - //------------------------ - // 130 Cricket loop for Syrian desert Only audible in 55 when the cave door is open. - { - FX_CRICKET, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {54,8,8}, // {roomNo,leftVol,rightVol} - {55,3,5}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 131 Display case shatters: GEOTOTB - { - FX_SMASHGLA, // sampleId - FX_SPOT, // type - 35, // delay (or random chance) - { // roomVolList - {29,16,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 132 Burglar alarm: Once the case is smashed (see 131) - { - FX_ALARM, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {28,12,12}, // {roomNo,leftVol,rightVol} - {29,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 133 Guido fires: GUIGUN - { - FX_GUN1, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {29,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 134 Guido knocked down: NICPUS1 - { - FX_GUI_HIT, // sampleId - FX_SPOT, // type - 40, // delay (or random chance) - { // roomVolList - {29,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 135 Museum exterior ambience - { - FX_MUESEXT, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {27,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 136 Cat gets nowty: CAT3 - { - FX_STALLCAT, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {45,10,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 137 Cat gets very nowty: CAT5 - { - FX_CATHIT, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) - { // roomVolList - {45,10,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 138 Desert wind: Only audible in 55 when the cave door is open. - { - FX_SYRIWIND, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) - { // roomVolList - {54,10,10}, // {roomNo,leftVol,rightVol} - {55,5,7}, - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - // 139 Bell on Nejo's stall: GEOSYR7 - { - FX_STALLBEL, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {45,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - } - }, - //------------------------ - //------------------------ - // 140 George electrocutes Khan: GEOSYR40 - { - FX_SHOCK3, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {54,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 141 George thumps Khan: GEOSYR40 - { - FX_THUMP1, // sampleId - FX_SPOT, // type - 22, // delay (or random chance) - { // roomVolList - {54,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 142 Khan hits the floor: KHS9 - { - FX_KHANDOWN, // sampleId - FX_SPOT, // type - 24, // delay (or random chance) - { // roomVolList - {54,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 143 Hospital ambience - { - FX_HOSPNOIS, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {32,6,4}, // {roomNo,leftVol,rightVol} - {33,7,7}, - {34,3,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 144 Mr Shiny switched on: DOMPLG (Start FX_SHINY) - { - FX_SHINYON, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {33,12,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 145 Mr Shiny running - { - FX_SHINY, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {32,4,3}, // {roomNo,leftVol,rightVol} - {33,12,14}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 146 Mr Shiny switched off: GEOPLG33 (Turn off FX_SHINY at the same time) - { - FX_SHINYOFF, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) - { // roomVolList - {33,12,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 147 Benoir takes blood pressure: BENBP1 or BENBP2 - { - FX_BLOODPRE, // sampleId - FX_SPOT, // type - 39, // delay (or random chance) - { // roomVolList - {34,14,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 148 George takes blood pressure: GEOBP1 or GEOBP2 - { - FX_BLOODPRE, // sampleId - FX_SPOT, // type - 62, // delay (or random chance) - { // roomVolList - {34,14,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 149 Goat baas as it attacks: GOTCR and GOTCL - { - FX_GOATBAA, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {24,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 150 Goat peeved at being trapped: GOTPLW (I'd advise triggering this anim randomly if you haven't done that) - { - FX_GOATDOH, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) - { // roomVolList - {24,7,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 151 George triggers the Irish secret door: GEOPUT - { - FX_TRIGER25, // sampleId - FX_SPOT, // type - 35, // delay (or random chance) - { // roomVolList - {25,6,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 152 George winds up gramophone: GEOWIND - { - FX_WINDUP11, // sampleId - FX_SPOT, // type - 16, // delay (or random chance) - { // roomVolList - {11,7,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 153 Marib ambience - { - FX_MARIB, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {45,7,7}, // {roomNo,leftVol,rightVol} - {47,5,5}, - {50,5,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 154 Statuette breaks: STA2 - { - FX_STATBREK, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {45,7,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 155 George opens toilet door: CUBDOR50 - { - FX_CUBDOR, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) - { // roomVolList - {50,6,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 156 Crowd goes, "Ooh!": CRO36APP - { - FX_OOH, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) - { // roomVolList - {36,6,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 157 Phone rings: When Nico calls back in room 41. Loops until the guard answers it. - { - FX_PHONCALL, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {41,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 158 Phone picked up in 41: GUA41ANS - { - FX_FONEUP41, // sampleId - FX_SPOT, // type - 18, // delay (or random chance) - { // roomVolList - {41,5,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 159 George turns thermostat: GEO41THE (another dummy). Also used on the reverse. - { - FX_THERMO1, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) - { // roomVolList - {41,6,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 160 Low echoing rumble of large church - { - FX_CHURCHFX, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) - { // roomVolList - {38,5,5}, // {roomNo,leftVol,rightVol} - {48,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 161 George drys hand: GEO43HAN - { - FX_DRIER1, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) - { // roomVolList - {43,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 162 George jumps in through window: GEOWIN8 - { - FX_JUMPIN, // sampleId - FX_SPOT, // type - 49, // delay (or random chance) - { // roomVolList - {17,8,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 163 Khan fires: KHS12 - { - FX_SHOTKHAN, // sampleId - FX_SPOT, // type - 30, // delay (or random chance) - { // roomVolList - {54,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 164 Khan fires: KHS5 - { - FX_SHOTKHAN, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) - { // roomVolList - {54,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 165 George falls: GEOSYR37 - { - FX_GEOFAL54, // sampleId - FX_SPOT, // type - 25, // delay (or random chance) - { // roomVolList - {54,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 166 George falls after going for the gun (GEOSYR42) - { - FX_GEOFAL54, // sampleId - FX_SPOT, // type - 46, // delay (or random chance) - { // roomVolList - {54,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 167 Pickaxe sound 5: Screen 1 - WRKDIG01 - { - FX_PICK5, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {1,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 168 George climbs ladder in 7: GEOASC07 - { - FX_SEWLADU7, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) * - { // roomVolList - {7,8,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 169 George picks keys up in Alamut: GEOKEYS1 - { - FX_KEYS49, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {49,8,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 170 George puts down keys up in Alamut: GEOKEYS2 - { - FX_KEYS49, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) * - { // roomVolList - {49,8,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 171 George unlocks toilet door: GEOSYR43 - { - FX_UNLOCK49, // sampleId - FX_SPOT, // type - 16, // delay (or random chance) * - { // roomVolList - {49,6,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 172 George breaks the toilet chain. GEOSYR48 - { - FX_WCCHAIN, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {50,6,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 173 George breaks the branch of the cliff edge tree. GEOSYR20 - { - FX_BREKSTIK, // sampleId - FX_SPOT, // type - 16, // delay (or random chance) * - { // roomVolList - {54,6,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 174 George climbs down the cliff face. GEOSYR23 - { - FX_CLIMBDWN, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) * - { // roomVolList - {54,6,7}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 175 George pulls ring: GEOSYR26 - { - FX_RINGPULL, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {54,7,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 176 Bull's Head door opens: SECDOR - { - FX_SECDOR54, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {54,7,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 177 Inside Bull's Head door opens: DOOR55 (and its reverse). - { - FX_SECDOR55, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {55,4,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 178 Ayub opens door. AYU1 - { - FX_AYUBDOOR, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {45,8,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 179 George knocks at the door in location 4: GEONOK followed by reverse of GEONOK - { - FX_KNOKKNOK, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) * - { // roomVolList - {4,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 180 George knocks at the door in location 5: GEONOK05 - { - FX_KNOKKNOK, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) * - { // roomVolList - {5,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 181 Those pesky Irish birds turn up in Spain, too. - { - FX_SPNBIRD1, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) * - { // roomVolList - {57,1,4}, - {58,8,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 182 Those pesky Irish birds turn up in Spain, too. - { - FX_SPNBIRD2, // sampleId - FX_RANDOM, // type - 697, // delay (or random chance) * - { // roomVolList - {57,4,8}, // {roomNo,leftVol,rightVol} - {58,4,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 183 The secret door in the well: SECDOR61 anim - { - FX_SECDOR61, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {61,4,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 184 Spanish countryside ambience - { - FX_SPAIN, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {57,1,2}, // - {58,2,2}, // - {60,1,1}, // - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 185 Spanish well ambience - { - FX_WELLDRIP, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {61,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 186 Fish falls on George's head: GEOTOT29 - { - FX_FISHFALL, // sampleId - FX_SPOT, // type - 60, // delay (or random chance) * - { // roomVolList - {29,10,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 187 Hospital exterior ambience - { - FX_HOSPEXT, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {31,3,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 188 Hospital exterior gravel footstep #1 - { - FX_GRAVEL1, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {31,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 189 Hospital exterior gravel footstep #2 - { - FX_GRAVEL2, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {31,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 190 George opens sarcophagus: GEOSAR - { - FX_SARCO28A, // sampleId - FX_SPOT, // type - 26, // delay (or random chance) * - { // roomVolList - {28,6,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 191 George closes sarcophagus: GEOSAR2 - { - FX_SARCO28B, // sampleId - FX_SPOT, // type - 24, // delay (or random chance) * - { // roomVolList - {28,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 192 Guard opens sarcophagus: MUSOPN - { - FX_SARCO28C, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) * - { // roomVolList - {28,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 193 George peeks out of sarcophagus: GEOPEEK - { - FX_SARCO29, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) * - { // roomVolList - {29,5,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 194 The rope drops into the room: ROPE29 - { - FX_ROPEDOWN, // sampleId - FX_SPOT, // type - 3, // delay (or random chance) * - { // roomVolList - {29,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 195 George pushes the totem pole: GEOTOT29 - { - FX_TOTEM29A, // sampleId - FX_SPOT, // type - 30, // delay (or random chance) * - { // roomVolList - {29,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 196 George pushes the totem pole over: GEOTOTB - { - FX_TOTEM29B, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {29,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 197 George rocks the totem pole in museum hours: TOTEM28 - { - FX_TOTEM28A, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) * - { // roomVolList - {28,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 198 Ambient sound for Montfauçon Square - { - FX_MONTAMB, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {36,6,6}, // {roomNo,leftVol,rightVol} - {40,6,6}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 199 Ambient sound churchyard. - { - FX_WIND71, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) * - { // roomVolList - {71,10,10}, // {roomNo,leftVol,rightVol} - {72,7,7}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 200 Owl cry #1 in churchyard - { - FX_OWL71A, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) * - { // roomVolList - {71,8,8}, // {roomNo,leftVol,rightVol} - {72,6,4}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 201 Owl cry #2 in churchyard - { - FX_OWL71B, // sampleId - FX_RANDOM, // type - 1080, // delay (or random chance) * - { // roomVolList - {71,8,8}, // {roomNo,leftVol,rightVol} - {72,7,6}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 202 Air conditioner in the museum - { - FX_AIRCON28, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {28,6,6}, // {roomNo,leftVol,rightVol} - {29,3,3}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 203 George breaks the handle off in the church tower. GEOWND72 - { - FX_COG72A, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) * - { // roomVolList - {72,10,10}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 204 Countess' room ambience - { - FX_AMBIEN56, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {56,3,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 205 Musical effect for George drinking beer. GEODRN20 - { - FX_DRINK, // sampleId - FX_SPOT, // type - 17, // delay (or random chance) * - { // roomVolList - {20,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 206 Torch thrown through the air. GEOTHROW - { - FX_TORCH73, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) * - { // roomVolList - {73,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 207 Internal train ambience. - { - FX_TRAININT, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {63,3,3}, // {roomNo,leftVol,rightVol} - {65,2,2}, - {66,2,2}, - {67,2,2}, - {69,2,2}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 208 Countess' clock. PENDULUM. Note: Trigger the sound effect on alternate runs of the pendulum animation. - { - FX_PENDULUM, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) * - { // roomVolList - {56,2,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 209 Compartment door. DOOR65 - { - FX_DOOR65, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {65,3,3}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 210 Opening window. GEOOPN1 - { - FX_WINDOW66, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) * - { // roomVolList - {66,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 211 Wind rip by the open window. Triggered at the end of effect 210. - { - FX_WIND66, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {66,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 212 George electrocutes himself on the pantograph. Fool. GEOSHK64 - { - FX_SHOCK63, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {63,12,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 213 The train brakes violently. GEOSTP69 - { - FX_BRAKES, // sampleId - FX_SPOT, // type - 13, // delay (or random chance) * - { // roomVolList - {69,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 214 The train ticks over. From the end of BRAKE. - { - FX_TICK69, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {69,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 215 Eklund shoot Khan. FIGHT69 - { - FX_EKSHOOT, // sampleId - FX_SPOT, // type - 120, // delay (or random chance) * - { // roomVolList - {69,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 216 Eklund shoots George. GEODIE69 - { - FX_EKSHOOT, // sampleId - FX_SPOT, // type - 21, // delay (or random chance) * - { // roomVolList - {69,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 217 Khan pulls the door open. FIGHT69 - { - FX_DOOR69, // sampleId - FX_SPOT, // type - 42, // delay (or random chance) * - { // roomVolList - {69,8,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 218 Wind shriek. Loops from the end of DOOR69 wav to the beginning of BRAKES. - { - FX_WIND66, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {69,8,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 219 Brakes releasing pressure. Only after BRAKE has been run. - { - FX_PNEUMO69, // sampleId - FX_RANDOM, // type - 720, // delay (or random chance) * - { // roomVolList - {69,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 220 External train sound. Played while George is on the top of the train. - { - FX_TRAINEXT, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {63,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 221 The passing train. FIGHT69 - { - FX_TRNPASS, // sampleId - FX_SPOT, // type - 102, // delay (or random chance) * - { // roomVolList - {69,4,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 222 George descends into sewer. GEODESO6 - { - FX_LADD2, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {6,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 223 George ascends into alley. GEOASC06 - { - FX_LADD3, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {6,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 224 George replaces manhole cover. GEOMAN9 - { - FX_COVERON2, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) * - { // roomVolList - {2,12,11}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 225 Montfaucon sewer ambience. - { - FX_AMBIEN37, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {37,5,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 226 George's winning smile. GEOJMP72. - { - FX_PING, // sampleId - FX_SPOT, // type - 26, // delay (or random chance) * - { // roomVolList - {72,10,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 227 George starts to open the manhole. GEO36KNE - { - FX_MANOP36, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) * - { // roomVolList - {36,4,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 228 George opens the manhole. GEO36OPE - { - FX_PULLUP36, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {36,4,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 229 George replaces the manhole cover. GEO36CLO - { - FX_REPLCE36, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) * - { // roomVolList - {36,4,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 230 George knocks at righthand arch. GEO37TA3 - { - FX_KNOCK37, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) * - { // roomVolList - {37,6,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 231 George knocks at middle or lefthand arch. GEO37TA1 or GEO37TA2. - { - FX_KNOCK37B, // sampleId - FX_SPOT, // type - 20, // delay (or random chance) * - { // roomVolList - {37,4,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 232 George winds the chain down HOO37LBO - { - FX_CHAIN37, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) * - { // roomVolList - {37,6,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 233 George winds the chain up. HOO37LBO (In reverse) - { - FX_CHAIN37B, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {37,6,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 234 George breaks hole in door. GEO37TA4 - { - FX_HOLE37, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {37,6,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 235 Plaster door collapses. DOR37COL - { - FX_DOOR37, // sampleId - FX_SPOT, // type - 23, // delay (or random chance) * - { // roomVolList - {37,8,15}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 236 Barge winch. GEO37TUL (If it runs more than once, trigger the effect on frame one. Incidentally, this is a reversible so the effect must launch on frame one of the .cdr version as well. ) - { - FX_WINCH37, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {37,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 237 George places chess piece. GEOSPA17 - { - FX_CHESS, // sampleId - FX_SPOT, // type - 23, // delay (or random chance) * - { // roomVolList - {59,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 238 Piano loop for the upstairs hotel corridor. - { - FX_PIANO14, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {14,2,2}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 239 Door opens in church tower. PANEL72 - { - FX_SECDOR72, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {72,8,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 240 George rummages through debris. Tied to the end of the whichever crouch is used. Use either this one or RUMMAGE2 alternatively or randomly. Same kind of schtick as the pick axe noises, I suppose. - { - FX_RUMMAGE1, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {72,8,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 241 George rummages through debris. See above for notes. - { - FX_RUMMAGE2, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {72,8,6}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 242 Gust of wind in the graveyard. - { - FX_GUST71, // sampleId - FX_RANDOM, // type - 1080, // delay (or random chance) * - { // roomVolList - {71,3,3}, // {roomNo,leftVol,rightVol} - {72,2,1}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 243 Violin ambience for Ireland. - { - FX_VIOLIN19, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {19,3,3}, // {roomNo,leftVol,rightVol} - {21,2,2}, - {26,2,2}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 244 Footstep #1 for underground locations. Same schtick as for 188 and 189. - { - FX_SEWSTEP1, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {6,8,8}, // {roomNo,leftVol,rightVol} - {7,8,8}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 245 Footstep #2 for underground locations. Same schtick as for 188 and 189. - { - FX_SEWSTEP2, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {6,16,16}, // {roomNo,leftVol,rightVol} - {7,16,16}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 246 Nico's carabiner as she descends into the museum. NICPUS1 - { - FX_CARABINE, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) * - { // roomVolList - {29,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 247 Rosso is shot (with a piece of field artillery). ROSSHOT - { - FX_GUN79, // sampleId - FX_SPOT, // type - 2, // delay (or random chance) * - { // roomVolList - {79,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 248 George is hit by the thrown stilletto. GEODIE1 - { - FX_DAGGER1, // sampleId - FX_SPOT, // type - 2, // delay (or random chance) * - { // roomVolList - {73,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 249 George is hit by the thrown stilletto after walking forward. GEODIE2 - { - FX_DAGGER1, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {73,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 250 Can hits the well water. The cue is in GAR2SC57.TXT immediately after the line, "over: Lopez threw the can away. It seemed to fall an awfully long way." - { - FX_CANFALL, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) * - { // roomVolList - {57,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 251 Mad, fizzing damp and ancient gunpowder after the application of a torch. - { - FX_GUNPOWDR, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {73,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 252 Maguire whistling. MAGSLK. Plays while Maguire is idling, stops abruptly when he does something else. - { - FX_WHISTLE, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {19,2,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 253 George is hit by the goat. GEOHITR and GEOHITL. - { - FX_GEOGOAT, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {24,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 254 Manager says, "Hello". MAN2 - { - FX_MANG1, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) * - { // roomVolList - {49,6,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 255 Manager says, Don't go in there!" MAN3 - { - FX_MANG2, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {49,6,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 256 Manager says, "Here are the keys." MAN4 - { - FX_MANG3, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) * - { // roomVolList - {49,6,5}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 257 George pulls the lion's tooth. GEOSPA26 - { - FX_TOOTHPUL, // sampleId - FX_SPOT, // type - 19, // delay (or random chance) * - { // roomVolList - {61,8,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 258 George escapes the lion. LION1 - { - FX_LIONFALL, // sampleId - FX_SPOT, // type - 7, // delay (or random chance) * - { // roomVolList - {61,8,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 259 George gets flattened. LION2 - { - FX_LIONFAL2, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) * - { // roomVolList - {61,8,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 260 Rosso dies. ROSSFALL - { - FX_ROSSODIE, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {74,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 261 Eklund chokes George. FIGHT79 - { - FX_CHOKE1, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {79,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 262 Eklund chokes George some more. FIGHT79 - { - FX_CHOKE2, // sampleId - FX_SPOT, // type - 54, // delay (or random chance) * - { // roomVolList - {79,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 263 Eklund dies. FIGHT79 - { - FX_FIGHT2, // sampleId - FX_SPOT, // type - 44, // delay (or random chance) * - { // roomVolList - {79,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 264 George hears museum break-in. GEOSUR29 - { - FX_DOOR29, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {94,14,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 265 George hits the floor having been shot. GEODED. - { - FX_GDROP29, // sampleId - FX_SPOT, // type - 27, // delay (or random chance) * - { // roomVolList - {29,10,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 266 George hits the floor having been stunned. GEOFISH - { - FX_GDROP29, // sampleId - FX_SPOT, // type - 27, // delay (or random chance) * - { // roomVolList - {29,10,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 267 Fitz being knocked down as heard from inside the pub. Triggered from the script, I think. This is just a stopgap until Hackenbacker do the full version for the Smacker, then I'll sample the requisite bit and put it in here. - { - FX_FITZHIT, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {20,16,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 268 Gendarme shoots lock off. GENSHOT - { - FX_GUN34, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {34,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 269 ECG alarm, Marquet in trouble. Start looping imeediately before George says, "Thanks, Bunny". - // Incidentally, James, please switch off Mr Shiney permanently when George first gets into Marquet's room. He gets in the way when they're figuring out that Eklund's an imposter. - { - FX_PULSE2, // sampleId - FX_LOOP, // type - 1, // delay (or random chance) * - { // roomVolList - {30,16,16}, // {roomNo,leftVol,rightVol} - {34,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 270 ECG alarm, Marquet dead. Switch off the previous effect and replace with this immediately before the gendarme says, "Stand back, messieurs." - { - FX_PULSE3, // sampleId - FX_LOOP, // type - 1, // delay (or random chance) * - { // roomVolList - {30,16,16}, // {roomNo,leftVol,rightVol} - {34,13,13}, - {35,13,13}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 271 Door closing. GEOENT15 - { - FX_DORCLOSE, // sampleId - FX_SPOT, // type - 4, // delay (or random chance) * - { // roomVolList - {15,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 272 Cupboard opening. GEOCOT - { - FX_CUPBOPEN, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) * - { // roomVolList - {33,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 273 Cupboard closing. GEOCOT - { - FX_CUPBCLOS, // sampleId - FX_SPOT, // type - 33, // delay (or random chance) * - { // roomVolList - {33,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 274 Closing door when George leaves hotel room. GEOLVS15 and GEODOR17 (they're identical). - { - FX_DORCLOSE, // sampleId - FX_SPOT, // type - 44, // delay (or random chance) * - { // roomVolList - {15,12,12}, // {roomNo,leftVol,rightVol} - {17,12,12}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 275 Closing door when George leaves the pub. DOROPN20 (Reversed) - { - FX_DORCLOSE20,// sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {20,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 276 Nico call for a cab. NICPHN10 - { - FX_PHONICO1, // sampleId - FX_SPOT, // type - 15, // delay (or random chance) * - { // roomVolList - {10,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 277 Nico puts down the phone. NICDWN10 - { - FX_FONEDN, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) * - { // roomVolList - {10,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 278 Painter puts down the phone. PAI41HAN - { - FX_FONEDN41, // sampleId - FX_SPOT, // type - 5, // delay (or random chance) * - { // roomVolList - {41,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 279 Mechanical hum of heating system in the dig lobby. - { - FX_AIRCON41, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {41,6,6}, // {roomNo,leftVol,rightVol} - {43,8,8}, - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - //------------------------ - // 280 The Sword is Reforged (Grandmaster gets zapped) GMPOWER - { - FX_REFORGE1, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {78,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 281 The Sword is Reforged (G&N gawp at the spectacle) There's no anim I know of to tie it to unless the flickering blue light is one. - { - FX_REFORGE2, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {75,12,12}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 282 The Sword is Reforged (We watch over G&N's heads as the Grandmaster gets zapped) GMWRIT74 - { - FX_REFORGE2, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {74,14,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 283 The Sword is Reforged (Grandmaster finishes being zapped) GMWRITH - { - FX_REFORGE4, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {78,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 284 Baphomet Cavern Ambience - { - FX_BAPHAMB, // sampleId - FX_LOOP, // type - 0, // delay (or random chance) * - { // roomVolList - {74,6,8}, // {roomNo,leftVol,rightVol} - {75,7,8}, // {roomNo,leftVol,rightVol} - {76,8,8}, // {roomNo,leftVol,rightVol} - {77,8,8}, // {roomNo,leftVol,rightVol} - {78,8,8}, // {roomNo,leftVol,rightVol} - {79,7,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 285 Duane's Happy-Snappy Camera. XDNEPHO3 and XDNEPHO5. - { - FX_CAMERA45, // sampleId - FX_SPOT, // type - 30, // delay (or random chance) * - { // roomVolList - {45,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 286 Grand Master strikes the floor with his cane. GMENTER - { - FX_STAFF, // sampleId - FX_SPOT, // type - 28, // delay (or random chance) * - { // roomVolList - {73,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 287 George descends ladder in 7: GEOASC07 (Reversed) This used to be handled by effect #46 but it didn't fit at all. - { - FX_SEWLADD7, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {7,8,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 288 Sam kicks the recalcitrant Mr. Shiny. DOMKIK - { - FX_KIKSHINY, // sampleId - FX_SPOT, // type - 16, // delay (or random chance) * - { // roomVolList - {33,9,9}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 289 Gust of wind outside bombed cafe. LVSFLY - { - FX_LVSFLY, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {1,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 290 Ron's disgusting No.1 Sneeze. Either this or the next effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2 - { - FX_SNEEZE1, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {20,10,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 291 Ron's disgusting No.2 Sneeze. Either this or the previous effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2 - { - FX_SNEEZE2, // sampleId - FX_SPOT, // type - 11, // delay (or random chance) * - { // roomVolList - {20,10,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 292 Dripping tap in the pub cellar. TAPDRP - { - FX_DRIPIRE, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {21,4,4}, // {roomNo,leftVol,rightVol} - {26,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 293 Dripping tap in the pub cellar. TAPDRP - { - FX_DRIPIRE2, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {21,4,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 294 Dripping tap in the excavation toilet. (see WATER43 - but it's looped anyway, not triggered with anim) - { - FX_TAPDRIP, // sampleId - FX_SPOT, // type - 6, // delay (or random chance) * - { // roomVolList - {43,8,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 295 George closes the mausoleum window. GEOSPA23 - { - FX_WINDOW59, // sampleId - FX_SPOT, // type - 24, // delay (or random chance) * - { // roomVolList - {59,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 296 George opens the mausoleum window, the feebleminded loon. GEOSPA23 reversed. - { - FX_WINDOW59, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) * - { // roomVolList - {59,10,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 297 When George & Nico hear chanting from sc73 - { - FX_CHANT, // sampleId - FX_SPOT, // type - 10, // delay (or random chance) * - { // roomVolList - {73,2,4}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 298 EKFIGHT - { - FX_FIGHT1, // sampleId - FX_SPOT, // type - 31, // delay (or random chance) * - { // roomVolList - {74,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 299 Small van passes, left to right. CARA9 and CARC9 - { - FX_LITEVEHR, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {9,16,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 300 Small van passes, right to left to right. CARB9 - { - FX_LITEVEHL, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {9,16,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 301 Truck passes, left to right. TRUCKA9 and TRUCKB9 - { - FX_HVYVEHR, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {9,14,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 302 Truck passes, right to left. TRUCKC9 - { - FX_HVYVEHL, // sampleId - FX_SPOT, // type - 1, // delay (or random chance) * - { // roomVolList - {9,14,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 303 With anim FIGHT69 - { - FX_FIGHT69, // sampleId - FX_SPOT, // type - 78, // delay (or random chance) * - { // roomVolList - {69,12,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 304 With anim GEODIE1 in sc73 - { - FX_GDROP73, // sampleId - FX_SPOT, // type - 14, // delay (or random chance) * - { // roomVolList - {73,12,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 305 With anim GEODIE2 in sc73 - { - FX_GDROP73, // sampleId - FX_SPOT, // type - 21, // delay (or random chance) * - { // roomVolList - {73,12,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 306 With anim GEODES25 - { - FX_LADDWN25, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {25,12,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 307 With anim GEOASC25 - { - FX_LADDUP25, // sampleId - FX_SPOT, // type - 8, // delay (or random chance) * - { // roomVolList - {25,12,8}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 308 With anim GKSWORD in sc76 - { - FX_GKSWORD, // sampleId - FX_SPOT, // type - 9, // delay (or random chance) * - { // roomVolList - {76,10,10}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 309 With anim GEO36KNE in sc36 - { - FX_KEYIN, // sampleId - FX_SPOT, // type - 18, // delay (or random chance) * - { // roomVolList - {36,14,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 310 With anim GEO36ENT in sc36 - { - FX_COVDWN, // sampleId - FX_SPOT, // type - 85, // delay (or random chance) * - { // roomVolList - {36,14,14}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - // 311 With anim SECDOR59 in sc59 - { - FX_SECDOR59, // sampleId - FX_SPOT, // type - 0, // delay (or random chance) * - { // roomVolList - {59,16,16}, // {roomNo,leftVol,rightVol} - {0,0,0}, // NULL-TERMINATOR - }, - }, - //------------------------ - }; - - writeRecord(_fxList, sizeof(_fxList), GBVARS_FXLIST_INDEX , GBVARS_SWORD1); -} - -void Sword1_addStaticres() { - addStaticres_fxList(); -} diff --git a/backends/PalmOS/Src/builder/sword1/sw1_staticres.h b/backends/PalmOS/Src/builder/sword1/sw1_staticres.h deleted file mode 100644 index 796e3d10ed..0000000000 --- a/backends/PalmOS/Src/builder/sword1/sw1_staticres.h +++ /dev/null @@ -1,5201 +0,0 @@ -#ifndef SWORDRES_H -#define SWORDRES_H - -//namespace Sword1 { - -// scripts - // standard -#define SCRIPT0 0x01000000 - // 1 entities in TXTs, 1 in datafiles. - // megas -#define SCRIPT128 0x01010000 -#define SCRIPT129 0x01010001 -#define SCRIPT130 0x01010002 -#define SCRIPT131 0x01010003 -#define SCRIPT133 0x01010004 -#define SCRIPT134 0x01010005 -#define SCRIPT145 0x01010006 -#define SCRIPT146 0x01010007 - // 8 entities in TXTs, 8 in datafiles. - // maps -#define SCRIPT80 0x01020000 -#define SCRIPT86 0x01020001 -#define SCRIPT90 0x01020002 - // 3 entities in TXTs, 3 in datafiles. - // paris1 -#define SCRIPT1 0x01030000 -#define SCRIPT2 0x01030001 -#define SCRIPT3 0x01030002 -#define SCRIPT4 0x01030003 -#define SCRIPT5 0x01030004 -#define SCRIPT6 0x01030005 -#define SCRIPT7 0x01030006 -#define SCRIPT8 0x01030007 - // 8 entities in TXTs, 8 in datafiles. - // paris2 -#define SCRIPT9 0x01040000 -#define SCRIPT10 0x01040001 -#define SCRIPT11 0x01040002 -#define SCRIPT12 0x01040003 -#define SCRIPT13 0x01040004 -#define SCRIPT14 0x01040005 -#define SCRIPT15 0x01040006 -#define SCRIPT16 0x01040007 -#define SCRIPT17 0x01040008 -#define SCRIPT18 0x01040009 -#define SCRIPT46 0x0104000A - // 11 entities in TXTs, 11 in datafiles. - // paris3 -#define SCRIPT27 0x01050000 -#define SCRIPT28 0x01050001 -#define SCRIPT29 0x01050002 -#define SCRIPT31 0x01050003 -#define SCRIPT32 0x01050004 -#define SCRIPT33 0x01050005 -#define SCRIPT34 0x01050006 -#define SCRIPT35 0x01050007 - // 8 entities in TXTs, 8 in datafiles. - // paris4 -#define SCRIPT36 0x01060000 -#define SCRIPT37 0x01060001 -#define SCRIPT38 0x01060002 -#define SCRIPT39 0x01060003 -#define SCRIPT40 0x01060004 -#define SCRIPT41 0x01060005 -#define SCRIPT42 0x01060006 -#define SCRIPT43 0x01060007 -#define SCRIPT48 0x01060008 - // 9 entities in TXTs, 9 in datafiles. - // ireland -#define SCRIPT19 0x01070000 -#define SCRIPT20 0x01070001 -#define SCRIPT21 0x01070002 -#define SCRIPT22 0x01070003 -#define SCRIPT23 0x01070004 -#define SCRIPT24 0x01070005 -#define SCRIPT25 0x01070006 -#define SCRIPT26 0x01070007 - // 8 entities in TXTs, 8 in datafiles. - // spain -#define SCRIPT56 0x01080000 -#define SCRIPT57 0x01080001 -#define SCRIPT58 0x01080002 -#define SCRIPT59 0x01080003 -#define SCRIPT60 0x01080004 -#define SCRIPT61 0x01080005 -#define SCRIPT62 0x01080006 - // 7 entities in TXTs, 7 in datafiles. - // syria -#define SCRIPT45 0x01090000 -#define SCRIPT47 0x01090001 -#define SCRIPT49 0x01090002 -#define SCRIPT50 0x01090003 -#define SCRIPT54 0x01090004 -#define SCRIPT55 0x01090005 - // 6 entities in TXTs, 6 in datafiles. - // train -#define SCRIPT63 0x010A0000 -#define SCRIPT65 0x010A0001 -#define SCRIPT66 0x010A0002 -#define SCRIPT67 0x010A0003 -#define SCRIPT69 0x010A0004 - // 5 entities in TXTs, 5 in datafiles. - // scotland -#define SCRIPT71 0x010B0000 -#define SCRIPT72 0x010B0001 -#define SCRIPT73 0x010B0002 -#define SCRIPT74 0x010B0003 - // 4 entities in TXTs, 4 in datafiles. -// compacts - // standard -#define TEXT_OBS 0x02000000 - // 1 entities in TXTs, 1 in datafiles. - // megas -#define MEGA_GEO 0x02010000 -#define GEO_TLK_TABLE 0x02010001 -#define WHT_TLK_TABLE 0x02010002 -#define GEO_SHRUG_TABLE 0x02010003 -#define GEO_GIVE_TABLE 0x02010004 -#define GEO_GIVER_TABLE 0x02010005 -#define GEO_CROUCH_TABLE 0x02010006 -#define GEO_CROUCHR_TABLE 0x02010007 -#define GEO_PICKUP_TABLE 0x02010008 -#define GEO_RELAX_TABLE 0x02010009 -#define GEO_RELAXR_TABLE 0x0201000A -#define GEO_HAIR_TABLE 0x0201000B -#define GEO_BLINK_TABLE 0x0201000C -#define GEOPHN_TABLE 0x0201000D -#define GEO_GAUGE_TABLE 0x0201000E -#define GEO_SHOW_TABLE 0x0201000F -#define GEO_SHOWR_TABLE 0x02010010 -#define GEOSTA_TABLE 0x02010011 -#define GEOMON_TABLE 0x02010012 -#define MEGA_DUANE 0x02010013 -#define DUA5_TABLE 0x02010014 -#define DUA6_TABLE 0x02010015 -#define DUA7_TABLE 0x02010016 -#define DUA8_TABLE 0x02010017 -#define DUA9_TABLE 0x02010018 -#define MEGA_NICO 0x02010019 -#define NIC_TLK_TABLE 0x0201001A -#define NIC_PHOTO_TABLE 0x0201001B -#define NICPHN_TABLE 0x0201001C -#define MEGA_MUS 0x0201001D -#define MUS_TLK_TABLE 0x0201001E -#define MEGA_BENOIR 0x0201001F -#define BEN_GAUGE_TABLE 0x02010020 -#define BEN_TLK_TABLE 0x02010021 -#define MEGA_ROSSO 0x02010022 -#define MEGA_MOUE 0x02010023 -#define MEGA_ALBERT 0x02010024 - // 37 entities in TXTs, 37 in datafiles. - // maps -#define COMP80 0x02020000 -#define COMP86 0x02020001 -#define COMP90 0x02020002 -#define COMP91 0x02020003 -#define COMP99 0x02020004 - // 5 entities in TXTs, 5 in datafiles. - // paris1 -#define COMP1 0x02030000 -#define COMP2 0x02030001 -#define COMP3 0x02030002 -#define COMP4 0x02030003 -#define COMP5 0x02030004 -#define COMP6 0x02030005 -#define COMP7 0x02030006 -#define COMP8 0x02030007 - // 8 entities in TXTs, 8 in datafiles. - // paris2 -#define COMP9 0x02040000 -#define COMP10 0x02040001 -#define COMP11 0x02040002 -#define COMP12 0x02040003 -#define COMP13 0x02040004 -#define COMP14 0x02040005 -#define COMP15 0x02040006 -#define COMP16 0x02040007 -#define COMP17 0x02040008 -#define COMP18 0x02040009 -#define COMP81 0x0204000A -#define COMP46 0x0204000B - // 12 entities in TXTs, 12 in datafiles. - // paris3 -#define COMP27 0x02050000 -#define COMP28 0x02050001 -#define COMP29 0x02050002 -#define COMP30 0x02050003 -#define COMP31 0x02050004 -#define COMP32 0x02050005 -#define COMP33 0x02050006 -#define COMP34 0x02050007 -#define COMP35 0x02050008 - // 9 entities in TXTs, 9 in datafiles. - // paris4 -#define COMP36 0x02060000 -#define COMP37 0x02060001 -#define COMP38 0x02060002 -#define COMP39 0x02060003 -#define COMP40 0x02060004 -#define COMP41 0x02060005 -#define COMP42 0x02060006 -#define COMP43 0x02060007 -#define COMP48 0x02060008 - // 9 entities in TXTs, 9 in datafiles. - // ireland -#define COMP19 0x02070000 -#define COMP20 0x02070001 -#define COMP21 0x02070002 -#define COMP22 0x02070003 -#define COMP23 0x02070004 -#define COMP24 0x02070005 -#define COMP25 0x02070006 -#define COMP26 0x02070007 - // 8 entities in TXTs, 8 in datafiles. - // spain -#define COMP56 0x02080000 -#define COMP57 0x02080001 -#define COMP58 0x02080002 -#define COMP59 0x02080003 -#define COMP60 0x02080004 -#define COMP61 0x02080005 -#define COMP62 0x02080006 - // 7 entities in TXTs, 7 in datafiles. - // syria -#define COMP45 0x02090000 -#define COMP47 0x02090001 -#define COMP49 0x02090002 -#define COMP50 0x02090003 -#define COMP53 0x02090004 -#define COMP54 0x02090005 -#define COMP55 0x02090006 - // 7 entities in TXTs, 7 in datafiles. - // train -#define COMP63 0x020A0000 -#define COMP65 0x020A0001 -#define COMP66 0x020A0002 -#define COMP67 0x020A0003 -#define COMP69 0x020A0004 - // 5 entities in TXTs, 5 in datafiles. - // scotland -#define COMP71 0x020B0000 -#define COMP72 0x020B0001 -#define COMP73 0x020B0002 -#define COMP74 0x020B0003 -#define COMP75 0x020B0004 -#define COMP76 0x020B0005 -#define COMP77 0x020B0006 -#define COMP78 0x020B0007 -#define COMP79 0x020B0008 - // 9 entities in TXTs, 9 in datafiles. -// text - // english -#define ENGLISH0 0x03000000 -#define ENGLISH1 0x03000001 -#define ENGLISH2 0x03000002 -#define ENGLISH3 0x03000003 -#define ENGLISH4 0x03000004 -#define ENGLISH5 0x03000005 -#define ENGLISH6 0x03000006 -#define ENGLISH7 0x03000007 -#define ENGLISH9 0x03000008 -#define ENGLISH11 0x03000009 -#define ENGLISH12 0x0300000A -#define ENGLISH13 0x0300000B -#define ENGLISH14 0x0300000C -#define ENGLISH15 0x0300000D -#define ENGLISH16 0x0300000E -#define ENGLISH17 0x0300000F -#define ENGLISH18 0x03000010 -#define ENGLISH19 0x03000011 -#define ENGLISH20 0x03000012 -#define ENGLISH21 0x03000013 -#define ENGLISH22 0x03000014 -#define ENGLISH23 0x03000015 -#define ENGLISH24 0x03000016 -#define ENGLISH25 0x03000017 -#define ENGLISH27 0x03000018 -#define ENGLISH28 0x03000019 -#define ENGLISH29 0x0300001A -#define ENGLISH31 0x0300001B -#define ENGLISH32 0x0300001C -#define ENGLISH33 0x0300001D -#define ENGLISH34 0x0300001E -#define ENGLISH35 0x0300001F -#define ENGLISH36 0x03000020 -#define ENGLISH37 0x03000021 -#define ENGLISH38 0x03000022 -#define ENGLISH39 0x03000023 -#define ENGLISH40 0x03000024 -#define ENGLISH41 0x03000025 -#define ENGLISH42 0x03000026 -#define ENGLISH43 0x03000027 -#define ENGLISH45 0x03000028 -#define ENGLISH47 0x03000029 -#define ENGLISH48 0x0300002A -#define ENGLISH49 0x0300002B -#define ENGLISH50 0x0300002C -#define ENGLISH54 0x0300002D -#define ENGLISH55 0x0300002E -#define ENGLISH56 0x0300002F -#define ENGLISH57 0x03000030 -#define ENGLISH58 0x03000031 -#define ENGLISH59 0x03000032 -#define ENGLISH60 0x03000033 -#define ENGLISH61 0x03000034 -#define ENGLISH63 0x03000035 -#define ENGLISH65 0x03000036 -#define ENGLISH66 0x03000037 -#define ENGLISH69 0x03000038 -#define ENGLISH71 0x03000039 -#define ENGLISH72 0x0300003A -#define ENGLISH73 0x0300003B -#define ENGLISH74 0x0300003C -#define ENGLISH90 0x0300003D -#define ENGLISH99 0x0300003E -#define ENGLISH129 0x0300003F -#define ENGLISH131 0x03000040 -#define ENGLISH133 0x03000041 -#define ENGLISH145 0x03000042 -#define ENGLISH146 0x03000043 - // 68 entities in TXTs, 68 in datafiles. - // french -#define FRENCH0 0x03010000 -#define FRENCH1 0x03010001 -#define FRENCH2 0x03010002 -#define FRENCH3 0x03010003 -#define FRENCH4 0x03010004 -#define FRENCH5 0x03010005 -#define FRENCH6 0x03010006 -#define FRENCH7 0x03010007 -#define FRENCH9 0x03010008 -#define FRENCH11 0x03010009 -#define FRENCH12 0x0301000A -#define FRENCH13 0x0301000B -#define FRENCH14 0x0301000C -#define FRENCH15 0x0301000D -#define FRENCH16 0x0301000E -#define FRENCH17 0x0301000F -#define FRENCH18 0x03010010 -#define FRENCH19 0x03010011 -#define FRENCH20 0x03010012 -#define FRENCH21 0x03010013 -#define FRENCH22 0x03010014 -#define FRENCH23 0x03010015 -#define FRENCH24 0x03010016 -#define FRENCH25 0x03010017 -#define FRENCH27 0x03010018 -#define FRENCH28 0x03010019 -#define FRENCH29 0x0301001A -#define FRENCH31 0x0301001B -#define FRENCH32 0x0301001C -#define FRENCH33 0x0301001D -#define FRENCH34 0x0301001E -#define FRENCH35 0x0301001F -#define FRENCH36 0x03010020 -#define FRENCH37 0x03010021 -#define FRENCH38 0x03010022 -#define FRENCH39 0x03010023 -#define FRENCH40 0x03010024 -#define FRENCH41 0x03010025 -#define FRENCH42 0x03010026 -#define FRENCH43 0x03010027 -#define FRENCH45 0x03010028 -#define FRENCH47 0x03010029 -#define FRENCH48 0x0301002A -#define FRENCH49 0x0301002B -#define FRENCH50 0x0301002C -#define FRENCH54 0x0301002D -#define FRENCH55 0x0301002E -#define FRENCH56 0x0301002F -#define FRENCH57 0x03010030 -#define FRENCH58 0x03010031 -#define FRENCH59 0x03010032 -#define FRENCH60 0x03010033 -#define FRENCH61 0x03010034 -#define FRENCH63 0x03010035 -#define FRENCH65 0x03010036 -#define FRENCH66 0x03010037 -#define FRENCH69 0x03010038 -#define FRENCH71 0x03010039 -#define FRENCH72 0x0301003A -#define FRENCH73 0x0301003B -#define FRENCH74 0x0301003C -#define FRENCH90 0x0301003D -#define FRENCH99 0x0301003E -#define FRENCH129 0x0301003F -#define FRENCH131 0x03010040 -#define FRENCH133 0x03010041 -#define FRENCH145 0x03010042 -#define FRENCH146 0x03010043 - // 68 entities in TXTs, 68 in datafiles. - // german -#define GERMAN0 0x03020000 -#define GERMAN1 0x03020001 -#define GERMAN2 0x03020002 -#define GERMAN3 0x03020003 -#define GERMAN4 0x03020004 -#define GERMAN5 0x03020005 -#define GERMAN6 0x03020006 -#define GERMAN7 0x03020007 -#define GERMAN9 0x03020008 -#define GERMAN11 0x03020009 -#define GERMAN12 0x0302000A -#define GERMAN13 0x0302000B -#define GERMAN14 0x0302000C -#define GERMAN15 0x0302000D -#define GERMAN16 0x0302000E -#define GERMAN17 0x0302000F -#define GERMAN18 0x03020010 -#define GERMAN19 0x03020011 -#define GERMAN20 0x03020012 -#define GERMAN21 0x03020013 -#define GERMAN22 0x03020014 -#define GERMAN23 0x03020015 -#define GERMAN24 0x03020016 -#define GERMAN25 0x03020017 -#define GERMAN27 0x03020018 -#define GERMAN28 0x03020019 -#define GERMAN29 0x0302001A -#define GERMAN31 0x0302001B -#define GERMAN32 0x0302001C -#define GERMAN33 0x0302001D -#define GERMAN34 0x0302001E -#define GERMAN35 0x0302001F -#define GERMAN36 0x03020020 -#define GERMAN37 0x03020021 -#define GERMAN38 0x03020022 -#define GERMAN39 0x03020023 -#define GERMAN40 0x03020024 -#define GERMAN41 0x03020025 -#define GERMAN42 0x03020026 -#define GERMAN43 0x03020027 -#define GERMAN45 0x03020028 -#define GERMAN47 0x03020029 -#define GERMAN48 0x0302002A -#define GERMAN49 0x0302002B -#define GERMAN50 0x0302002C -#define GERMAN54 0x0302002D -#define GERMAN55 0x0302002E -#define GERMAN56 0x0302002F -#define GERMAN57 0x03020030 -#define GERMAN58 0x03020031 -#define GERMAN59 0x03020032 -#define GERMAN60 0x03020033 -#define GERMAN61 0x03020034 -#define GERMAN63 0x03020035 -#define GERMAN65 0x03020036 -#define GERMAN66 0x03020037 -#define GERMAN69 0x03020038 -#define GERMAN71 0x03020039 -#define GERMAN72 0x0302003A -#define GERMAN73 0x0302003B -#define GERMAN74 0x0302003C -#define GERMAN90 0x0302003D -#define GERMAN99 0x0302003E -#define GERMAN129 0x0302003F -#define GERMAN131 0x03020040 -#define GERMAN133 0x03020041 -#define GERMAN145 0x03020042 -#define GERMAN146 0x03020043 - // 68 entities in TXTs, 68 in datafiles. - // italian -#define ITALIAN0 0x03030000 -#define ITALIAN1 0x03030001 -#define ITALIAN2 0x03030002 -#define ITALIAN3 0x03030003 -#define ITALIAN4 0x03030004 -#define ITALIAN5 0x03030005 -#define ITALIAN6 0x03030006 -#define ITALIAN7 0x03030007 -#define ITALIAN9 0x03030008 -#define ITALIAN11 0x03030009 -#define ITALIAN12 0x0303000A -#define ITALIAN13 0x0303000B -#define ITALIAN14 0x0303000C -#define ITALIAN15 0x0303000D -#define ITALIAN16 0x0303000E -#define ITALIAN17 0x0303000F -#define ITALIAN18 0x03030010 -#define ITALIAN19 0x03030011 -#define ITALIAN20 0x03030012 -#define ITALIAN21 0x03030013 -#define ITALIAN22 0x03030014 -#define ITALIAN23 0x03030015 -#define ITALIAN24 0x03030016 -#define ITALIAN25 0x03030017 -#define ITALIAN27 0x03030018 -#define ITALIAN28 0x03030019 -#define ITALIAN29 0x0303001A -#define ITALIAN31 0x0303001B -#define ITALIAN32 0x0303001C -#define ITALIAN33 0x0303001D -#define ITALIAN34 0x0303001E -#define ITALIAN35 0x0303001F -#define ITALIAN36 0x03030020 -#define ITALIAN37 0x03030021 -#define ITALIAN38 0x03030022 -#define ITALIAN39 0x03030023 -#define ITALIAN40 0x03030024 -#define ITALIAN41 0x03030025 -#define ITALIAN42 0x03030026 -#define ITALIAN43 0x03030027 -#define ITALIAN45 0x03030028 -#define ITALIAN47 0x03030029 -#define ITALIAN48 0x0303002A -#define ITALIAN49 0x0303002B -#define ITALIAN50 0x0303002C -#define ITALIAN54 0x0303002D -#define ITALIAN55 0x0303002E -#define ITALIAN56 0x0303002F -#define ITALIAN57 0x03030030 -#define ITALIAN58 0x03030031 -#define ITALIAN59 0x03030032 -#define ITALIAN60 0x03030033 -#define ITALIAN61 0x03030034 -#define ITALIAN63 0x03030035 -#define ITALIAN65 0x03030036 -#define ITALIAN66 0x03030037 -#define ITALIAN69 0x03030038 -#define ITALIAN71 0x03030039 -#define ITALIAN72 0x0303003A -#define ITALIAN73 0x0303003B -#define ITALIAN74 0x0303003C -#define ITALIAN90 0x0303003D -#define ITALIAN99 0x0303003E -#define ITALIAN129 0x0303003F -#define ITALIAN131 0x03030040 -#define ITALIAN133 0x03030041 -#define ITALIAN145 0x03030042 -#define ITALIAN146 0x03030043 - // 68 entities in TXTs, 68 in datafiles. - // spanish -#define SPANISH0 0x03040000 -#define SPANISH1 0x03040001 -#define SPANISH2 0x03040002 -#define SPANISH3 0x03040003 -#define SPANISH4 0x03040004 -#define SPANISH5 0x03040005 -#define SPANISH6 0x03040006 -#define SPANISH7 0x03040007 -#define SPANISH9 0x03040008 -#define SPANISH11 0x03040009 -#define SPANISH12 0x0304000A -#define SPANISH13 0x0304000B -#define SPANISH14 0x0304000C -#define SPANISH15 0x0304000D -#define SPANISH16 0x0304000E -#define SPANISH17 0x0304000F -#define SPANISH18 0x03040010 -#define SPANISH19 0x03040011 -#define SPANISH20 0x03040012 -#define SPANISH21 0x03040013 -#define SPANISH22 0x03040014 -#define SPANISH23 0x03040015 -#define SPANISH24 0x03040016 -#define SPANISH25 0x03040017 -#define SPANISH27 0x03040018 -#define SPANISH28 0x03040019 -#define SPANISH29 0x0304001A -#define SPANISH31 0x0304001B -#define SPANISH32 0x0304001C -#define SPANISH33 0x0304001D -#define SPANISH34 0x0304001E -#define SPANISH35 0x0304001F -#define SPANISH36 0x03040020 -#define SPANISH37 0x03040021 -#define SPANISH38 0x03040022 -#define SPANISH39 0x03040023 -#define SPANISH40 0x03040024 -#define SPANISH41 0x03040025 -#define SPANISH42 0x03040026 -#define SPANISH43 0x03040027 -#define SPANISH45 0x03040028 -#define SPANISH47 0x03040029 -#define SPANISH48 0x0304002A -#define SPANISH49 0x0304002B -#define SPANISH50 0x0304002C -#define SPANISH54 0x0304002D -#define SPANISH55 0x0304002E -#define SPANISH56 0x0304002F -#define SPANISH57 0x03040030 -#define SPANISH58 0x03040031 -#define SPANISH59 0x03040032 -#define SPANISH60 0x03040033 -#define SPANISH61 0x03040034 -#define SPANISH63 0x03040035 -#define SPANISH65 0x03040036 -#define SPANISH66 0x03040037 -#define SPANISH69 0x03040038 -#define SPANISH71 0x03040039 -#define SPANISH72 0x0304003A -#define SPANISH73 0x0304003B -#define SPANISH74 0x0304003C -#define SPANISH90 0x0304003D -#define SPANISH99 0x0304003E -#define SPANISH129 0x0304003F -#define SPANISH131 0x03040040 -#define SPANISH133 0x03040041 -#define SPANISH145 0x03040042 -#define SPANISH146 0x03040043 - // 68 entities in TXTs, 68 in datafiles. - // czech -#define CZECH0 0x03050000 -#define CZECH1 0x03050001 -#define CZECH2 0x03050002 -#define CZECH3 0x03050003 -#define CZECH4 0x03050004 -#define CZECH5 0x03050005 -#define CZECH6 0x03050006 -#define CZECH7 0x03050007 -#define CZECH9 0x03050008 -#define CZECH11 0x03050009 -#define CZECH12 0x0305000A -#define CZECH13 0x0305000B -#define CZECH14 0x0305000C -#define CZECH15 0x0305000D -#define CZECH16 0x0305000E -#define CZECH17 0x0305000F -#define CZECH18 0x03050010 -#define CZECH19 0x03050011 -#define CZECH20 0x03050012 -#define CZECH21 0x03050013 -#define CZECH22 0x03050014 -#define CZECH23 0x03050015 -#define CZECH24 0x03050016 -#define CZECH25 0x03050017 -#define CZECH27 0x03050018 -#define CZECH28 0x03050019 -#define CZECH29 0x0305001A -#define CZECH31 0x0305001B -#define CZECH32 0x0305001C -#define CZECH33 0x0305001D -#define CZECH34 0x0305001E -#define CZECH35 0x0305001F -#define CZECH36 0x03050020 -#define CZECH37 0x03050021 -#define CZECH38 0x03050022 -#define CZECH39 0x03050023 -#define CZECH40 0x03050024 -#define CZECH41 0x03050025 -#define CZECH42 0x03050026 -#define CZECH43 0x03050027 -#define CZECH45 0x03050028 -#define CZECH47 0x03050029 -#define CZECH48 0x0305002A -#define CZECH49 0x0305002B -#define CZECH50 0x0305002C -#define CZECH54 0x0305002D -#define CZECH55 0x0305002E -#define CZECH56 0x0305002F -#define CZECH57 0x03050030 -#define CZECH58 0x03050031 -#define CZECH59 0x03050032 -#define CZECH60 0x03050033 -#define CZECH61 0x03050034 -#define CZECH63 0x03050035 -#define CZECH65 0x03050036 -#define CZECH66 0x03050037 -#define CZECH69 0x03050038 -#define CZECH71 0x03050039 -#define CZECH72 0x0305003A -#define CZECH73 0x0305003B -#define CZECH74 0x0305003C -#define CZECH90 0x0305003D -#define CZECH99 0x0305003E -#define CZECH129 0x0305003F -#define CZECH131 0x03050040 -#define CZECH133 0x03050041 -#define CZECH145 0x03050042 -#define CZECH146 0x03050043 - // 68 entities in TXTs, ??? in datafiles. - // portugese -#define PORT0 0x03060000 -#define PORT1 0x03060001 -#define PORT2 0x03060002 -#define PORT3 0x03060003 -#define PORT4 0x03060004 -#define PORT5 0x03060005 -#define PORT6 0x03060006 -#define PORT7 0x03060007 -#define PORT9 0x03060008 -#define PORT11 0x03060009 -#define PORT12 0x0306000A -#define PORT13 0x0306000B -#define PORT14 0x0306000C -#define PORT15 0x0306000D -#define PORT16 0x0306000E -#define PORT17 0x0306000F -#define PORT18 0x03060010 -#define PORT19 0x03060011 -#define PORT20 0x03060012 -#define PORT21 0x03060013 -#define PORT22 0x03060014 -#define PORT23 0x03060015 -#define PORT24 0x03060016 -#define PORT25 0x03060017 -#define PORT27 0x03060018 -#define PORT28 0x03060019 -#define PORT29 0x0306001A -#define PORT31 0x0306001B -#define PORT32 0x0306001C -#define PORT33 0x0306001D -#define PORT34 0x0306001E -#define PORT35 0x0306001F -#define PORT36 0x03060020 -#define PORT37 0x03060021 -#define PORT38 0x03060022 -#define PORT39 0x03060023 -#define PORT40 0x03060024 -#define PORT41 0x03060025 -#define PORT42 0x03060026 -#define PORT43 0x03060027 -#define PORT45 0x03060028 -#define PORT47 0x03060029 -#define PORT48 0x0306002A -#define PORT49 0x0306002B -#define PORT50 0x0306002C -#define PORT54 0x0306002D -#define PORT55 0x0306002E -#define PORT56 0x0306002F -#define PORT57 0x03060030 -#define PORT58 0x03060031 -#define PORT59 0x03060032 -#define PORT60 0x03060033 -#define PORT61 0x03060034 -#define PORT63 0x03060035 -#define PORT65 0x03060036 -#define PORT66 0x03060037 -#define PORT69 0x03060038 -#define PORT71 0x03060039 -#define PORT72 0x0306003A -#define PORT73 0x0306003B -#define PORT74 0x0306003C -#define PORT90 0x0306003D -#define PORT99 0x0306003E -#define PORT129 0x0306003F -#define PORT131 0x03060040 -#define PORT133 0x03060041 -#define PORT145 0x03060042 -#define PORT146 0x03060043 - // 68 entities in TXTs, ??? in datafiles. -// general - // fonts -#define GAME_FONT 0x04000000 -#define OTHER_SR_FONT 0x04000001 -#define OTHER_SR_REDFONT 0x04000002 -#define SR_DEATHFONT 0x04000003 -#define CZECH_GAME_FONT 0x04000004 -#define CZECH_SR_FONT 0x04000005 -#define CZECH_SR_REDFONT 0x04000006 -#define CZECH_SR_DEATHFONT 0x04000007 - // 8 entities in TXTs, 1 in datafiles. - // pointers -#define MSE_POINTER 0x04010000 -#define MSE_OPERATE 0x04010001 -#define MSE_PICKUP 0x04010002 -#define MSE_EXAMINE 0x04010003 -#define MSE_MOUTH 0x04010004 -#define MSE_BECKON_L 0x04010005 -#define MSE_BECKON_R 0x04010006 -#define MSE_ARROW0 0x04010007 -#define MSE_ARROW1 0x04010008 -#define MSE_ARROW2 0x04010009 -#define MSE_ARROW3 0x0401000A -#define MSE_ARROW4 0x0401000B -#define MSE_ARROW5 0x0401000C -#define MSE_ARROW6 0x0401000D -#define MSE_ARROW7 0x0401000E -#define MSE_ARROW8 0x0401000F -#define MSE_ARROW9 0x04010010 - // 17 entities in TXTs, 17 in datafiles. - // luggage -#define LUGG_NEWSPAPER 0x04020000 -#define LUGG_HAZEL_WAND 0x04020001 -#define LUGG_BEER_TOWEL 0x04020002 -#define LUGG_HOTEL_KEY 0x04020003 -#define LUGG_BALL 0x04020004 -#define LUGG_STATUETTE 0x04020005 -#define LUGG_RED_NOSE 0x04020006 -#define LUGG_POLISHED_CHALICE 0x04020007 -#define LUGG_DOLLAR_BILL 0x04020008 -#define LUGG_PHOTOGRAPH 0x04020009 -#define LUGG_FLASHLIGHT 0x0402000A -#define LUGG_FUSE_WIRE 0x0402000B -#define LUGG_GEM 0x0402000C -#define LUGG_STATUETTE_PAINT 0x0402000D -#define LUGG_STICK 0x0402000E -#define LUGG_EXCAV_KEY 0x0402000F -#define LUGG_LAB_PASS 0x04020010 -#define LUGG_LIFTING_KEYS 0x04020011 -#define LUGG_MANUSCRIPT 0x04020012 -#define LUGG_MATCHBOOK 0x04020013 -#define LUGG_SUIT_MATERIAL 0x04020014 -#define LUGG_STICK_TOWEL 0x04020015 -#define LUGG_PLASTER 0x04020016 -#define LUGG_PRESSURE_GAUGE 0x04020017 -#define LUGG_RAILWAY_TICKET 0x04020018 -#define LUGG_BUZZER 0x04020019 -#define LUGG_ROSSO_CARD 0x0402001A -#define LUGG_TOILET_KEY 0x0402001B -#define LUGG_SOAP 0x0402001C -#define LUGG_STONE_KEY 0x0402001D -#define LUGG_CHALICE 0x0402001E -#define LUGG_TISSUE 0x0402001F -#define LUGG_TOILET_BRUSH 0x04020020 -#define LUGG_TOILET_CHAIN 0x04020021 -#define LUGG_TOWEL 0x04020022 -#define LUGG_TRIPOD 0x04020023 -#define LUGG_LENS 0x04020024 -#define LUGG_MIRROR 0x04020025 -#define LUGG_TOWEL_CUT 0x04020026 -#define LUGG_BIBLE 0x04020027 -#define LUGG_TISSUE_CHARRED 0x04020028 -#define LUGG_FALSE_KEY 0x04020029 -#define LUGG_KEYRING 0x0402002A -#define LUGG_SOAP_IMP 0x0402002B -#define LUGG_SOAP_PLAS 0x0402002C -#define LUGG_COG_1 0x0402002D -#define LUGG_COG_2 0x0402002E -#define LUGG_HANDLE 0x0402002F -#define LUGG_COIN 0x04020030 -#define LUGG_BIRO 0x04020031 -#define LUGG_PIPE 0x04020032 -#define LUGG_KING 0x04020033 -#define LUGG_KNIGHT 0x04020034 -#define LUGG_BISHOP 0x04020035 - // 54 entities in TXTs, 54 in datafiles. - // object_icons -#define ICON_LEFT_ARROW 0x04030000 -#define ICON_RIGHT_ARROW 0x04030001 -#define ICON_NEWSPAPER 0x04030002 -#define ICON_HAZEL_WAND 0x04030003 -#define ICON_BEER_TOWEL 0x04030004 -#define ICON_HOTEL_KEY 0x04030005 -#define ICON_BALL 0x04030006 -#define ICON_STATUETTE 0x04030007 -#define ICON_RED_NOSE 0x04030008 -#define ICON_POLISHED_CHALICE 0x04030009 -#define ICON_DOLLAR_BILL 0x0403000A -#define ICON_PHOTOGRAPH 0x0403000B -#define ICON_FLASHLIGHT 0x0403000C -#define ICON_FUSE_WIRE 0x0403000D -#define ICON_GEM 0x0403000E -#define ICON_STATUETTE_PAINT 0x0403000F -#define ICON_STICK 0x04030010 -#define ICON_EXCAV_KEY 0x04030011 -#define ICON_LAB_PASS 0x04030012 -#define ICON_LIFTING_KEYS 0x04030013 -#define ICON_MANUSCRIPT 0x04030014 -#define ICON_MATCHBOOK 0x04030015 -#define ICON_SUIT_MATERIAL 0x04030016 -#define ICON_STICK_TOWEL 0x04030017 -#define ICON_PLASTER 0x04030018 -#define ICON_PRESSURE_GAUGE 0x04030019 -#define ICON_RAILWAY_TICKET 0x0403001A -#define ICON_BUZZER 0x0403001B -#define ICON_ROSSO_CARD 0x0403001C -#define ICON_TOILET_KEY 0x0403001D -#define ICON_SOAP 0x0403001E -#define ICON_STONE_KEY 0x0403001F -#define ICON_CHALICE 0x04030020 -#define ICON_TISSUE 0x04030021 -#define ICON_TOILET_BRUSH 0x04030022 -#define ICON_TOILET_CHAIN 0x04030023 -#define ICON_TOWEL 0x04030024 -#define ICON_TRIPOD 0x04030025 -#define ICON_LENS 0x04030026 -#define ICON_MIRROR 0x04030027 -#define ICON_TOWEL_CUT 0x04030028 -#define ICON_BIBLE 0x04030029 -#define ICON_TISSUE_CHARRED 0x0403002A -#define ICON_FALSE_KEY 0x0403002B -#define ICON_KEYRING 0x0403002C -#define ICON_SOAP_IMP 0x0403002D -#define ICON_SOAP_PLAS 0x0403002E -#define ICON_COG_1 0x0403002F -#define ICON_COG_2 0x04030030 -#define ICON_HANDLE 0x04030031 -#define ICON_COIN 0x04030032 -#define ICON_BIRO 0x04030033 -#define ICON_PIPE 0x04030034 - // 53 entities in TXTs, 53 in datafiles. - // subject_icons -#define ICON_ALARM 0x04040000 -#define ICON_ARTO 0x04040001 -#define ICON_ASSASSIN 0x04040002 -#define ICON_AYUB 0x04040003 -#define ICON_BANANA 0x04040004 -#define ICON_BAPHOMET 0x04040005 -#define ICON_BEER 0x04040006 -#define ICON_BOOK 0x04040007 -#define ICON_BRIEFCASE 0x04040008 -#define ICON_BULL 0x04040009 -#define ICON_BULLS_HEAD 0x0404000A -#define ICON_BUST 0x0404000B -#define ICON_CANDLE 0x0404000C -#define ICON_CAR 0x0404000D -#define ICON_CASTLE 0x0404000E -#define ICON_CAT 0x0404000F -#define ICON_CHANTELLE 0x04040010 -#define ICON_CHESSBOARD 0x04040011 -#define ICON_CHESS_SET 0x04040012 -#define ICON_CHURCH 0x04040013 -#define ICON_CLOWN 0x04040014 -#define ICON_CLUB 0x04040015 -#define ICON_COINS 0x04040016 -#define ICON_COUNTESS 0x04040017 -#define ICON_CREST 0x04040018 -#define ICON_DIG 0x04040019 -#define ICON_DOG 0x0404001A -#define ICON_DUANE 0x0404001B -#define ICON_EKLUND 0x0404001C -#define ICON_ERIC 0x0404001D -#define ICON_FISH 0x0404001E -#define ICON_FLOWERS 0x0404001F -#define ICON_FORTUNE 0x04040020 -#define ICON_GEORGE 0x04040021 -#define ICON_GHOST 0x04040022 -#define ICON_GLASS_EYE 0x04040023 -#define ICON_GOAT 0x04040024 -#define ICON_GOODBYE 0x04040025 -#define ICON_GUARD 0x04040026 -#define ICON_HASH 0x04040027 -#define ICON_HENDERSONS 0x04040028 -#define ICON_JACKET 0x04040029 -#define ICON_JUGGLER 0x0404002A -#define ICON_KLAUSNER 0x0404002B -#define ICON_KNIGHT 0x0404002C -#define ICON_LADDER 0x0404002D -#define ICON_LEARY 0x0404002E -#define ICON_LEPRECHAUN 0x0404002F -#define ICON_LIE 0x04040030 -#define ICON_LOBINEAU 0x04040031 -#define ICON_MARQUET 0x04040032 -#define ICON_MARY 0x04040033 -#define ICON_MOB 0x04040034 -#define ICON_MONTFAUCON 0x04040035 -#define ICON_MOUE 0x04040036 -#define ICON_MR_SHINY 0x04040037 -#define ICON_NEJO 0x04040038 -#define ICON_NEJO_STALL 0x04040039 -#define ICON_NICO 0x0404003A -#define ICON_NO 0x0404003B -#define ICON_NURSE 0x0404003C -#define ICON_PACKAGE 0x0404003D -#define ICON_PAINTER 0x0404003E -#define ICON_PEAGRAM 0x0404003F -#define ICON_PEARL 0x04040040 -#define ICON_PHILIPPE 0x04040041 -#define ICON_PHONE 0x04040042 -#define ICON_PHRASE 0x04040043 -#define ICON_PIERMONT 0x04040044 -#define ICON_PLANTARD 0x04040045 -#define ICON_POTS 0x04040046 -#define ICON_PRIEST 0x04040047 -#define ICON_QUEEN 0x04040048 -#define ICON_RENEE 0x04040049 -#define ICON_ROSSO 0x0404004A -#define ICON_ROZZER 0x0404004B -#define ICON_SAFE 0x0404004C -#define ICON_SCROLL 0x0404004D -#define ICON_SEAN 0x0404004E -#define ICON_SIGN 0x0404004F -#define ICON_TAXI 0x04040050 -#define ICON_TEMPLARS 0x04040051 -#define ICON_THERMOSTAT 0x04040052 -#define ICON_TOILET 0x04040053 -#define ICON_TOMB 0x04040054 -#define ICON_TOOLBOX 0x04040055 -#define ICON_TRUTH 0x04040056 -#define ICON_ULTAR 0x04040057 -#define ICON_WEASEL 0x04040058 -#define ICON_WEAVER 0x04040059 -#define ICON_WELL 0x0404005A -#define ICON_WELL2 0x0404005B -#define ICON_WINDOW 0x0404005C -#define ICON_YES 0x0404005D - // 94 entities in TXTs, 94 in datafiles. - // save_menu -#define SR_FONT 0x04050000 -#define SR_BUTTON 0x04050001 -#define SR_REDFONT 0x04050002 -#define SR_PALETTE 0x04050003 -#define SR_PANEL_ENGLISH 0x04050004 -#define SR_PANEL_FRENCH 0x04050005 -#define SR_PANEL_GERMAN 0x04050006 -#define SR_PANEL_ITALIAN 0x04050007 -#define SR_PANEL_SPANISH 0x04050008 -#define SR_PANEL_AMERICAN 0x04050009 -#define SR_TEXT_BUTTON 0x0405000A -#define SR_SPEED 0x0405000B -#define SR_SCROLL1 0x0405000C -#define SR_SCROLL2 0x0405000D -#define SR_CONFIRM 0x0405000E -#define SR_VOLUME 0x0405000F -#define SR_VLIGHT 0x04050010 -#define SR_VKNOB 0x04050011 -#define SR_WINDOW 0x04050012 -#define SR_SLAB1 0x04050013 -#define SR_SLAB2 0x04050014 -#define SR_SLAB3 0x04050015 -#define SR_SLAB4 0x04050016 -#define SR_BUTUF 0x04050017 -#define SR_BUTUS 0x04050018 -#define SR_BUTDS 0x04050019 -#define SR_BUTDF 0x0405001A -#define SR_DEATHPANEL 0x0405001B // 0x04050019 - // 26 entities in TXTs, 29 in datafiles. - // george -#define GEORGE_MEGA 0x04060000 -#define GEORGE_WLK 0x04060001 -#define GEOSHO1 0x04060002 -#define GEOSHO1CDT 0x04060003 -#define GEOSHO1CDR 0x04060004 -#define GEOSHO2 0x04060005 -#define GEOSHO2CDT 0x04060006 -#define GEOSHO2CDR 0x04060007 -#define GEOSHO3 0x04060008 -#define GEOSHO3CDT 0x04060009 -#define GEOSHO3CDR 0x0406000A -#define GEOSHO5 0x0406000B -#define GEOSHO5CDT 0x0406000C -#define GEOSHO5CDR 0x0406000D -#define GEOSHO6 0x0406000E -#define GEOSHO6CDT 0x0406000F -#define GEOSHO6CDR 0x04060010 -#define GEOSHO7 0x04060011 -#define GEOSHO7CDT 0x04060012 -#define GEOSHO7CDR 0x04060013 -#define GEOTLK0 0x04060014 -#define GEOTLK0CDT 0x04060015 -#define GEOTLK1 0x04060016 -#define GEOTLK1CDT 0x04060017 -#define GEOTLK2 0x04060018 -#define GEOTLK2CDT 0x04060019 -#define GEOTLK3 0x0406001A -#define GEOTLK3CDT 0x0406001B -#define GEOTLK4 0x0406001C -#define GEOTLK4CDT 0x0406001D -#define GEOTLK5 0x0406001E -#define GEOTLK5CDT 0x0406001F -#define GEOTLK6 0x04060020 -#define GEOTLK6CDT 0x04060021 -#define GEOTLK7 0x04060022 -#define GEOTLK7CDT 0x04060023 -#define XGEOCRW0 0x04060024 -#define XGEOCRW0CDT 0x04060025 -#define XGEOCRW0CDR 0x04060026 -#define XGEOCRW1 0x04060027 -#define XGEOCRW1CDT 0x04060028 -#define XGEOCRW1CDR 0x04060029 -#define XGEOCRW2 0x0406002A -#define XGEOCRW2CDT 0x0406002B -#define XGEOCRW2CDR 0x0406002C -#define XGEOCRW3 0x0406002D -#define XGEOCRW3CDT 0x0406002E -#define XGEOCRW3CDR 0x0406002F -#define XGEOCRW4 0x04060030 -#define XGEOCRW4CDT 0x04060031 -#define XGEOCRW4CDR 0x04060032 -#define XGEOCRW5 0x04060033 -#define XGEOCRW5CDT 0x04060034 -#define XGEOCRW5CDR 0x04060035 -#define XGEOCRW6 0x04060036 -#define XGEOCRW6CDT 0x04060037 -#define XGEOCRW6CDR 0x04060038 -#define XGEOCRW7 0x04060039 -#define XGEOCRW7CDT 0x0406003A -#define XGEOCRW7CDR 0x0406003B -#define XGEOGIV0 0x0406003C -#define XGEOGIV0CDT 0x0406003D -#define XGEOGIV0CDR 0x0406003E -#define XGEOGIV1 0x0406003F -#define XGEOGIV1CDT 0x04060040 -#define XGEOGIV1CDR 0x04060041 -#define XGEOGIV2 0x04060042 -#define XGEOGIV2CDT 0x04060043 -#define XGEOGIV2CDR 0x04060044 -#define XGEOGIV3 0x04060045 -#define XGEOGIV3CDT 0x04060046 -#define XGEOGIV3CDR 0x04060047 -#define XGEOGIV4 0x04060048 -#define XGEOGIV4CDT 0x04060049 -#define XGEOGIV4CDR 0x0406004A -#define XGEOGIV5 0x0406004B -#define XGEOGIV5CDT 0x0406004C -#define XGEOGIV5CDR 0x0406004D -#define XGEOGIV6 0x0406004E -#define XGEOGIV6CDT 0x0406004F -#define XGEOGIV6CDR 0x04060050 -#define XGEOGIV7 0x04060051 -#define XGEOGIV7CDT 0x04060052 -#define XGEOGIV7CDR 0x04060053 -#define XGEOLUK3 0x04060054 -#define XGEOLUK3CDT 0x04060055 -#define XGEOLUK5 0x04060056 -#define XGEOLUK5CDT 0x04060057 -#define XGEOPIC0 0x04060058 -#define XGEOPIC0CDT 0x04060059 -#define XGEOPIC1 0x0406005A -#define XGEOPIC1CDT 0x0406005B -#define XGEOPIC2 0x0406005C -#define XGEOPIC2CDT 0x0406005D -#define XGEOPIC3 0x0406005E -#define XGEOPIC3CDT 0x0406005F -#define XGEOPIC4 0x04060060 -#define XGEOPIC4CDT 0x04060061 -#define XGEOPIC5 0x04060062 -#define XGEOPIC5CDT 0x04060063 -#define XGEOPIC6 0x04060064 -#define XGEOPIC6CDT 0x04060065 -#define XGEOPIC7 0x04060066 -#define XGEOPIC7CDT 0x04060067 -#define XGEOSHG0 0x04060068 -#define XGEOSHG0CDT 0x04060069 -#define XGEOSHG1 0x0406006A -#define XGEOSHG1CDT 0x0406006B -#define XGEOSHG2 0x0406006C -#define XGEOSHG2CDT 0x0406006D -#define XGEOSHG3 0x0406006E -#define XGEOSHG3CDT 0x0406006F -#define XGEOSHG4 0x04060070 -#define XGEOSHG4CDT 0x04060071 -#define XGEOSHG5 0x04060072 -#define XGEOSHG5CDT 0x04060073 -#define XGEOSHG6 0x04060074 -#define XGEOSHG6CDT 0x04060075 -#define XGEOSHG7 0x04060076 -#define XGEOSHG7CDT 0x04060077 -#define XGHAIR2 0x04060078 -#define XGHAIR2CDT 0x04060079 -#define XGHAIR6 0x0406007A -#define XGHAIR6CDT 0x0406007B -#define GEOBLNK2 0x0406007C -#define GEOBLNK2CDT 0x0406007D -#define GEOBLNK3 0x0406007E -#define GEOBLNK3CDT 0x0406007F -#define GEOBLNK4 0x04060080 -#define GEOBLNK4CDT 0x04060081 -#define GEOBLNK5 0x04060082 -#define GEOBLNK5CDT 0x04060083 -#define GEOBLNK6 0x04060084 -#define GEOBLNK6CDT 0x04060085 -#define XGRELAX0 0x04060086 -#define XGRELAX0CDT 0x04060087 -#define XGRELAX0CDR 0x04060088 -#define XGRELAX1 0x04060089 -#define XGRELAX1CDT 0x0406008A -#define XGRELAX1CDR 0x0406008B -#define XGRELAX2 0x0406008C -#define XGRELAX2CDT 0x0406008D -#define XGRELAX2CDR 0x0406008E -#define XGRELAX3 0x0406008F -#define XGRELAX3CDT 0x04060090 -#define XGRELAX3CDR 0x04060091 -#define XGRELAX4 0x04060092 -#define XGRELAX4CDT 0x04060093 -#define XGRELAX4CDR 0x04060094 -#define XGRELAX5 0x04060095 -#define XGRELAX5CDT 0x04060096 -#define XGRELAX5CDR 0x04060097 -#define XGRELAX6 0x04060098 -#define XGRELAX6CDT 0x04060099 -#define XGRELAX6CDR 0x0406009A -#define XGRELAX7 0x0406009B -#define XGRELAX7CDT 0x0406009C -#define XGRELAX7CDR 0x0406009D - // 158 entities in TXTs, 158 in datafiles. - // nico -#define MEGANICO 0x04070000 -#define NICO_WLK 0x04070001 -#define NICTLK0 0x04070002 -#define NICTLK0CDT 0x04070003 -#define NICTLK1 0x04070004 -#define NICTLK1CDT 0x04070005 -#define NICTLK2 0x04070006 -#define NICTLK2CDT 0x04070007 -#define NICTLK3 0x04070008 -#define NICTLK3CDT 0x04070009 -#define NICTLK4 0x0407000A -#define NICTLK4CDT 0x0407000B -#define NICTLK5 0x0407000C -#define NICTLK5CDT 0x0407000D -#define NICTLK6 0x0407000E -#define NICTLK6CDT 0x0407000F -#define NICTLK7 0x04070010 -#define NICTLK7CDT 0x04070011 - // 18 entities in TXTs, 18 in datafiles. -// maps - // room80 -#define room80_PAL 0x05000000 -#define room80_l0 0x05000001 -#define TEST_FLR 0x05000002 -#define SPRITE_PAL 0x05000003 -#define AEROPORTCDT 0x05000004 -#define AEROPORT 0x05000005 -#define APRTSTRTCDT 0x05000006 -#define APRTSTRT 0x05000007 -#define BAPHOMETCDT 0x05000008 -#define BAPHOMET 0x05000009 -#define CAFECDT 0x0500000A -#define CAFE 0x0500000B -#define COSTUMESCDT 0x0500000C -#define COSTUMES 0x0500000D -#define HOSPITALCDT 0x0500000E -#define HOSPITAL 0x0500000F -#define HOTELCDT 0x05000010 -#define HOTEL 0x05000011 -#define MONTFACNCDT 0x05000012 -#define MONTFACN 0x05000013 -#define MUSEUMCDT 0x05000014 -#define MUSEUM 0x05000015 -#define POLICECDT 0x05000016 -#define POLICE 0x05000017 - // 24 entities in TXTs, 24 in datafiles. - // room86 -#define room86_PAL 0x05010000 -#define room86_l0 0x05010001 -#define BANNOCKCDT 0x05010002 -#define BANNOCK 0x05010003 -#define MARIBCDT 0x05010004 -#define MARIB 0x05010005 -#define LOCHMARNCDT 0x05010006 -#define LOCHMARN 0x05010007 -#define PARISCDT 0x05010008 -#define PARIS 0x05010009 -#define VILLAVASCDT 0x0501000A -#define VILLAVAS 0x0501000B - // 12 entities in TXTs, 12 in datafiles. - // room90 -#define R90L0 0x05020000 -#define R90PAL 0x05020001 -#define PHONE_PAL 0x05020002 -#define GBLINK 0x05020003 -#define GBLINKCDT 0x05020004 -#define GRISE 0x05020005 -#define GRISECDT 0x05020006 -#define GRISECDR 0x05020007 -#define GTALK 0x05020008 -#define GTALKCDT 0x05020009 -#define NBLINK 0x0502000A -#define NBLINKCDT 0x0502000B -#define NRISE 0x0502000C -#define NRISECDT 0x0502000D -#define NRISECDR 0x0502000E -#define NTALK 0x0502000F -#define NTALKCDT 0x05020010 -#define TODTALK 0x05020011 -#define TODTALKCDT 0x05020012 - // 19 entities in TXTs, 19 in datafiles. - // room91 -#define R91L0 0x05030000 -#define R91PAL 0x05030001 -#define CLOWN 0x05030002 -#define CLOWNCDT 0x05030003 -#define DESVAS 0x05030004 -#define DESVASCDT 0x05030005 -#define EIFTOWER 0x05030006 -#define EIFTOWERCDT 0x05030007 -#define HORSETIP 0x05030008 -#define HORSETIPCDT 0x05030009 -#define LOBIN91 0x0503000A -#define LOBIN91CDT 0x0503000B -#define MONTFCON 0x0503000C -#define MONTFCONCDT 0x0503000D -#define NICOADD 0x0503000E -#define NICOADDCDT 0x0503000F -#define NICOPHN 0x05030010 -#define NICOPHNCDT 0x05030011 -#define TAILOR 0x05030012 -#define TAILORCDT 0x05030013 - // 20 entities in TXTs, 20 in datafiles. - // room99 -#define room99_PAL 0x05040000 -#define room99_l0 0x05040001 - // 2 entities in TXTs, 2 in datafiles. -// paris_1 - // sound_fx -#define FX_CAMERA1 0x06000000 -#define FX_CAMERA2 0x06000001 -#define FX_CAMERA3 0x06000002 -#define FX_CANDO 0x06000003 -#define FX_CANUP 0x06000004 -#define FX_CAW1 0x06000005 -#define FX_DUST 0x06000006 -#define FX_HORN1 0x06000007 -#define FX_HORN2 0x06000008 -#define FX_HORN3 0x06000009 -#define FX_LVSFLY 0x0600000A -#define FX_PAP1 0x0600000B -#define FX_PAP2 0x0600000C -#define FX_PICK1 0x0600000D -#define FX_PICK2 0x0600000E -#define FX_PICK3 0x0600000F -#define FX_PICK4 0x06000010 -#define FX_PICK5 0x06000011 -#define FX_TRAFFIC2 0x06000012 -#define FX_TWEET1 0x06000013 -#define FX_TWEET2 0x06000014 -#define FX_TWEET3 0x06000015 -#define FX_TWEET4 0x06000016 -#define FX_TWEET5 0x06000017 -#define FX_BIN1 0x06000018 -#define FX_BIN2 0x06000019 -#define FX_BIN3 0x0600001A -#define FX_CAT 0x0600001B -#define FX_COVERON2 0x0600001C -#define FX_CRATE 0x0600001D -#define FX_DRAIN 0x0600001E -#define FX_HOLE 0x0600001F -#define FX_BODY 0x06000020 -#define FX_BOTDN 0x06000021 -#define FX_BOTUP 0x06000022 -#define FX_GULP 0x06000023 -#define FX_LIGHT 0x06000024 -#define FX_PIKUP 0x06000025 -#define FX_PAP3 0x06000026 -#define FX_PAP4 0x06000027 -#define FX_PAP5 0x06000028 -#define FX_PISTOL 0x06000029 -#define FX_TBOX 0x0600002A -#define FX_KNOKKNOK 0x0600002B -#define FX_ALBCLO 0x0600002C -#define FX_ALBOP 0x0600002D -#define FX_LADD1 0x0600002E -#define FX_LADD2 0x0600002F -#define FX_LADD3 0x06000030 -#define FX_RAT1 0x06000031 -#define FX_RAT2 0x06000032 -#define FX_SEWSTEP1 0x06000033 -#define FX_SEWSTEP2 0x06000034 -#define FX_SWATER3 0x06000035 -#define FX_DRIP1 0x06000036 -#define FX_DRIP2 0x06000037 -#define FX_DRIP3 0x06000038 -#define FX_SWATER1 0x06000039 -#define FX_SEWLADD7 0x0600003A -#define FX_SEWLADU7 0x0600003B - // 60 entities in TXTs, 60 in datafiles. - // room1 -#define PARIS1_PAL 0x06010000 -#define room1_PAL 0x06010001 -#define room1_l0 0x06010002 -#define room1_l1 0x06010003 -#define room1_l2 0x06010004 -#define room1_gd1 0x06010005 -#define room1_gd2 0x06010006 -#define room1_flr 0x06010007 -#define room1_plx 0x06010008 -#define BIRDS 0x06010009 -#define BIRDSCDT 0x0601000A -#define BIRDSA 0x0601000B -#define BIRDSACDT 0x0601000C -#define BIRDSB 0x0601000D -#define BIRDSBCDT 0x0601000E -#define BIRDSC 0x0601000F -#define BIRDSCCDT 0x06010010 -#define BIRDSD 0x06010011 -#define BIRDSDCDT 0x06010012 -#define BIRDSE 0x06010013 -#define BIRDSECDT 0x06010014 -#define BIRDSF 0x06010015 -#define BIRDSFCDT 0x06010016 -#define BIRDSG 0x06010017 -#define BIRDSGCDT 0x06010018 -#define BIRDSH 0x06010019 -#define BIRDSHCDT 0x0601001A -#define BIRDSI 0x0601001B -#define BIRDSICDT 0x0601001C -#define CANOPY 0x0601001D -#define CANOPYCDT 0x0601001E -#define GEOCAN 0x0601001F -#define GEOCANCDT 0x06010020 -#define GEONIC 0x06010021 -#define GEONICCDT 0x06010022 -#define GEOPAP 0x06010023 -#define GEOPAPCDT 0x06010024 -#define GEOPAP2 0x06010025 -#define GEOPAP2CDT 0x06010026 -#define LVSFLY 0x06010027 -#define LVSFLYCDT 0x06010028 -#define MOUGRD 0x06010029 -#define MOUGRDCDT 0x0601002A -#define MOUTLK01 0x0601002B -#define MOUTLK01CDT 0x0601002C -#define MOUWLK01 0x0601002D -#define MOUWLK01CDT 0x0601002E -#define NICPHT1CDT 0x0601002F -#define NICPHT1 0x06010030 -#define NICPHT2CDT 0x06010031 -#define NICPHT2 0x06010032 -#define NICPHT3CDT 0x06010033 -#define NICPHT3 0x06010034 -#define NICPHT5CDT 0x06010035 -#define NICPHT5 0x06010036 -#define NICPHT6CDT 0x06010037 -#define NICPHT6 0x06010038 -#define NICPHT7CDT 0x06010039 -#define NICPHT7 0x0601003A -#define NICWLK01 0x0601003B -#define NICWLK01CDT 0x0601003C -#define NWPAPER 0x0601003D -#define NWPAPERCDT 0x0601003E -#define WRKDIG01 0x0601003F -#define WRKDIG01CDT 0x06010040 -#define XGEOPHN3 0x06010041 -#define XGEOPHN3CDT 0x06010042 -#define XGEOPHN5 0x06010043 -#define XGEOPHN5CDT 0x06010044 -#define XNICPHN3CDT 0x06010045 -#define XNICPHN3 0x06010046 -#define XNICPHN5CDT 0x06010047 -#define XNICPHN5 0x06010048 - // 73 entities in TXTs, 73 in datafiles. - // room2 -#define room2_PAL 0x06020000 -#define room2_l0 0x06020001 -#define room2_l1 0x06020002 -#define room2_l2 0x06020003 -#define room2_gd1 0x06020004 -#define room2_gd2 0x06020005 -#define room2_flr 0x06020006 -#define BIN1 0x06020007 -#define BIN1CDT 0x06020008 -#define BIN2 0x06020009 -#define BIN2CDT 0x0602000A -#define BIN3 0x0602000B -#define BIN3CDT 0x0602000C -#define CATJMP 0x0602000D -#define CATJMPCDT 0x0602000E -#define CRATE 0x0602000F -#define CRATECDT 0x06020010 -#define DRNBRK 0x06020011 -#define DRNBRKCDT 0x06020012 -#define GEOBIN 0x06020013 -#define GEOBINCDT 0x06020014 -#define GEOBOX 0x06020015 -#define GEOBOXCDT 0x06020016 -#define GEOBRS 0x06020017 -#define GEOBRSCDT 0x06020018 -#define GEOCAT 0x06020019 -#define GEOCATCDT 0x0602001A -#define GEOCATE 0x0602001B -#define GEOCATECDT 0x0602001C -#define GEOCLM02 0x0602001D -#define GEOCLM02CDT 0x0602001E -#define GEOCRT 0x0602001F -#define GEOCRTCDT 0x06020020 -#define GEODWN 0x06020021 -#define GEODWNCDT 0x06020022 -#define GEOLID 0x06020023 -#define GEOLIDCDT 0x06020024 -#define GEOLIDCDR 0x06020025 -#define GEOMAN8 0x06020026 -#define GEOMAN8CDT 0x06020027 -#define GEOMAN9 0x06020028 -#define GEOMAN9CDT 0x06020029 -#define GEOOUT 0x0602002A -#define GEOOUTCDT 0x0602002B -#define GEOPLL02 0x0602002C -#define GEOPLL02CDT 0x0602002D -#define GEOTRY02 0x0602002E -#define GEOTRY02CDT 0x0602002F -#define MANCOV 0x06020030 -#define MANCOVCDT 0x06020031 -#define MANCVOFF 0x06020032 -#define MANCVOFFCDT 0x06020033 - // 52 entities in TXTs, 52 in datafiles. - // room3 -#define room3_PAL 0x06030000 -#define room3_l0 0x06030001 -#define room3_l1 0x06030002 -#define room3_l2 0x06030003 -#define room3_gd1 0x06030004 -#define room3_gd2 0x06030005 -#define room3_flr 0x06030006 -#define BOTTLE 0x06030007 -#define BOTTLECDT 0x06030008 -#define BOTTLE1 0x06030009 -#define BOTTLE1CDT 0x0603000A -#define CHNDRN 0x0603000B -#define CHNDRNCDT 0x0603000C -#define CHNFNT 0x0603000D -#define CHNFNTCDT 0x0603000E -#define CHNSITA 0x0603000F -#define CHNSITACDT 0x06030010 -#define CHNSIT 0x06030011 -#define CHNSITCDT 0x06030012 -#define CHNTLK 0x06030013 -#define CHNTLKCDT 0x06030014 -#define CHNUPP 0x06030015 -#define CHNUPPCDT 0x06030016 -#define CHNUPPCDR 0x06030017 -#define CORPSE 0x06030018 -#define CORPSECDT 0x06030019 -#define FLICKER 0x0603001A -#define FLICKERCDT 0x0603001B -#define GEOBOT3 0x0603001C -#define GEOBOT3CDT 0x0603001D -#define GEOCARD3 0x0603001E -#define GEOCARD3CDT 0x0603001F -#define GEOCHN 0x06030020 -#define GEOCHNCDT 0x06030021 -#define GEOCPS 0x06030022 -#define GEOCPSCDT 0x06030023 -#define GEOCPSCDR 0x06030024 -#define MOUCHN 0x06030025 -#define MOUCHNCDT 0x06030026 -#define MOUCHN8 0x06030027 -#define MOUCHN8CDT 0x06030028 -#define MOUCPS 0x06030029 -#define MOUCPSCDT 0x0603002A -#define MOUCPSTK 0x0603002B -#define MOUCPSTKCDT 0x0603002C -#define MOUDOR03 0x0603002D -#define MOUDOR03CDT 0x0603002E -#define MOUROS 0x0603002F -#define MOUROSCDT 0x06030030 -#define MOUROS1 0x06030031 -#define MOUROS1CDT 0x06030032 -#define MOUROS1CDR 0x06030033 -#define MOUROS2 0x06030034 -#define MOUROS2CDT 0x06030035 -#define MOUSTD 0x06030036 -#define MOUSTDCDT 0x06030037 -#define MOUTALK 0x06030038 -#define MOUTALKCDT 0x06030039 -#define MOUTLK1 0x0603003A -#define MOUTLK1CDT 0x0603003B -#define MOUTRN03 0x0603003C -#define MOUTRN03CDT 0x0603003D -#define MOUTRN03CDR 0x0603003E -#define MOUTRN2 0x0603003F -#define MOUTRN2CDT 0x06030040 -#define MOUTRN2CDR 0x06030041 -#define MOUWLK 0x06030042 -#define MOUWLKCDT 0x06030043 -#define MOUWLK03 0x06030044 -#define MOUWLK03CDT 0x06030045 -#define ROSCARD 0x06030046 -#define ROSCARDCDT 0x06030047 -#define ROSCHN 0x06030048 -#define ROSCHNCDT 0x06030049 -#define ROSCHNCDR 0x0603004A -#define ROSGEO 0x0603004B -#define ROSGEOCDT 0x0603004C -#define ROSGEOA 0x0603004D -#define ROSGEOACDT 0x0603004E -#define ROSGEOB 0x0603004F -#define ROSGEOBCDT 0x06030050 -#define ROSGEOC 0x06030051 -#define ROSGEOCCDT 0x06030052 -#define ROSLIK 0x06030053 -#define ROSLIKCDT 0x06030054 -#define ROSLUK 0x06030055 -#define ROSLUKCDT 0x06030056 -#define ROSMOU 0x06030057 -#define ROSMOUCDT 0x06030058 -#define ROSNBK 0x06030059 -#define ROSNBKCDT 0x0603005A -#define ROSNBK8 0x0603005B -#define ROSNBK8CDT 0x0603005C -#define ROSPKT 0x0603005D -#define ROSPKTCDT 0x0603005E -#define ROSTMP 0x0603005F -#define ROSTMPCDT 0x06030060 -#define ROSTMP8 0x06030061 -#define ROSTMP8CDT 0x06030062 -#define ROSTURNA 0x06030063 -#define ROSTURNACDT 0x06030064 -#define ROSTURNB 0x06030065 -#define ROSTURNBCDT 0x06030066 -#define ROSTRN2 0x06030067 -#define ROSTRN2CDT 0x06030068 -#define ROSWRT 0x06030069 -#define ROSWRTCDT 0x0603006A - // 107 entities in TXTs, 107 in datafiles. - // room4 -#define room4_PAL 0x06040000 -#define room4_l0 0x06040001 -#define room4_l1 0x06040002 -#define room4_l2 0x06040003 -#define room4_gd1 0x06040004 -#define room4_gd2 0x06040005 -#define room4_flr 0x06040006 -#define ALBDOR 0x06040007 -#define ALBDORCDR 0x06040008 -#define ALBDORCDT 0x06040009 -#define ALBDOR8 0x0604000A -#define ALBDOR8CDT 0x0604000B -#define GEONOK 0x0604000C -#define GEONOKCDT 0x0604000D -#define GEONOKCDR 0x0604000E -#define GEOTBX 0x0604000F -#define GEOTBXCDT 0x06040010 -#define GEOWRK 0x06040011 -#define GEOWRKCDT 0x06040012 -#define GEOWRK8 0x06040013 -#define GEOWRK8CDT 0x06040014 -#define MOUENT 0x06040015 -#define MOUENTCDT 0x06040016 -#define MOUSHG 0x06040017 -#define MOUSHGCDT 0x06040018 -#define MOUSTR 0x06040019 -#define MOUSTRCDT 0x0604001A -#define MOUTLK04 0x0604001B -#define MOUTLK04CDT 0x0604001C -#define MOUWLK04 0x0604001D -#define MOUWLK04CDT 0x0604001E -#define ROSENT 0x0604001F -#define ROSENTCDT 0x06040020 -#define ROSTLK04 0x06040021 -#define ROSTLK04CDT 0x06040022 -#define ROSWLK 0x06040023 -#define ROSWLKCDT 0x06040024 -#define PHONE4 0x06040025 -#define PHONE4CDT 0x06040026 -#define WRKAXE 0x06040027 -#define WRKAXECDT 0x06040028 -#define WRKBLINK 0x06040029 -#define WRKBLINKCDT 0x0604002A -#define WRKCLM 0x0604002B -#define WRKCLMCDT 0x0604002C -#define WRKDIG 0x0604002D -#define WRKDIGCDT 0x0604002E -#define WRKPPR 0x0604002F -#define WRKPPRCDT 0x06040030 -#define WRKTLK 0x06040031 -#define WRKTLKCDT 0x06040032 -#define WRKTLK8 0x06040033 -#define WRKTLK8CDT 0x06040034 -#define WRKTLK9 0x06040035 -#define WRKTLK9CDT 0x06040036 -#define WRKTRN 0x06040037 -#define WRKTRNCDR 0x06040038 -#define WRKTRNCDT 0x06040039 -#define WRKXIT 0x0604003A -#define WRKXITCDT 0x0604003B - // 60 entities in TXTs, 60 in datafiles. - // room5 -#define room5_PAL 0x06050000 -#define room5_l0 0x06050001 -#define room5_l1 0x06050002 -#define room5_l2 0x06050003 -#define room5_gd1 0x06050004 -#define room5_gd2 0x06050005 -#define room5_flr 0x06050006 -#define ALBAPT 0x06050007 -#define ALBAPTCDT 0x06050008 -#define ALBAPTCDR 0x06050009 -#define ALBCLOSECDT 0x0605000A -#define ALBCLOSE 0x0605000B -#define ALBCRD8 0x0605000C -#define ALBCRD8CDT 0x0605000D -#define ALBDORTKCDT 0x0605000E -#define ALBDORTK 0x0605000F -#define ALBDRTK2CDT 0x06050010 -#define ALBDRTK2 0x06050011 -#define ALBHND 0x06050012 -#define ALBHNDCDT 0x06050013 -#define ALBOBJ 0x06050014 -#define ALBOBJCDT 0x06050015 -#define ALBOPENCDT 0x06050016 -#define ALBOPEN 0x06050017 -#define ALBPKT 0x06050018 -#define ALBPKTCDT 0x06050019 -#define ALBTLK 0x0605001A -#define ALBTLKCDT 0x0605001B -#define ALBWLK9CDT 0x0605001C -#define ALBWLK9 0x0605001D -#define GEOCRD05 0x0605001E -#define GEOCRD05CDT 0x0605001F -#define GEODOR05CDT 0x06050020 -#define GEODOR05 0x06050021 -#define GEOEMG 0x06050022 -#define GEOEMGCDT 0x06050023 -#define GEOEMGCDR 0x06050024 -#define GEOEMGA 0x06050025 -#define GEOEMGACDT 0x06050026 -#define GEOEMGACDR 0x06050027 -#define GEOEMGB 0x06050028 -#define GEOEMGBCDT 0x06050029 -#define GEOEMGBCDR 0x0605002A -#define GEOEXITCDT 0x0605002B -#define GEOEXIT 0x0605002C -#define GEOHND05 0x0605002D -#define GEOHND05CDT 0x0605002E -#define GEONOK05CDT 0x0605002F -#define GEONOK05 0x06050030 -#define GEOTLK05 0x06050031 -#define GEOTLK05CDT 0x06050032 - // 51 entities in TXTs, 51 in datafiles. - // room6 -#define SEWER_PAL 0x06060000 -#define room6_PAL 0x06060001 -#define room6_l0 0x06060002 -#define room6_l1 0x06060003 -#define room6_gd1 0x06060004 -#define room6_flr 0x06060005 -#define GEOASC06 0x06060006 -#define GEOASC06CDT 0x06060007 -#define GEODES06 0x06060008 -#define GEODES06CDT 0x06060009 -#define GEONOSE 0x0606000A -#define GEONOSECDT 0x0606000B -#define REDNOSE 0x0606000C -#define REDNOSECDT 0x0606000D -#define WATER06 0x0606000E -#define WATER06CDT 0x0606000F - // 16 entities in TXTs, 16 in datafiles. - // room7 -#define room7_PAL 0x06070000 -#define room7_l0 0x06070001 -#define room7_l1 0x06070002 -#define room7_l2 0x06070003 -#define room7_gd1 0x06070004 -#define room7_gd2 0x06070005 -#define room7_flr 0x06070006 -#define GEOASC07 0x06070007 -#define GEOASC07CDT 0x06070008 -#define GEOASC07CDR 0x06070009 -#define GEOPLL07 0x0607000A -#define GEOPLL07CDT 0x0607000B -#define GEOPLL07CDR 0x0607000C -#define GEOSPK 0x0607000D -#define GEOSPKCDT 0x0607000E -#define GEOTIS 0x0607000F -#define GEOTISCDT 0x06070010 -#define MATERIAL 0x06070011 -#define MATERIALCDT 0x06070012 -#define TISSUE7 0x06070013 -#define TISSUE7CDT 0x06070014 -#define WATER07 0x06070015 -#define WATER07CDT 0x06070016 - // 23 entities in TXTs, 23 in datafiles. - // room8 -#define room8_PAL 0x06080000 -#define room8_l0 0x06080001 -#define room8_l1 0x06080002 -#define room8_l2 0x06080003 -#define room8_gd1 0x06080004 -#define room8_gd2 0x06080005 -#define room8_flr 0x06080006 -#define room8_plx 0x06080007 - // 8 entities in TXTs, 8 in datafiles. -// paris_2 - // sound_fx -#define FX_BIRD 0x07000000 -#define FX_BIRD2 0x07000001 -#define FX_CARLTON 0x07000002 -#define FX_CARS 0x07000003 -#define FX_DOORTRY 0x07000004 -#define FX_FIESTA 0x07000005 -#define FX_FLATDOOR 0x07000006 -#define FX_HVYVEHL 0x07000007 -#define FX_HVYVEHR 0x07000008 -#define FX_LITEVEHL 0x07000009 -#define FX_LITEVEHR 0x0700000A -#define FX_FONEUP 0x0700000B -#define FX_FONEDN 0x0700000C -#define FX_GEOCCH 0x0700000D -#define FX_GEOCHAIR 0x0700000E -#define FX_GEOCHR9 0x0700000F -#define FX_NICOPEN 0x07000010 -#define FX_NICLOSE 0x07000011 -#define FX_PHONICO1 0x07000012 -#define FX_GRAMOFON 0x07000013 -#define FX_SHOCK1 0x07000014 -#define FX_WINDUP11 0x07000015 -#define FX_FRISK 0x07000016 -#define FX_TRAFFIC3 0x07000017 -#define FX_DESKBELL 0x07000018 -#define FX_KEY13 0x07000019 -#define FX_PAPER6 0x0700001A -#define FX_PHONEDN2 0x0700001B -#define FX_PHONEUP2 0x0700001C -#define FX_PIANO14 0x0700001D -#define FX_TRYDOR14 0x0700001E -#define FX_CABCLOSE 0x0700001F -#define FX_CABOPEN 0x07000020 -#define FX_DORCLOSE 0x07000021 -#define FX_WINDOPEN 0x07000022 -#define FX_COO 0x07000023 -#define FX_COO2 0x07000024 -#define FX_LEDGE1 0x07000025 -#define FX_LEDGE2 0x07000026 -#define FX_BRIEFOFF 0x07000027 -#define FX_BRIEFON 0x07000028 -#define FX_JUMPIN 0x07000029 -#define FX_WARDIN 0x0700002A -#define FX_WARDOUT 0x0700002B -#define FX_CLIMBIN 0x0700002C -#define FX_CLIMBOUT 0x0700002D - // 46 entities in TXTs, 46 in datafiles. - // room9 -#define PARIS2_PAL 0x07010000 -#define room9_PAL 0x07010001 -#define room9_l0 0x07010002 -#define room9_l1 0x07010003 -#define room9_l2 0x07010004 -#define room9_gd1 0x07010005 -#define room9_gd2 0x07010006 -#define room9_flr 0x07010007 -#define CARA9CDT 0x07010008 -#define CARA9 0x07010009 -#define CARB9CDT 0x0701000A -#define CARB9 0x0701000B -#define CARC9CDT 0x0701000C -#define CARC9 0x0701000D -#define DOROPN09CDR 0x0701000E -#define DOROPN09CDT 0x0701000F -#define DOROPN09 0x07010010 -#define FLWLUKCDR 0x07010011 -#define FLWLUKCDT 0x07010012 -#define FLWLUK 0x07010013 -#define FLWNITCDT 0x07010014 -#define FLWNIT 0x07010015 -#define FLWTLKCDT 0x07010016 -#define FLWTLK 0x07010017 -#define GEODOOR9 0x07010018 -#define GEODOOR9CDT 0x07010019 -#define GEOSTPCDT 0x0701001A -#define GEOSTP 0x0701001B -#define GEOSTP8CDT 0x0701001C -#define GEOSTP8 0x0701001D -#define GEOTRY 0x0701001E -#define GEOTRYCDT 0x0701001F -#define TRUCKA9CDT 0x07010020 -#define TRUCKA9 0x07010021 -#define TRUCKB9CDT 0x07010022 -#define TRUCKB9 0x07010023 -#define TRUCKC9CDT 0x07010024 -#define TRUCKC9 0x07010025 - // 38 entities in TXTs, 38 in datafiles. - // room10 -#define R10SPRPAL 0x07020000 -#define room10_PAL 0x07020001 -#define room10_l0 0x07020002 -#define room10_l1 0x07020003 -#define room10_gd1 0x07020004 -#define room10_flr 0x07020005 -#define DOORCDT 0x07020006 -#define DOOR 0x07020007 -#define GEOCCHCDT 0x07020008 -#define GEOCCHCDR 0x07020009 -#define GEOCCH 0x0702000A -#define GEOCCH8CDT 0x0702000B -#define GEOCCH8 0x0702000C -#define GEOCCH9CDT 0x0702000D -#define GEOCCH9 0x0702000E -#define GEOCHRCDT 0x0702000F -#define GEOCHR 0x07020010 -#define GEOCHR8CDT 0x07020011 -#define GEOCHR8 0x07020012 -#define GEOCHR9CDT 0x07020013 -#define GEOCHR9 0x07020014 -#define GEODWN10CDT 0x07020015 -#define GEODWN10 0x07020016 -#define GEOENT10CDT 0x07020017 -#define GEOENT10 0x07020018 -#define GEOGEM10CDT 0x07020019 -#define GEOGEM10 0x0702001A -#define GEOGEMBCDT 0x0702001B -#define GEOGEMB 0x0702001C -#define GEOLUK10CDT 0x0702001D -#define GEOLUK10 0x0702001E -#define GEOLVS10CDT 0x0702001F -#define GEOLVS10 0x07020020 -#define GEOMAGTKCDT 0x07020021 -#define GEOMAGTK 0x07020022 -#define GEOMAT10CDT 0x07020023 -#define GEOMAT10 0x07020024 -#define GEOMATBCDT 0x07020025 -#define GEOMATB 0x07020026 -#define GEOMATCCDT 0x07020027 -#define GEOMATC 0x07020028 -#define GEONIC10CDR 0x07020029 -#define GEONIC10CDT 0x0702002A -#define GEONIC10 0x0702002B -#define GEONOSCDT 0x0702002C -#define GEONOS 0x0702002D -#define GEONOS10CDT 0x0702002E -#define GEONOS10 0x0702002F -#define GEONWPAPCDT 0x07020030 -#define GEONWPAP 0x07020031 -#define GEOPHN10CDT 0x07020032 -#define GEOPHN10 0x07020033 -#define GEOPHTCDT 0x07020034 -#define GEOPHT 0x07020035 -#define GEOPHT10CDT 0x07020036 -#define GEOPHT10 0x07020037 -#define GEOPHTLKCDT 0x07020038 -#define GEOPHTLK 0x07020039 -#define GEOPPR10CDT 0x0702003A -#define GEOPPR10 0x0702003B -#define GEOPRDCDT 0x0702003C -#define GEOPRD 0x0702003D -#define GEOREDCDT 0x0702003E -#define GEORED 0x0702003F -#define GEORELCDR 0x07020040 -#define GEORELCDT 0x07020041 -#define GEOREL 0x07020042 -#define GEORXTCDT 0x07020043 -#define GEORXT 0x07020044 -#define GEOTIS10CDT 0x07020045 -#define GEOTIS10 0x07020046 -#define GEOTISBCDT 0x07020047 -#define GEOTISB 0x07020048 -#define GEOTRIP1CDT 0x07020049 -#define GEOTRIP1 0x0702004A -#define GEOTRIP2CDT 0x0702004B -#define GEOTRIP2 0x0702004C -#define LOBTLK10CDT 0x0702004D -#define LOBTLK10 0x0702004E -#define MANUCDT 0x0702004F -#define MANU 0x07020050 -#define NICCHR9CDR 0x07020051 -#define NICCHR9CDT 0x07020052 -#define NICCHR9 0x07020053 -#define NICDWN10CDT 0x07020054 -#define NICDWN10 0x07020055 -#define NICLUK10CDT 0x07020056 -#define NICLUK10 0x07020057 -#define NICMAGCDR 0x07020058 -#define NICMAGCDT 0x07020059 -#define NICMAG 0x0702005A -#define NICNOSCDT 0x0702005B -#define NICNOS 0x0702005C -#define NICNOS10CDT 0x0702005D -#define NICNOS10 0x0702005E -#define NICNOSBCDT 0x0702005F -#define NICNOSB 0x07020060 -#define NICPHN10CDT 0x07020061 -#define NICPHN10 0x07020062 -#define NICPHT10CDT 0x07020063 -#define NICPHT10 0x07020064 -#define NICPPRCDT 0x07020065 -#define NICPPR 0x07020066 -#define NICPPR2CDT 0x07020067 -#define NICPPR2 0x07020068 -#define NICREDCDT 0x07020069 -#define NICRED 0x0702006A -#define NICRED2CDR 0x0702006B -#define NICRED2CDT 0x0702006C -#define NICRED2 0x0702006D -#define NICSIT 0x0702006E -#define NICSITCDT 0x0702006F -#define NICTLK10CDT 0x07020070 -#define NICTLK10 0x07020071 -#define NICTLKL 0x07020072 -#define NICTLKLCDT 0x07020073 -#define NICTLKR 0x07020074 -#define NICTLKRCDT 0x07020075 -#define NICTLKX 0x07020076 -#define NICTLKXCDT 0x07020077 -#define NICTLKXCDR 0x07020078 -#define NICTRIPCDT 0x07020079 -#define NICTRIP 0x0702007A -#define NICTURN 0x0702007B -#define NICTURNCDT 0x0702007C -#define NICTURNCDR 0x0702007D -#define NICWRT 0x0702007E -#define NICWRTCDT 0x0702007F -#define PHONE10CDT 0x07020080 -#define PHONE10 0x07020081 -#define PEAPAGECDT 0x07020082 -#define PEAPAGE 0x07020083 -#define PEAPAGE_PAL 0x07020084 -#define MANUSCRPCDT 0x07020085 -#define MANUSCRP 0x07020086 -#define MANUSCRP_PAL 0x07020087 -#define TRIPOD10CDT 0x07020088 -#define TRIPOD10 0x07020089 - // 138 entities in TXTs, 138 in datafiles. - // room11 -#define room11_PAL 0x07030000 -#define room11_l0 0x07030001 -#define room11_l1 0x07030002 -#define room11_l2 0x07030003 -#define room11_gd1 0x07030004 -#define room11_gd2 0x07030005 -#define room11_flr 0x07030006 -#define COSGIVCDR 0x07030007 -#define COSGIVCDT 0x07030008 -#define COSGIV 0x07030009 -#define COSLOOPCDT 0x0703000A -#define COSLOOP 0x0703000B -#define COSSHKCDT 0x0703000C -#define COSSHK 0x0703000D -#define COSSNFCDT 0x0703000E -#define COSSNF 0x0703000F -#define COSTLKCDT 0x07030010 -#define COSTLK 0x07030011 -#define DISCSPINCDT 0x07030012 -#define DISCSPIN 0x07030013 -#define GEOPIC11CDR 0x07030014 -#define GEOPIC11CDT 0x07030015 -#define GEOPIC11 0x07030016 -#define GEOSHK11CDT 0x07030017 -#define GEOSHK11 0x07030018 -#define GEOTURDCDT 0x07030019 -#define GEOTURD 0x0703001A -#define GEOTIS11CDT 0x0703001B -#define GEOTIS11 0x0703001C -#define GEOWINDCDT 0x0703001D -#define GEOWIND 0x0703001E -#define WINDUPCDT 0x0703001F -#define WINDUP 0x07030020 - // 33 entities in TXTs, 33 in datafiles. - // room12 -#define room12_PAL 0x07040000 -#define room12_l0 0x07040001 -#define room12_l1 0x07040002 -#define room12_gd1 0x07040003 -#define room12_flr 0x07040004 -#define FLAGSCDT 0x07040005 -#define FLAGS 0x07040006 -#define GEOAPPCDT 0x07040007 -#define GEOAPP 0x07040008 -#define GEOARMCDT 0x07040009 -#define GEOARM 0x0704000A -#define GEOASC12CDT 0x0704000B -#define GEOASC12 0x0704000C -#define GEODES12CDT 0x0704000D -#define GEODES12 0x0704000E -#define GORCOINCDT 0x0704000F -#define GORCOIN 0x07040010 -#define GORFRKCDT 0x07040011 -#define GORFRK 0x07040012 -#define GORMANCDT 0x07040013 -#define GORMAN 0x07040014 -#define GORTALKCDT 0x07040015 -#define GORTALK 0x07040016 -#define GORTLKCDT 0x07040017 -#define GORTLK 0x07040018 -#define GORTURNCDR 0x07040019 -#define GORTURNCDT 0x0704001A -#define GORTURN 0x0704001B -#define LATVIAN12CDT 0x0704001C -#define LATVIAN12 0x0704001D -#define WEABAKCDT 0x0704001E -#define WEABAK 0x0704001F -#define WEASMKCDT 0x07040020 -#define WEASMK 0x07040021 -#define WEATLKCDT 0x07040022 -#define WEATLK 0x07040023 -#define WEATLK12CDT 0x07040024 -#define WEATLK12 0x07040025 -#define WEATRNCDR 0x07040026 -#define WEATRNCDT 0x07040027 -#define WEATRN 0x07040028 - // 41 entities in TXTs, 41 in datafiles. - // room13 -#define R13SPRPAL 0x07050000 -#define room13_PAL 0x07050001 -#define room13_l0 0x07050002 -#define room13_l1 0x07050003 -#define room13_l2 0x07050004 -#define room13_gd1 0x07050005 -#define room13_gd2 0x07050006 -#define room13_flr 0x07050007 -#define CLKIDLCDT 0x07050008 -#define CLKIDL 0x07050009 -#define CLKMANCDT 0x0705000A -#define CLKMAN 0x0705000B -#define CLKTAKCDT 0x0705000C -#define CLKTAK 0x0705000D -#define CLKTLKCDT 0x0705000E -#define CLKTLK 0x0705000F -#define CLKTLK2CDT 0x07050010 -#define CLKTLK2 0x07050011 -#define CLKTLK3CDT 0x07050012 -#define CLKTLK3 0x07050013 -#define CLKTURNCDR 0x07050014 -#define CLKTURNCDT 0x07050015 -#define CLKTURN 0x07050016 -#define CLKWLKCDT 0x07050017 -#define CLKWLK 0x07050018 -#define CLKWLK2CDT 0x07050019 -#define CLKWLK2 0x0705001A -#define CLKWLK3CDT 0x0705001B -#define CLKWLK3 0x0705001C -#define CLKWULCDT 0x0705001D -#define CLKWUL 0x0705001E -#define GEOASC13CDT 0x0705001F -#define GEOASC13 0x07050020 -#define GEODES13CDT 0x07050021 -#define GEODES13 0x07050022 -#define GEOKEYCDT 0x07050023 -#define GEOKEY 0x07050024 -#define GEOKEY13CDT 0x07050025 -#define GEOKEY13 0x07050026 -#define GEOMAN13CDT 0x07050027 -#define GEOMAN13 0x07050028 -#define GEOTELCDT 0x07050029 -#define GEOTEL 0x0705002A -#define GEOTEL9CDT 0x0705002B -#define GEOTEL9 0x0705002C -#define KEY13CDT 0x0705002D -#define KEY13 0x0705002E -#define LATLUKCDR 0x0705002F -#define LATLUKCDT 0x07050030 -#define LATLUK 0x07050031 -#define LATRDSCDT 0x07050032 -#define LATRDS 0x07050033 -#define LATTLKCDT 0x07050034 -#define LATTLK 0x07050035 -#define PMTGIVCDT 0x07050036 -#define PMTGIV 0x07050037 -#define PMTPNOCDT 0x07050038 -#define PMTPNO 0x07050039 -#define PMTSTDCDT 0x0705003A -#define PMTSTD 0x0705003B -#define PMTTLKCDT 0x0705003C -#define PMTTLK 0x0705003D -#define PMTTLK8CDT 0x0705003E -#define PMTTLK8 0x0705003F -#define PMTTLK9CDT 0x07050040 -#define PMTTLK9 0x07050041 -#define PMTTOTLKCDR 0x07050042 -#define PMTTOTLKCDT 0x07050043 -#define PMTTOTLK 0x07050044 -#define PMTTURNCDR 0x07050045 -#define PMTTURNCDT 0x07050046 -#define PMTTURN 0x07050047 -#define PMTWLK1CDT 0x07050048 -#define PMTWLK1 0x07050049 -#define PMTWLK2CDT 0x0705004A -#define PMTWLK2 0x0705004B - // 76 entities in TXTs, 76 in datafiles. - // room14 -#define room14_PAL 0x07060000 -#define room14_l0 0x07060001 -#define room14_l1 0x07060002 -#define room14_gd1 0x07060003 -#define room14_flr 0x07060004 -#define GEOASC14CDT 0x07060005 -#define GEOASC14 0x07060006 -#define GEODES14CDT 0x07060007 -#define GEODES14 0x07060008 -#define GEODORCDR 0x07060009 -#define GEODORCDT 0x0706000A -#define GEODOR 0x0706000B - // 12 entities in TXTs, 12 in datafiles. - // room15 -#define room15_PAL 0x07070000 -#define room15_l0 0x07070001 -#define room15_l1 0x07070002 -#define room15_l2 0x07070003 -#define room15_gd1 0x07070004 -#define room15_gd2 0x07070005 -#define room15_flr 0x07070006 -#define DOROPN15CDT 0x07070007 -#define DOROPN15 0x07070008 -#define GEOBEDCDR 0x07070009 -#define GEOBEDCDT 0x0707000A -#define GEOBED 0x0707000B -#define GEODOR15CDT 0x0707000C -#define GEODOR15 0x0707000D -#define GEOENT15CDT 0x0707000E -#define GEOENT15 0x0707000F -#define GEOWIN1CDT 0x07070010 -#define GEOWIN1 0x07070011 -#define GEOWIN15CDT 0x07070012 -#define GEOWIN15 0x07070013 -#define GEOWIN2CDT 0x07070014 -#define GEOWIN2 0x07070015 -#define GEOWRBCDR 0x07070016 -#define GEOWRBCDT 0x07070017 -#define GEOWRB 0x07070018 -#define WINDOWCDT 0x07070019 -#define WINDOW 0x0707001A - // 27 entities in TXTs, 27 in datafiles. - // room16 -#define room16_PAL 0x07080000 -#define R16L0 0x07080001 -#define R16L1 0x07080002 -#define R16G1 0x07080003 -#define GEOILWCDT 0x07080004 -#define GEOILW 0x07080005 -#define GEOIRWCDT 0x07080006 -#define GEOIRW 0x07080007 -#define GEOMANLCDT 0x07080008 -#define GEOMANL 0x07080009 -#define GEOMANRCDT 0x0708000A -#define GEOMANR 0x0708000B -#define GEOMLWCDT 0x0708000C -#define GEOMLW 0x0708000D -#define GEOMRWCDT 0x0708000E -#define GEOMRW 0x0708000F -#define GEOOLWCDT 0x07080010 -#define GEOOLWCDR 0x07080011 -#define GEOOLW 0x07080012 -#define GEOORWCDT 0x07080013 -#define GEOORWCDR 0x07080014 -#define GEOORW 0x07080015 -#define MANLCDT 0x07080016 -#define MANL 0x07080017 -#define MANRCDT 0x07080018 -#define MANR 0x07080019 - // 26 entities in TXTs, 26 in datafiles. - // room17 -#define room17_PAL 0x07090000 -#define room17_l0 0x07090001 -#define room17_l1 0x07090002 -#define room17_l2 0x07090003 -#define room17_gd1 0x07090004 -#define room17_gd2 0x07090005 -#define room17_flr 0x07090006 -#define IBACK17 0x07090007 -#define IBACK17PAL 0x07090008 -#define GEOINQ17 0x07090009 -#define GEOINQ17CDT 0x0709000A -#define SBACK17 0x0709000B -#define SBACK17PAL 0x0709000C -#define GEOSUR17 0x0709000D -#define GEOSUR17CDT 0x0709000E -#define ASSTAIR2_PAL 0x0709000F -#define ASSTAIR2 0x07090010 -#define ASSTAIRCDT 0x07090011 -#define ASSTAIR 0x07090012 -#define ASSDORCDT 0x07090013 -#define ASSDOR 0x07090014 -#define ASSDOR2CDT 0x07090015 -#define ASSDOR2 0x07090016 -#define ASSTRWCDT 0x07090017 -#define ASSTRW 0x07090018 -#define ASSWRBCDT 0x07090019 -#define ASSWRB 0x0709001A -#define ASWLK17CDT 0x0709001B -#define ASWLK17 0x0709001C -#define BRFCASECDT 0x0709001D -#define BRFCASE 0x0709001E -#define GEOBCBCDR 0x0709001F -#define GEOBCBCDT 0x07090020 -#define GEOBCB 0x07090021 -#define GEOBED17CDT 0x07090022 -#define GEOBED17 0x07090023 -#define GEOBFCCDR 0x07090024 -#define GEOBFCCDT 0x07090025 -#define GEOBFC 0x07090026 -#define GEODOR17CDT 0x07090027 -#define GEODOR17 0x07090028 -#define GEODOR2CDR 0x07090029 -#define GEODOR2CDT 0x0709002A -#define GEODOR2 0x0709002B -#define GEOPANTSCDT 0x0709002C -#define GEOPANTS 0x0709002D -#define GEOWIN8CDT 0x0709002E -#define GEOWIN8 0x0709002F -#define GEOWIN9CDT 0x07090030 -#define GEOWIN9 0x07090031 -#define GEOWRB1CDR 0x07090032 -#define GEOWRB1CDT 0x07090033 -#define GEOWRB1 0x07090034 -#define GEOWRB2CDT 0x07090035 -#define GEOWRB2 0x07090036 -#define GEOWRB3CDR 0x07090037 -#define GEOWRB3CDT 0x07090038 -#define GEOWRB3 0x07090039 -#define GEOWRB4CDT 0x0709003A -#define GEOWRB4 0x0709003B -#define PANTS2CDT 0x0709003C -#define PANTS2 0x0709003D -#define PANTWRBCDT 0x0709003E -#define PANTWRB 0x0709003F -#define STATDOORCDT 0x07090040 -#define STATDOOR 0x07090041 -#define WRBDOR17CDT 0x07090042 -#define WRBDOR17 0x07090043 - // 68 entities in TXTs, 68 in datafiles. - // room18 -#define R18SPRPAL 0x070A0000 -#define room18_PAL 0x070A0001 -#define room18_l0 0x070A0002 -#define room18_l1 0x070A0003 -#define room18_l2 0x070A0004 -#define room18_gd1 0x070A0005 -#define room18_gd2 0x070A0006 -#define room18_flr 0x070A0007 -#define FAN18CDT 0x070A0008 -#define FAN18 0x070A0009 -#define GENBNDCDT 0x070A000A -#define GENBND 0x070A000B -#define GENSTRCDT 0x070A000C -#define GENSTR 0x070A000D -#define GENTLK18CDT 0x070A000E -#define GENTLK18 0x070A000F -#define GEOLVE18CDT 0x070A0010 -#define GEOLVE18 0x070A0011 -#define MOUBAK18CDT 0x070A0012 -#define MOUBAK18 0x070A0013 -#define MOUBUSYCDT 0x070A0014 -#define MOUBUSY 0x070A0015 -#define MOUTKROSCDT 0x070A0016 -#define MOUTKROS 0x070A0017 -#define MOUTLK18CDT 0x070A0018 -#define MOUTLK18 0x070A0019 -#define MOUWLK18CDT 0x070A001A -#define MOUWLK18 0x070A001B -#define ROSBAK18CDT 0x070A001C -#define ROSBAK18 0x070A001D -#define ROSBUSYCDT 0x070A001E -#define ROSBUSY 0x070A001F -#define ROSSTDCDT 0x070A0020 -#define ROSSTD 0x070A0021 -#define ROSTLK18CDT 0x070A0022 -#define ROSTLK18 0x070A0023 -#define ROSTLKXCDT 0x070A0024 -#define ROSTLKX 0x070A0025 -#define ROSTURNCDR 0x070A0026 -#define ROSTURNCDT 0x070A0027 -#define ROSTURN 0x070A0028 -#define ROSWLK18CDT 0x070A0029 -#define ROSWLK18 0x070A002A - // 43 entities in TXTs, 43 in datafiles. - // room46 -#define room46_PAL 0x070B0000 -#define room46_l0 0x070B0001 -#define room46_l1 0x070B0002 -#define room46_l2 0x070B0003 -#define room46_gd1 0x070B0004 -#define room46_gd2 0x070B0005 -#define room46_flr 0x070B0006 -#define MANU46CDT 0x070B0007 -#define MANU46 0x070B0008 - // 9 entities in TXTs, 9 in datafiles. -// paris_3 - // sound_fx -#define FX_MUESEXT 0x08000000 -#define FX_AIRCON28 0x08000001 -#define FX_SARCO28A 0x08000002 -#define FX_SARCO28B 0x08000003 -#define FX_SARCO28C 0x08000004 -#define FX_TOTEM28A 0x08000005 -#define FX_ALARM 0x08000006 -#define FX_CARABINE 0x08000007 -#define FX_DOOR29 0x08000008 -#define FX_FISHFALL 0x08000009 -#define FX_GDROP29 0x0800000A -#define FX_GUI_HIT 0x0800000B -#define FX_GUN1 0x0800000C -#define FX_ROPEDOWN 0x0800000D -#define FX_SARCO29 0x0800000E -#define FX_SMASHGLA 0x0800000F -#define FX_TOTEM29A 0x08000010 -#define FX_TOTEM29B 0x08000011 -#define FX_HOSPEXT 0x08000012 -#define FX_GRAVEL1 0x08000013 -#define FX_GRAVEL2 0x08000014 -#define FX_HOSPNOIS 0x08000015 -#define FX_CUPBOPEN 0x08000016 -#define FX_CUPBCLOS 0x08000017 -#define FX_KIKSHINY 0x08000018 -#define FX_SHINY 0x08000019 -#define FX_SHINYOFF 0x0800001A -#define FX_SHINYON 0x0800001B -#define FX_BLOODPRE 0x0800001C -#define FX_GUN34 0x0800001D -#define FX_PULSE2 0x0800001E -#define FX_PULSE3 0x0800001F - // 32 entities in TXTs, 32 in datafiles. - // benoir -#define MEGABEN 0x08010000 -#define BEN_WLK 0x08010001 -#define STDTAL1 0x08010002 -#define STDTAL1CDT 0x08010003 -#define STDTAL3 0x08010004 -#define STDTAL3CDT 0x08010005 -#define STDTAL5 0x08010006 -#define STDTAL5CDT 0x08010007 -#define XBENPG3 0x08010008 -#define XBENPG3CDT 0x08010009 -#define XBENPG5 0x0801000A -#define XBENPG5CDT 0x0801000B - // 12 entities in TXTs, 12 in datafiles. - // mus -#define MEGAMUS 0x08020000 -#define MUS_WLK 0x08020001 -#define MUSTLK0 0x08020002 -#define MUSTLK0CDT 0x08020003 -#define MUSTLK1 0x08020004 -#define MUSTLK1CDT 0x08020005 -#define MUSTLK2 0x08020006 -#define MUSTLK2CDT 0x08020007 -#define MUSTLK3 0x08020008 -#define MUSTLK3CDT 0x08020009 -#define MUSTLK4 0x0802000A -#define MUSTLK4CDT 0x0802000B -#define MUSTLK5 0x0802000C -#define MUSTLK5CDT 0x0802000D -#define MUSTLK6 0x0802000E -#define MUSTLK6CDT 0x0802000F -#define MUSTLK7 0x08020010 -#define MUSTLK7CDT 0x08020011 - // 18 entities in TXTs, 18 in datafiles. - // white -#define MEGA_WHITE 0x08030000 -#define WHTTLK0 0x08030001 -#define WHTTLK0CDT 0x08030002 -#define WHTTLK1 0x08030003 -#define WHTTLK1CDT 0x08030004 -#define WHTTLK2 0x08030005 -#define WHTTLK2CDT 0x08030006 -#define WHTTLK3 0x08030007 -#define WHTTLK3CDT 0x08030008 -#define WHTTLK4 0x08030009 -#define WHTTLK4CDT 0x0803000A -#define WHTTLK5 0x0803000B -#define WHTTLK5CDT 0x0803000C -#define WHTTLK6 0x0803000D -#define WHTTLK6CDT 0x0803000E -#define WHTTLK7 0x0803000F -#define WHTTLK7CDT 0x08030010 -#define WHTSHRUG 0x08030011 -#define WHTSHRUGCDT 0x08030012 -#define XGEOPG3 0x08030013 -#define XGEOPG3CDT 0x08030014 -#define XGEOPG5 0x08030015 -#define XGEOPG5CDT 0x08030016 - // 23 entities in TXTs, 23 in datafiles. - // room27 -#define PARIS3_PAL 0x08040000 -#define room27_PAL 0x08040001 -#define R27L0 0x08040002 -#define R27L1 0x08040003 -#define R27L2 0x08040004 -#define R27G1 0x08040005 -#define R27G2 0x08040006 -#define room27_flr 0x08040007 -#define GEOWIN27CDR 0x08040008 -#define GEOWIN27CDT 0x08040009 -#define GEOWIN27 0x0804000A - // 11 entities in TXTs, 11 in datafiles. - // room28 -#define R28SPRPAL 0x08050000 -#define R28PAL 0x08050001 -#define R28L0 0x08050002 -#define R28L1 0x08050003 -#define R28L2 0x08050004 -#define R28G1 0x08050005 -#define R28G2 0x08050006 -#define room28_flr 0x08050007 -#define GEOALMCDT 0x08050008 -#define GEOALM 0x08050009 -#define GEOSARCDT 0x0805000A -#define GEOSAR 0x0805000B -#define GEOSAR1CDT 0x0805000C -#define GEOSAR1 0x0805000D -#define GEOSAR2CDR 0x0805000E -#define GEOSAR2CDT 0x0805000F -#define GEOSAR2 0x08050010 -#define GEOSHK28CDT 0x08050011 -#define GEOSHK28 0x08050012 -#define GEOTOTCDT 0x08050013 -#define GEOTOT 0x08050014 -#define GEOWINCDT 0x08050015 -#define GEOWIN 0x08050016 -#define GUAWINCDT 0x08050017 -#define GUAWIN 0x08050018 -#define LOBEXITCDT 0x08050019 -#define LOBEXIT 0x0805001A -#define LOBMANCDT 0x0805001B -#define LOBMAN 0x0805001C -#define LOBSTUCDT 0x0805001D -#define LOBSTU 0x0805001E -#define LOBTLKCDT 0x0805001F -#define LOBTLK 0x08050020 -#define LOBTURN1CDT 0x08050021 -#define LOBTURN1 0x08050022 -#define LOBTURN2CDT 0x08050023 -#define LOBTURN2 0x08050024 -#define MUSOPNCDT 0x08050025 -#define MUSOPN 0x08050026 -#define SARDOR28CDT 0x08050027 -#define SARDOR28 0x08050028 -#define TOTEM28CDT 0x08050029 -#define TOTEM28 0x0805002A -#define TRIPOD28CDT 0x0805002B -#define TRIPOD28 0x0805002C -#define WINDO28CDR 0x0805002D -#define WINDO28CDT 0x0805002E -#define WINDO28 0x0805002F -#define WINROD28CDT 0x08050030 -#define WINROD28 0x08050031 - // 50 entities in TXTs, 50 in datafiles. - // room29 -#define R29SPRPAL 0x08060000 -#define BBACK29SPRPAL 0x08060001 -#define R29PAL 0x08060002 -#define R29L0 0x08060003 -#define R29L1 0x08060004 -#define R29G1 0x08060005 -#define room29_flr 0x08060006 -#define BBACK29 0x08060007 -#define BBACK29PAL 0x08060008 -#define GEOSUR29CDT 0x08060009 -#define GEOSUR29 0x0806000A -#define CASECDT 0x0806000B -#define CASE 0x0806000C -#define DOOR29CDT 0x0806000D -#define DOOR29 0x0806000E -#define FISH29CDT 0x0806000F -#define FISH29 0x08060010 -#define FLAPENTCDT 0x08060011 -#define FLAPENT 0x08060012 -#define FLAPTLK1CDT 0x08060013 -#define FLAPTLK1 0x08060014 -#define FLAPTLK3CDT 0x08060015 -#define FLAPTLK3 0x08060016 -#define FLAPTOR1CDR 0x08060017 -#define FLAPTOR1CDT 0x08060018 -#define FLAPTOR1 0x08060019 -#define FLAPTOR4CDT 0x0806001A -#define FLAPTOR4 0x0806001B -#define FLAPWLKCDT 0x0806001C -#define FLAPWLK 0x0806001D -#define GEODEDCDT 0x0806001E -#define GEODED 0x0806001F -#define GEOFISHCDT 0x08060020 -#define GEOFISH 0x08060021 -#define GEOFWDCDT 0x08060022 -#define GEOFWD 0x08060023 -#define GEOPEEKCDT 0x08060024 -#define GEOPEEK 0x08060025 -#define GEOSAR6CDT 0x08060026 -#define GEOSAR6 0x08060027 -#define GEOTOT29CDT 0x08060028 -#define GEOTOT29 0x08060029 -#define GEOTOTBCDT 0x0806002A -#define GEOTOTB 0x0806002B -#define GEOTPTOCDT 0x0806002C -#define GEOTPTO 0x0806002D -#define GUIENTCDT 0x0806002E -#define GUIENT 0x0806002F -#define GUIGUNCDT 0x08060030 -#define GUIGUN 0x08060031 -#define GUIKNECDT 0x08060032 -#define GUIKNE 0x08060033 -#define GUIKNE1CDT 0x08060034 -#define GUIKNE1 0x08060035 -#define GUITLK1CDT 0x08060036 -#define GUITLK1 0x08060037 -#define GUITLK3CDT 0x08060038 -#define GUITLK3 0x08060039 -#define GUITLK4CDT 0x0806003A -#define GUITLK4 0x0806003B -#define GUIWLKCDT 0x0806003C -#define GUIWLK 0x0806003D -#define NICPUS1CDT 0x0806003E -#define NICPUS1 0x0806003F -#define ROPE29CDT 0x08060040 -#define ROPE29 0x08060041 -#define SARDOORCDT 0x08060042 -#define SARDOOR 0x08060043 -#define TOR1CDT 0x08060044 -#define TOR1 0x08060045 -#define TOR3CDR 0x08060046 -#define TOR3CDT 0x08060047 -#define TOR3 0x08060048 -#define TOR4CDT 0x08060049 -#define TOR4 0x0806004A -#define TOR6CDT 0x0806004B -#define TOR6 0x0806004C -#define TOR7CDT 0x0806004D -#define TOR7 0x0806004E -#define TOTFALLCDT 0x0806004F -#define TOTFALL 0x08060050 - // 81 entities in TXTs, 81 in datafiles. - // room31 -#define room31_PAL 0x08070000 -#define room31_l0 0x08070001 -#define room31_flr 0x08070002 -#define GEOAMBCDT 0x08070003 -#define GEOAMB 0x08070004 -#define GEODOR31CDT 0x08070005 -#define GEODOR31 0x08070006 - // 7 entities in TXTs, 7 in datafiles. - // room32 -#define room32_PAL 0x08080000 -#define room32_l0 0x08080001 -#define room32_l1 0x08080002 -#define room32_l2 0x08080003 -#define room32_gd1 0x08080004 -#define room32_gd2 0x08080005 -#define room32_flr 0x08080006 -#define CONSTPCDT 0x08080007 -#define CONSTP 0x08080008 -#define CONTLKCDT 0x08080009 -#define CONTLK 0x0808000A -#define CONTLK2CDT 0x0808000B -#define CONTLK2 0x0808000C -#define CONWLKCDT 0x0808000D -#define CONWLK 0x0808000E -#define RECCOMCDT 0x0808000F -#define RECCOM 0x08080010 -#define RECKEYCDT 0x08080011 -#define RECKEY 0x08080012 -#define RECTLKCDT 0x08080013 -#define RECTLK 0x08080014 -#define RECTLK2CDT 0x08080015 -#define RECTLK2 0x08080016 -#define RECTRNCDT 0x08080017 -#define RECTRN 0x08080018 - // 25 entities in TXTs, 25 in datafiles. - // room33 -#define room33_PAL 0x08090000 -#define room33_l0 0x08090001 -#define room33_l1 0x08090002 -#define room33_l2 0x08090003 -#define room33_gd1 0x08090004 -#define room33_gd2 0x08090005 -#define room33_flr 0x08090006 -#define DOMDRNCDT 0x08090007 -#define DOMDRN 0x08090008 -#define DOMDUHCDT 0x08090009 -#define DOMDUH 0x0809000A -#define DOMKIKCDT 0x0809000B -#define DOMKIK 0x0809000C -#define DOMPLGCDT 0x0809000D -#define DOMPLG 0x0809000E -#define DOMTLKCDT 0x0809000F -#define DOMTLK 0x08090010 -#define DOMVACCDT 0x08090011 -#define DOMVAC 0x08090012 -#define DOMWLKCDT 0x08090013 -#define DOMWLK 0x08090014 -#define DOMWLK2CDT 0x08090015 -#define DOMWLK2 0x08090016 -#define DOMWLK3CDT 0x08090017 -#define DOMWLK3 0x08090018 -#define DOMWLK4CDT 0x08090019 -#define DOMWLK4 0x0809001A -#define GEOCOTCDT 0x0809001B -#define GEOCOT 0x0809001C -#define GEOPLG33CDT 0x0809001D -#define GEOPLG33 0x0809001E -#define GEOWATCDT 0x0809001F -#define GEOWAT 0x08090020 -#define GEOWWATCDT 0x08090021 -#define GEOWWAT 0x08090022 -#define LEAD1CDT 0x08090023 -#define LEAD1 0x08090024 -#define LEAD2CDT 0x08090025 -#define LEAD2 0x08090026 -#define SHINY33CDT 0x08090027 -#define SHINY33 0x08090028 - // 41 entities in TXTs, 41 in datafiles. - // room34 -#define room34_PAL 0x080A0000 -#define room34_l0 0x080A0001 -#define room34_l1 0x080A0002 -#define room34_l2 0x080A0003 -#define room34_l3 0x080A0004 -#define room34_gd1 0x080A0005 -#define room34_gd2 0x080A0006 -#define room34_gd3 0x080A0007 -#define room34_flr 0x080A0008 -#define R34PLX 0x080A0009 -#define BENBP1CDT 0x080A000A -#define BENBP1 0x080A000B -#define BENBP2CDT 0x080A000C -#define BENBP2 0x080A000D -#define DOOR34CDR 0x080A000E -#define DOOR34CDT 0x080A000F -#define DOOR34 0x080A0010 -#define GENDTLKCDT 0x080A0011 -#define GENDTLK 0x080A0012 -#define GENENTCDT 0x080A0013 -#define GENENT 0x080A0014 -#define GENSHOTCDT 0x080A0015 -#define GENSHOT 0x080A0016 -#define GENSTLKCDT 0x080A0017 -#define GENSTLK 0x080A0018 -#define GENSUPCDT 0x080A0019 -#define GENSUP 0x080A001A -#define GENTRNCDT 0x080A001B -#define GENTRN 0x080A001C -#define GEOBAKCDT 0x080A001D -#define GEOBAK 0x080A001E -#define GEOBP2CDT 0x080A001F -#define GEOBP2 0x080A0020 -#define GEOCH1CDR 0x080A0021 -#define GEOCH1CDT 0x080A0022 -#define GEOCH1 0x080A0023 -#define GEOCH2CDR 0x080A0024 -#define GEOCH2CDT 0x080A0025 -#define GEOCH2 0x080A0026 -#define GEOCH3CDR 0x080A0027 -#define GEOCH3CDT 0x080A0028 -#define GEOCH3 0x080A0029 -#define GEODOR34CDT 0x080A002A -#define GEODOR34 0x080A002B -#define GEOENT34CDT 0x080A002C -#define GEOENT34 0x080A002D -#define GEONURBPCDT 0x080A002E -#define GEONURBP 0x080A002F -#define GEOTAKCDT 0x080A0030 -#define GEOTAK 0x080A0031 -#define GEOTRYDCDT 0x080A0032 -#define GEOTRYD 0x080A0033 -#define GEOTRYTKCDT 0x080A0034 -#define GEOTRYTK 0x080A0035 -#define HATGIVCDT 0x080A0036 -#define HATGIV 0x080A0037 -#define HATSTPCDT 0x080A0038 -#define HATSTP 0x080A0039 -#define HATTLKCDT 0x080A003A -#define HATTLK 0x080A003B -#define HATWLKCDT 0x080A003C -#define HATWLK 0x080A003D -#define HATWLK2CDT 0x080A003E -#define HATWLK2 0x080A003F -#define MONITOR 0x080A0040 -#define MONITOR_PAL 0x080A0041 -#define PULSE1CDT 0x080A0042 -#define PULSE1 0x080A0043 -#define PULSE2CDT 0x080A0044 -#define PULSE2 0x080A0045 -#define PULSE3CDT 0x080A0046 -#define PULSE3 0x080A0047 -#define RENTLKCDT 0x080A0048 -#define RENTLK 0x080A0049 -#define SMARMCDR 0x080A004A -#define SMARMCDT 0x080A004B -#define SMARM 0x080A004C -#define SMSTPCDR 0x080A004D -#define SMSTPCDT 0x080A004E -#define SMSTP 0x080A004F -#define SMTALKCDT 0x080A0050 -#define SMTALK 0x080A0051 -#define SMTALK2CDT 0x080A0052 -#define SMTALK2 0x080A0053 -#define STUDENTCDT 0x080A0054 -#define STUDENT 0x080A0055 -#define STUDGIVCDT 0x080A0056 -#define STUDGIV 0x080A0057 -#define STUDMOVCDT 0x080A0058 -#define STUDMOV 0x080A0059 - // 90 entities in TXTs, 90 in datafiles. - // room35 -#define room35_PAL 0x080B0000 -#define room35_l0 0x080B0001 -#define room35_l1 0x080B0002 -#define room35_gd1 0x080B0003 -#define room35_flr 0x080B0004 -#define ALSHOCKCDT 0x080B0005 -#define ALSHOCK 0x080B0006 -#define CURFLATCDT 0x080B0007 -#define CURFLAT 0x080B0008 -#define EKLBED35CDT 0x080B0009 -#define EKLBED35 0x080B000A -#define EKLTLK35CDT 0x080B000B -#define EKLTLK35 0x080B000C -#define EKLWLK35CDT 0x080B000D -#define EKLWLK35 0x080B000E -#define GEORCT35CDT 0x080B000F -#define GEORCT35 0x080B0010 -#define GEOSIT35CDR 0x080B0011 -#define GEOSIT35CDT 0x080B0012 -#define GEOSIT35 0x080B0013 -#define GEOTLKCDT 0x080B0014 -#define GEOTLK 0x080B0015 -#define GEOTLK35CDT 0x080B0016 -#define GEOTLK35 0x080B0017 -#define GEOTRN35CDT 0x080B0018 -#define GEOTRN35 0x080B0019 -#define JAQTLK1CDT 0x080B001A -#define JAQTLK1 0x080B001B -#define JAQTLK2CDT 0x080B001C -#define JAQTLK2 0x080B001D - // 30 entities in TXTs, 30 in datafiles. -// paris_4 - // sound_fx -#define FX_COVDWN 0x09000000 -#define FX_KEYIN 0x09000001 -#define FX_MANOP36 0x09000002 -#define FX_MONTAMB 0x09000003 -#define FX_OOH 0x09000004 -#define FX_PULLUP36 0x09000005 -#define FX_REPLCE36 0x09000006 -#define FX_AMBIEN37 0x09000007 -#define FX_CHAIN37 0x09000008 -#define FX_CHAIN37B 0x09000009 -#define FX_DOOR37 0x0900000A -#define FX_HOLE37 0x0900000B -#define FX_KNOCK37 0x0900000C -#define FX_KNOCK37B 0x0900000D -#define FX_WINCH37 0x0900000E -#define FX_AIRCON41 0x0900000F -#define FX_FONEDN41 0x09000010 -#define FX_FONEUP41 0x09000011 -#define FX_PHONCALL 0x09000012 -#define FX_THERMO1 0x09000013 -#define FX_TAPDRIP 0x09000014 -#define FX_DRIER1 0x09000015 -#define FX_CHURCHFX 0x09000016 - // 23 entities in TXTs, 23 in datafiles. - // room36 -#define R36SPRPAL 0x09010000 -#define R36L0 0x09010001 -#define R36L1 0x09010002 -#define R36G1 0x09010003 -#define room36_PAL 0x09010004 -#define room36_flr 0x09010005 -#define R36PLX 0x09010006 -#define BAL36CDT 0x09010007 -#define BAL36 0x09010008 -#define CRO36APPCDT 0x09010009 -#define CRO36APP 0x0901000A -#define CRO36GEOCDT 0x0901000B -#define CRO36GEO 0x0901000C -#define CRO36IDLCDT 0x0901000D -#define CRO36IDL 0x0901000E -#define CRO36JUGCDT 0x0901000F -#define CRO36JUG 0x09010010 -#define CRO36UNICDT 0x09010011 -#define CRO36UNI 0x09010012 -#define GEN36DRICDT 0x09010013 -#define GEN36DRI 0x09010014 -#define GEN36FEHCDT 0x09010015 -#define GEN36FEH 0x09010016 -#define GEN36HURCDT 0x09010017 -#define GEN36HUR 0x09010018 -#define GEN36LEACDT 0x09010019 -#define GEN36LEA 0x0901001A -#define GEN36POICDR 0x0901001B -#define GEN36POICDT 0x0901001C -#define GEN36POI 0x0901001D -#define GEN36SPECDT 0x0901001E -#define GEN36SPE 0x0901001F -#define GEN36TALCDT 0x09010020 -#define GEN36TAL 0x09010021 -#define GEO36CLOCDT 0x09010022 -#define GEO36CLO 0x09010023 -#define GEO36ENTCDT 0x09010024 -#define GEO36ENT 0x09010025 -#define GEO36EXTCDT 0x09010026 -#define GEO36EXT 0x09010027 -#define GEO36JUGCDT 0x09010028 -#define GEO36JUG 0x09010029 -#define GEO36KNECDR 0x0901002A -#define GEO36KNECDT 0x0901002B -#define GEO36KNE 0x0901002C -#define GEO36LUKCDR 0x0901002D -#define GEO36LUKCDT 0x0901002E -#define GEO36LUK 0x0901002F -#define GEO36NOSCDT 0x09010030 -#define GEO36NOS 0x09010031 -#define GEO36OPECDT 0x09010032 -#define GEO36OPE 0x09010033 -#define GEO36POPCDT 0x09010034 -#define GEO36POP 0x09010035 -#define GEO36SHOCDR 0x09010036 -#define GEO36SHOCDT 0x09010037 -#define GEO36SHO 0x09010038 -#define GEO36SNTCDT 0x09010039 -#define GEO36SNT 0x0901003A -#define GEO36STDCDT 0x0901003B -#define GEO36STD 0x0901003C -#define GEO36STUCDT 0x0901003D -#define GEO36STU 0x0901003E -#define GEO36TAKCDT 0x0901003F -#define GEO36TAK 0x09010040 -#define HAT36CDT 0x09010041 -#define HAT36 0x09010042 -#define JUG36FINCDT 0x09010043 -#define JUG36FIN 0x09010044 -#define JUG36FURCDT 0x09010045 -#define JUG36FUR 0x09010046 -#define JUG36GIVCDT 0x09010047 -#define JUG36GIV 0x09010048 -#define JUG36GOCDT 0x09010049 -#define JUG36GO 0x0901004A -#define JUG36JUGCDT 0x0901004B -#define JUG36JUG 0x0901004C -#define JUG36LAFCDT 0x0901004D -#define JUG36LAF 0x0901004E -#define JUG36STACDT 0x0901004F -#define JUG36STA 0x09010050 -#define JUG36TAKCDT 0x09010051 -#define JUG36TAK 0x09010052 -#define JUG36TALCDT 0x09010053 -#define JUG36TAL 0x09010054 -#define MANCOV36CDT 0x09010055 -#define MANCOV36 0x09010056 -#define MANOFF36CDT 0x09010057 -#define MANOFF36 0x09010058 -#define VIN36CDT 0x09010059 -#define VIN36 0x0901005A - // 91 entities in TXTs, 91 in datafiles. - // room37 -#define room37_PAL 0x09020000 -#define R37L0 0x09020001 -#define R37L1 0x09020002 -#define R37G1 0x09020003 -#define room37_flr 0x09020004 -#define DOR37COLCDT 0x09020005 -#define DOR37COL 0x09020006 -#define GEO37ASCCDT 0x09020007 -#define GEO37ASC 0x09020008 -#define GEO37COGCDT 0x09020009 -#define GEO37COG 0x0902000A -#define GEO37DESCDT 0x0902000B -#define GEO37DES 0x0902000C -#define GEO37HUKCDR 0x0902000D -#define GEO37HUKCDT 0x0902000E -#define GEO37HUK 0x0902000F -#define GEO37INBCDT 0x09020010 -#define GEO37INB 0x09020011 -#define GEO37LEVCDT 0x09020012 -#define GEO37LEV 0x09020013 -#define GEO37OUTCDT 0x09020014 -#define GEO37OUT 0x09020015 -#define GEO37RUNCDT 0x09020016 -#define GEO37RUN 0x09020017 -#define GEO37TA1CDT 0x09020018 -#define GEO37TA1 0x09020019 -#define GEO37TA2CDT 0x0902001A -#define GEO37TA2 0x0902001B -#define GEO37TA3CDT 0x0902001C -#define GEO37TA3 0x0902001D -#define GEO37TA4CDT 0x0902001E -#define GEO37TA4 0x0902001F -#define GEO37TU1CDR 0x09020020 -#define GEO37TU1CDT 0x09020021 -#define GEO37TU1 0x09020022 -#define GEO37TU2CDT 0x09020023 -#define GEO37TU2 0x09020024 -#define GEO37WLCDR 0x09020025 -#define GEO37WLCDT 0x09020026 -#define GEO37WL 0x09020027 -#define HOO37LBOCDR 0x09020028 -#define HOO37LBOCDT 0x09020029 -#define HOO37LBO 0x0902002A -#define HOO37PULCDT 0x0902002B -#define HOO37PUL 0x0902002C -#define ROCKS1CDT 0x0902002D -#define ROCKS1 0x0902002E -#define WAL37BRECDT 0x0902002F -#define WAL37BRE 0x09020030 -#define WAL37SLICDT 0x09020031 -#define WAL37SLI 0x09020032 -#define WATER37CDT 0x09020033 -#define WATER37 0x09020034 -#define WATER37ACDT 0x09020035 -#define WATER37A 0x09020036 -#define WHEEL37CDT 0x09020037 -#define WHEEL37 0x09020038 - // 57 entities in TXTs, 57 in datafiles. - // room38 -#define R38SPRPAL 0x09030000 -#define room38_PAL 0x09030001 -#define R38L0 0x09030002 -#define R38L1 0x09030003 -#define R38G1 0x09030004 -#define room38_flr 0x09030005 -#define BBACK38 0x09030006 -#define BBACK38PAL 0x09030007 -#define GEOINQ38CDT 0x09030008 -#define GEOINQ38 0x09030009 -#define GEO38AS1CDT 0x0903000A -#define GEO38AS1 0x0903000B -#define GEO38AS2CDT 0x0903000C -#define GEO38AS2 0x0903000D -#define GEO38DE1CDT 0x0903000E -#define GEO38DE1 0x0903000F -#define GEO38DE2CDT 0x09030010 -#define GEO38DE2 0x09030011 -#define GEO38LUKCDR 0x09030012 -#define GEO38LUKCDT 0x09030013 -#define GEO38LUK 0x09030014 - // 21 entities in TXTs, 21 in datafiles. - // room39 -#define R39SPRPAL 0x09040000 -#define R39L0 0x09040001 -#define R39L1 0x09040002 -#define R39G1 0x09040003 -#define room39_PAL 0x09040004 -#define room39_flr 0x09040005 -#define R39PLX 0x09040006 -#define BOA39GOACDT 0x09040007 -#define BOA39GOA 0x09040008 -#define BOA39SPRCDT 0x09040009 -#define BOA39SPR 0x0904000A -#define CIV391T2CDR 0x0904000B -#define CIV391T2CDT 0x0904000C -#define CIV391T2 0x0904000D -#define CIV391T3CDR 0x0904000E -#define CIV391T3CDT 0x0904000F -#define CIV391T3 0x09040010 -#define CIV392T3CDR 0x09040011 -#define CIV392T3CDT 0x09040012 -#define CIV392T3 0x09040013 -#define CIV39T1CDT 0x09040014 -#define CIV39T1 0x09040015 -#define CIV39T2CDT 0x09040016 -#define CIV39T2 0x09040017 -#define CIV39T3CDT 0x09040018 -#define CIV39T3 0x09040019 -#define CIVLIST1CDT 0x0904001A -#define CIVLIST1 0x0904001B -#define CIVLIST2CDT 0x0904001C -#define CIVLIST2 0x0904001D -#define CIVLIST3CDT 0x0904001E -#define CIVLIST3 0x0904001F -#define COL391T2CDR 0x09040020 -#define COL391T2CDT 0x09040021 -#define COL391T2 0x09040022 -#define COL391T3CDR 0x09040023 -#define COL391T3CDT 0x09040024 -#define COL391T3 0x09040025 -#define COL392T3CDR 0x09040026 -#define COL392T3CDT 0x09040027 -#define COL392T3 0x09040028 -#define COL39T1CDT 0x09040029 -#define COL39T1 0x0904002A -#define COL39T2CDT 0x0904002B -#define COL39T2 0x0904002C -#define COL39T3CDT 0x0904002D -#define COL39T3 0x0904002E -#define COLLIST2CDT 0x0904002F -#define COLLIST2 0x09040030 -#define COLLIST3CDT 0x09040031 -#define COLLIST3 0x09040032 -#define CON39TALCDT 0x09040033 -#define CON39TAL 0x09040034 -#define EKL391T2CDR 0x09040035 -#define EKL391T2CDT 0x09040036 -#define EKL391T2 0x09040037 -#define EKL391T3CDR 0x09040038 -#define EKL391T3CDT 0x09040039 -#define EKL391T3 0x0904003A -#define EKL392T3CDR 0x0904003B -#define EKL392T3CDT 0x0904003C -#define EKL392T3 0x0904003D -#define EKL39T1CDT 0x0904003E -#define EKL39T1 0x0904003F -#define EKL39T2CDT 0x09040040 -#define EKL39T2 0x09040041 -#define EKL39T3CDT 0x09040042 -#define EKL39T3 0x09040043 -#define EKLLIST1CDT 0x09040044 -#define EKLLIST1 0x09040045 -#define EKLLIST2CDT 0x09040046 -#define EKLLIST2 0x09040047 -#define EKLLIST3CDT 0x09040048 -#define EKLLIST3 0x09040049 -#define EXE391T2CDR 0x0904004A -#define EXE391T2CDT 0x0904004B -#define EXE391T2 0x0904004C -#define EXE391T3CDR 0x0904004D -#define EXE391T3CDT 0x0904004E -#define EXE391T3 0x0904004F -#define EXE392T3CDR 0x09040050 -#define EXE392T3CDT 0x09040051 -#define EXE392T3 0x09040052 -#define EXE39T1CDT 0x09040053 -#define EXE39T1 0x09040054 -#define EXE39T2CDT 0x09040055 -#define EXE39T2 0x09040056 -#define EXE39T3CDT 0x09040057 -#define EXE39T3 0x09040058 -#define GEO39ENTCDT 0x09040059 -#define GEO39ENT 0x0904005A -#define GEO39EXTCDT 0x0904005B -#define GEO39EXT 0x0904005C -#define GEO39GEMCDR 0x0904005D -#define GEO39GEMCDT 0x0904005E -#define GEO39GEM 0x0904005F -#define GEO39TRICDR 0x09040060 -#define GEO39TRICDT 0x09040061 -#define GEO39TRI 0x09040062 -#define LAT391T2CDR 0x09040063 -#define LAT391T2CDT 0x09040064 -#define LAT391T2 0x09040065 -#define LAT391T3CDR 0x09040066 -#define LAT391T3CDT 0x09040067 -#define LAT391T3 0x09040068 -#define LAT392T3CDR 0x09040069 -#define LAT392T3CDT 0x0904006A -#define LAT392T3 0x0904006B -#define LAT39T1CDT 0x0904006C -#define LAT39T1 0x0904006D -#define LAT39T2CDT 0x0904006E -#define LAT39T2 0x0904006F -#define LAT39T3CDT 0x09040070 -#define LAT39T3 0x09040071 -#define LATLIST1CDT 0x09040072 -#define LATLIST1 0x09040073 -#define LATLIST2CDT 0x09040074 -#define LATLIST2 0x09040075 -#define LATLIST3CDT 0x09040076 -#define LATLIST3 0x09040077 -#define MAS391T2CDR 0x09040078 -#define MAS391T2CDT 0x09040079 -#define MAS391T2 0x0904007A -#define MAS391T3CDR 0x0904007B -#define MAS391T3CDT 0x0904007C -#define MAS391T3 0x0904007D -#define MAS392T3CDR 0x0904007E -#define MAS392T3CDT 0x0904007F -#define MAS392T3 0x09040080 -#define MAS39T1CDT 0x09040081 -#define MAS39T1 0x09040082 -#define MAS39T2CDT 0x09040083 -#define MAS39T2 0x09040084 -#define MAS39T3CDT 0x09040085 -#define MAS39T3 0x09040086 -#define MASLIST1CDT 0x09040087 -#define MASLIST1 0x09040088 -#define MASLIST2CDT 0x09040089 -#define MASLIST2 0x0904008A -#define MASLIST3CDT 0x0904008B -#define MASLIST3 0x0904008C -#define RAYS39CDT 0x0904008D -#define RAYS39 0x0904008E -#define TRI39ALOCDT 0x0904008F -#define TRI39ALO 0x09040090 -#define TRI39GEMCDT 0x09040091 -#define TRI39GEM 0x09040092 - // 147 entities in TXTs, 147 in datafiles. - // room40 -#define R40L0 0x09050000 -#define room40_PAL 0x09050001 -#define room40_flr 0x09050002 -#define GEO40ASCCDT 0x09050003 -#define GEO40ASC 0x09050004 -#define GEO40DESCDT 0x09050005 -#define GEO40DES 0x09050006 -#define GEO40DIPCDT 0x09050007 -#define GEO40DIP 0x09050008 -#define GUA40ENTCDT 0x09050009 -#define GUA40ENT 0x0905000A -#define GUA40STACDT 0x0905000B -#define GUA40STA 0x0905000C -#define GUA40TALCDT 0x0905000D -#define GUA40TAL 0x0905000E -#define PAI40FAGCDT 0x0905000F -#define PAI40FAG 0x09050010 -#define PAI40IDLCDT 0x09050011 -#define PAI40IDL 0x09050012 -#define PAI40LEACDT 0x09050013 -#define PAI40LEA 0x09050014 -#define PAI40STACDR 0x09050015 -#define PAI40STACDT 0x09050016 -#define PAI40STA 0x09050017 -#define PAI40TALCDT 0x09050018 -#define PAI40TAL 0x09050019 - // 26 entities in TXTs, 26 in datafiles. - // room41 -#define R41L0 0x09060000 -#define R41L1 0x09060001 -#define R41G1 0x09060002 -#define room41_PAL 0x09060003 -#define room41_flr 0x09060004 -#define GEO41ENTCDT 0x09060005 -#define GEO41ENT 0x09060006 -#define GEO41OP2CDT 0x09060007 -#define GEO41OP2 0x09060008 -#define GEO41OPECDT 0x09060009 -#define GEO41OPE 0x0906000A -#define GEO41THECDR 0x0906000B -#define GEO41THECDT 0x0906000C -#define GEO41THE 0x0906000D -#define GLO41IDLCDT 0x0906000E -#define GLO41IDL 0x0906000F -#define GLO41KEYCDR 0x09060010 -#define GLO41KEYCDT 0x09060011 -#define GLO41KEY 0x09060012 -#define GLO41TALCDT 0x09060013 -#define GLO41TAL 0x09060014 -#define GUA41ANSCDT 0x09060015 -#define GUA41ANS 0x09060016 -#define GUA41GLOCDT 0x09060017 -#define GUA41GLO 0x09060018 -#define GUA41IDLCDT 0x09060019 -#define GUA41IDL 0x0906001A -#define GUA41KEYCDR 0x0906001B -#define GUA41KEYCDT 0x0906001C -#define GUA41KEY 0x0906001D -#define GUA41PHOCDT 0x0906001E -#define GUA41PHO 0x0906001F -#define GUA41TALCDT 0x09060020 -#define GUA41TAL 0x09060021 -#define PAI41HANCDT 0x09060022 -#define PAI41HAN 0x09060023 -#define PAI41LEACDT 0x09060024 -#define PAI41LEA 0x09060025 -#define PAI41TALCDT 0x09060026 -#define PAI41TAL 0x09060027 -#define PHONE41CDT 0x09060028 -#define PHONE41 0x09060029 - // 42 entities in TXTs, 42 in datafiles. - // room42 -#define room42_PAL 0x09070000 -#define R42L0 0x09070001 -#define R42L1 0x09070002 -#define R42L2 0x09070003 -#define R42G1 0x09070004 -#define R42G2 0x09070005 -#define room42_flr 0x09070006 -#define CHALICE42 0x09070007 -#define CHALICE42_PAL 0x09070008 -#define GEO42CHACDT 0x09070009 -#define GEO42CHA 0x0907000A -#define GEO42DESCDR 0x0907000B -#define GEO42DESCDT 0x0907000C -#define GEO42DES 0x0907000D - // 14 entities in TXTs, 14 in datafiles. - // room43 -#define room43_PAL 0x09080000 -#define R43L0 0x09080001 -#define R43L1 0x09080002 -#define R43G1 0x09080003 -#define room43_flr 0x09080004 -#define GEO43DR2CDT 0x09080005 -#define GEO43DR2 0x09080006 -#define GEO43DRYCDT 0x09080007 -#define GEO43DRY 0x09080008 -#define GEO43HAN 0x09080009 -#define GEO43HANCDT 0x0908000A -#define GEO43KEYCDT 0x0908000B -#define GEO43KEY 0x0908000C -#define GEO43PLACDT 0x0908000D -#define GEO43PLA 0x0908000E -#define GEO43PRECDT 0x0908000F -#define GEO43PRE 0x09080010 -#define GEO43SOACDT 0x09080011 -#define GEO43SOA 0x09080012 -#define GEO43SWPCDT 0x09080013 -#define GEO43SWP 0x09080014 -#define GEO43WATCDT 0x09080015 -#define GEO43WAT 0x09080016 -#define SOAP43CDT 0x09080017 -#define SOAP43 0x09080018 -#define WATER43CDT 0x09080019 -#define WATER43 0x0908001A - // 27 entities in TXTs, 27 in datafiles. - // room48 -#define R48SPRPAL 0x09090000 -#define R48L0 0x09090001 -#define R48L1 0x09090002 -#define R48L2 0x09090003 -#define R48G1 0x09090004 -#define R48G2 0x09090005 -#define R48PAL 0x09090006 -#define room48_flr 0x09090007 -#define R48PLX 0x09090008 -#define GEO48BENCDR 0x09090009 -#define GEO48BENCDT 0x0909000A -#define GEO48BEN 0x0909000B -#define GEO48GIVCDR 0x0909000C -#define GEO48GIVCDT 0x0909000D -#define GEO48GIV 0x0909000E -#define GEO48LENCDT 0x0909000F -#define GEO48LEN 0x09090010 -#define PRI48CANCDR 0x09090011 -#define PRI48CANCDT 0x09090012 -#define PRI48CAN 0x09090013 -#define PRI48IDLCDT 0x09090014 -#define PRI48IDL 0x09090015 -#define PRI48PO1CDT 0x09090016 -#define PRI48PO1 0x09090017 -#define PRI48PO2CDT 0x09090018 -#define PRI48PO2 0x09090019 -#define PRI48RETCDT 0x0909001A -#define PRI48RET 0x0909001B -#define PRI48TAKCDT 0x0909001C -#define PRI48TAK 0x0909001D -#define PRI48TALCDT 0x0909001E -#define PRI48TAL 0x0909001F -#define PRI48TURCDR 0x09090020 -#define PRI48TURCDT 0x09090021 -#define PRI48TUR 0x09090022 -#define WINDOW1 0x09090023 -#define WINDOW1_PAL 0x09090024 -#define WINDOW2 0x09090025 -#define WINDOW2_PAL 0x09090026 - // 39 entities in TXTs, 39 in datafiles. -// ireland - // sound_fx -#define FX_EIRBIRD3 0x0A000000 -#define FX_SHOCK2 0x0A000001 -#define FX_EIRBIRD1 0x0A000002 -#define FX_EIRBIRD2 0x0A000003 -#define FX_SWITCH19 0x0A000004 -#define FX_TRAPOPEN 0x0A000005 -#define FX_VIOLIN19 0x0A000006 -#define FX_WHISTLE 0x0A000007 -#define FX_BARFLAP 0x0A000008 -#define FX_DORCLOSE20 0x0A000009 -#define FX_DRINK 0x0A00000A -#define FX_FITZHIT 0x0A00000B -#define FX_FITZRUN 0x0A00000C -#define FX_FITZUP 0x0A00000D -#define FX_FUSE20 0x0A00000E -#define FX_PULLPINT 0x0A00000F -#define FX_SNEEZE1 0x0A000010 -#define FX_SNEEZE2 0x0A000011 -#define FX_WASHER 0x0A000012 -#define FX_CELTAP 0x0A000013 -#define FX_DRIPIRE 0x0A000014 -#define FX_DRIPIRE2 0x0A000015 -#define FX_TAP 0x0A000016 -#define FX_TAP2 0x0A000017 -#define FX_CLIMBHAY 0x0A000018 -#define FX_FARMERGO 0x0A000019 -#define FX_CASTLWAL 0x0A00001A -#define FX_CLIMBFAL 0x0A00001B -#define FX_KEYSTEP 0x0A00001C -#define FX_WIND 0x0A00001D -#define FX_GEOGOAT 0x0A00001E -#define FX_GOATBAA 0x0A00001F -#define FX_GOATCHEW 0x0A000020 -#define FX_GOATDOH 0x0A000021 -#define FX_PLOUGH 0x0A000022 -#define FX_EIRDRIP1 0x0A000023 -#define FX_EIRDRIP2 0x0A000024 -#define FX_LADDWN25 0x0A000025 -#define FX_LADDUP25 0x0A000026 -#define FX_SECDOR25 0x0A000027 -#define FX_SLABFALL 0x0A000028 -#define FX_SLABUP 0x0A000029 -#define FX_TRIGER25 0x0A00002A -#define FX_WRING 0x0A00002B -#define FX_LEVER 0x0A00002C -#define FX_LEVER2 0x0A00002D -#define FX_RAT3A 0x0A00002E -#define FX_RAT3B 0x0A00002F -#define FX_RAT3C 0x0A000030 -#define FX_RAT3D 0x0A000031 - // 50 entities in TXTs, 50 in datafiles. - // room19 -#define R19SPRPAL 0x0A010000 -#define R19L0 0x0A010001 -#define R19L1 0x0A010002 -#define R19L2 0x0A010003 -#define R19G1 0x0A010004 -#define R19G2 0x0A010005 -#define R19PAL 0x0A010006 -#define R19FLR 0x0A010007 -#define ASSTAP 0x0A010008 -#define ASSTAPCDT 0x0A010009 -#define ASSTLK19 0x0A01000A -#define ASSTLK19CDT 0x0A01000B -#define ASSWLK2 0x0A01000C -#define ASSWLK2CDT 0x0A01000D -#define ASSWLK6 0x0A01000E -#define ASSWLK6CDT 0x0A01000F -#define BOXCVR 0x0A010010 -#define BOXCVRCDT 0x0A010011 -#define GEODRN 0x0A010012 -#define GEODRNCDT 0x0A010013 -#define GEOMAG 0x0A010014 -#define GEOMAGCDT 0x0A010015 -#define GEORCT 0x0A010016 -#define GEORCTCDT 0x0A010017 -#define GEOTRP 0x0A010018 -#define GEOTRPCDT 0x0A010019 -#define GEOTRP8 0x0A01001A -#define GEOTRP8CDT 0x0A01001B -#define GEOWRN 0x0A01001C -#define GEOWRNCDT 0x0A01001D -#define LID19 0x0A01001E -#define LID19CDT 0x0A01001F -#define MAGCON 0x0A010020 -#define MAGCONCDT 0x0A010021 -#define MAGCONCDR 0x0A010022 -#define MAGMOV 0x0A010023 -#define MAGMOVCDT 0x0A010024 -#define MAGMOVCDR 0x0A010025 -#define MAGSHK 0x0A010026 -#define MAGSHKCDT 0x0A010027 -#define MAGSHY 0x0A010028 -#define MAGSHYCDT 0x0A010029 -#define MAGSHYCDR 0x0A01002A -#define MAGSLK 0x0A01002B -#define MAGSLKCDT 0x0A01002C -#define MAGTALK 0x0A01002D -#define MAGTALKCDT 0x0A01002E -#define MAGTLK 0x0A01002F -#define MAGTLKCDT 0x0A010030 -#define MAGTLK8 0x0A010031 -#define MAGTLK8CDT 0x0A010032 -#define TRPOPN 0x0A010033 -#define TRPOPNCDT 0x0A010034 - // 53 entities in TXTs, 53 in datafiles. - // room20 -#define R20SPRPAL 0x0A020000 -#define R20L0 0x0A020001 -#define R20L1 0x0A020002 -#define R20L2 0x0A020003 -#define R20L3 0x0A020004 -#define R20G1 0x0A020005 -#define R20G2 0x0A020006 -#define R20G3 0x0A020007 -#define R20PAL 0x0A020008 -#define R20FLR 0x0A020009 -#define BARTPS 0x0A02000A -#define BARTPSCDT 0x0A02000B -#define BARTWL 0x0A02000C -#define BARTWLCDT 0x0A02000D -#define BRIDRN 0x0A02000E -#define BRIDRNCDT 0x0A02000F -#define BRIDRNCDR 0x0A020010 -#define BRIFTZ 0x0A020011 -#define BRIFTZCDT 0x0A020012 -#define BRIFTZCDR 0x0A020013 -#define BRITLK 0x0A020014 -#define BRITLKCDT 0x0A020015 -#define BRITLK8 0x0A020016 -#define BRITLK8CDT 0x0A020017 -#define BRITLK9 0x0A020018 -#define BRITLK9CDT 0x0A020019 -#define BRITRN 0x0A02001A -#define BRITRNCDT 0x0A02001B -#define BRITRNCDR 0x0A02001C -#define DOROPN20 0x0A02001D -#define DOROPN20CDT 0x0A02001E -#define DOROPN20CDR 0x0A02001F -#define DOYDRN 0x0A020020 -#define DOYDRNCDT 0x0A020021 -#define DOYDRNCDR 0x0A020022 -#define DOYFTZ 0x0A020023 -#define DOYFTZCDT 0x0A020024 -#define DOYFTZCDR 0x0A020025 -#define DOYTLK 0x0A020026 -#define DOYTLKCDT 0x0A020027 -#define DOYTLK20 0x0A020028 -#define DOYTLK20CDT 0x0A020029 -#define DOYTLK8 0x0A02002A -#define DOYTLK8CDT 0x0A02002B -#define DOYTLK9 0x0A02002C -#define DOYTLK9CDT 0x0A02002D -#define DOYTRN 0x0A02002E -#define DOYTRNCDT 0x0A02002F -#define DOYTRNCDR 0x0A020030 -#define DOYTRN20 0x0A020031 -#define DOYTRN20CDT 0x0A020032 -#define DOYTRN20CDR 0x0A020033 -#define DOYTRN8 0x0A020034 -#define DOYTRN8CDT 0x0A020035 -#define DOYTRN8CDR 0x0A020036 -#define DOYTRN9 0x0A020037 -#define DOYTRN9CDT 0x0A020038 -#define DOYTRN9CDR 0x0A020039 -#define FIDPLY 0x0A02003A -#define FIDPLYCDT 0x0A02003B -#define FLPOPN 0x0A02003C -#define FLPOPNCDT 0x0A02003D -#define FRMTLK20 0x0A02003E -#define FRMTLK20CDT 0x0A02003F -#define FTZAGT 0x0A020040 -#define FTZAGTCDT 0x0A020041 -#define FTZGET 0x0A020042 -#define FTZGETCDT 0x0A020043 -#define FTZGETCDR 0x0A020044 -#define FTZRUN 0x0A020045 -#define FTZRUNCDT 0x0A020046 -#define FTZSTD 0x0A020047 -#define FTZSTDCDT 0x0A020048 -#define FTZTALK 0x0A020049 -#define FTZTALKCDT 0x0A02004A -#define FTZTLK 0x0A02004B -#define FTZTLKCDT 0x0A02004C -#define FTZTLK8 0x0A02004D -#define FTZTLK8CDT 0x0A02004E -#define GEODRN20 0x0A02004F -#define GEODRN20CDT 0x0A020050 -#define GEOPHN20 0x0A020051 -#define GEOPHN20CDT 0x0A020052 -#define GEOPHN20CDR 0x0A020053 -#define GEOPLG 0x0A020054 -#define GEOPLGCDT 0x0A020055 -#define GEOPLG8 0x0A020056 -#define GEOPLG8CDT 0x0A020057 -#define GEOSEE 0x0A020058 -#define GEOSEECDT 0x0A020059 -#define GEOSNR 0x0A02005A -#define GEOSNRCDT 0x0A02005B -#define GEOSNR8 0x0A02005C -#define GEOSNR8CDT 0x0A02005D -#define GEOTWL20 0x0A02005E -#define GEOTWL20CDT 0x0A02005F -#define GEOXIT20 0x0A020060 -#define GEOXIT20CDT 0x0A020061 -#define GLSGEO 0x0A020062 -#define GLSGEOCDT 0x0A020063 -#define GLSWSH 0x0A020064 -#define GLSWSHCDT 0x0A020065 -#define LESDOR 0x0A020066 -#define LESDORCDT 0x0A020067 -#define LESDOY 0x0A020068 -#define LESDOYCDT 0x0A020069 -#define LESFLP 0x0A02006A -#define LESFLPCDT 0x0A02006B -#define LESFTZ 0x0A02006C -#define LESFTZCDT 0x0A02006D -#define LESFTZCDR 0x0A02006E -#define LESGLS 0x0A02006F -#define LESGLSCDT 0x0A020070 -#define LESGLSCDR 0x0A020071 -#define LESLNS 0x0A020072 -#define LESLNSCDT 0x0A020073 -#define LESLNSCDR 0x0A020074 -#define LESMOV 0x0A020075 -#define LESMOVCDT 0x0A020076 -#define LESMOVCDR 0x0A020077 -#define LESPMP 0x0A020078 -#define LESPMPCDT 0x0A020079 -#define LESPNT 0x0A02007A -#define LESPNTCDT 0x0A02007B -#define LESPNT20 0x0A02007C -#define LESPNT20CDT 0x0A02007D -#define LESPNT8 0x0A02007E -#define LESPNT8CDT 0x0A02007F -#define LESPNT8CDR 0x0A020080 -#define LESTALK 0x0A020081 -#define LESTALKCDT 0x0A020082 -#define LESTLK 0x0A020083 -#define LESTLKCDT 0x0A020084 -#define LESTLK20 0x0A020085 -#define LESTLK20CDT 0x0A020086 -#define LESTLK8 0x0A020087 -#define LESTLK8CDT 0x0A020088 -#define LESTLK9 0x0A020089 -#define LESTLK9CDT 0x0A02008A -#define LESTURN 0x0A02008B -#define LESTURNCDT 0x0A02008C -#define LESTURNCDR 0x0A02008D -#define LESWLK 0x0A02008E -#define LESWLKCDT 0x0A02008F -#define LESWLK8 0x0A020090 -#define LESWLK8CDT 0x0A020091 -#define LESWSH 0x0A020092 -#define LESWSHCDT 0x0A020093 -#define LESWSHCDR 0x0A020094 -#define MAGENT 0x0A020095 -#define MAGENTCDT 0x0A020096 -#define MAGEXIT 0x0A020097 -#define MAGEXITCDT 0x0A020098 -#define MAGMOV20 0x0A020099 -#define MAGMOV20CDT 0x0A02009A -#define MAGTEST 0x0A02009B -#define MAGTESTCDT 0x0A02009C -#define MAGTLK20 0x0A02009D -#define MAGTLK20CDT 0x0A02009E -#define PLGWLL 0x0A02009F -#define PLGWLLCDT 0x0A0200A0 -#define RONDRN 0x0A0200A1 -#define RONDRNCDT 0x0A0200A2 -#define RONDRNCDR 0x0A0200A3 -#define RONDRP 0x0A0200A4 -#define RONDRPCDT 0x0A0200A5 -#define RONFTZ 0x0A0200A6 -#define RONFTZCDT 0x0A0200A7 -#define RONFTZCDR 0x0A0200A8 -#define RONGEO 0x0A0200A9 -#define RONGEOCDT 0x0A0200AA -#define RONGEOCDR 0x0A0200AB -#define RONGLS 0x0A0200AC -#define RONGLSCDT 0x0A0200AD -#define RONGLSCDR 0x0A0200AE -#define RONGLS8 0x0A0200AF -#define RONGLS8CDT 0x0A0200B0 -#define RONPIK 0x0A0200B1 -#define RONPIKCDT 0x0A0200B2 -#define RONPKT 0x0A0200B3 -#define RONPKTCDT 0x0A0200B4 -#define RONPKTCDR 0x0A0200B5 -#define RONSNR 0x0A0200B6 -#define RONSNRCDT 0x0A0200B7 -#define RONSNZ 0x0A0200B8 -#define RONSNZCDT 0x0A0200B9 -#define RONSNZ2 0x0A0200BA -#define RONSNZ2CDT 0x0A0200BB -#define RONTLK 0x0A0200BC -#define RONTLKCDT 0x0A0200BD -#define RONTLK2 0x0A0200BE -#define RONTLK2CDT 0x0A0200BF -#define RONWIR 0x0A0200C0 -#define RONWIRCDT 0x0A0200C1 -#define RONWIRCDR 0x0A0200C2 -#define SNRTBL 0x0A0200C3 -#define SNRTBLCDT 0x0A0200C4 - // 197 entities in TXTs, 197 in datafiles. - // room21 -#define R21L0 0x0A030000 -#define R21L1 0x0A030001 -#define R21L2 0x0A030002 -#define R21G1 0x0A030003 -#define R21G2 0x0A030004 -#define R21PAL 0x0A030005 -#define R21FLR 0x0A030006 -#define CALBLO 0x0A030007 -#define CALBLOCDT 0x0A030008 -#define GEMSHN 0x0A030009 -#define GEMSHNCDT 0x0A03000A -#define GEOGEM 0x0A03000B -#define GEOGEMCDT 0x0A03000C -#define GEOGEM8 0x0A03000D -#define GEOGEM8CDT 0x0A03000E -#define GEOLVR 0x0A03000F -#define GEOLVRCDT 0x0A030010 -#define GEOLVR21 0x0A030011 -#define GEOLVR21CDT 0x0A030012 -#define GEOLVR8 0x0A030013 -#define GEOLVR8CDT 0x0A030014 -#define GEOTAP 0x0A030015 -#define GEOTAPCDT 0x0A030016 -#define GEOTLK21 0x0A030017 -#define GEOTLK21CDT 0x0A030018 -#define GEOTORCH 0x0A030019 -#define GEOTORCHCDT 0x0A03001A -#define GEOTRN21 0x0A03001B -#define GEOTRN21CDT 0x0A03001C -#define GEOTRN21CDR 0x0A03001D -#define GEOTWL21 0x0A03001E -#define GEOTWL21CDT 0x0A03001F -#define LVRPSH 0x0A030020 -#define LVRPSHCDT 0x0A030021 -#define MAGCEL 0x0A030022 -#define MAGCELCDT 0x0A030023 -#define MAGCELCDR 0x0A030024 -#define MAGTLK21 0x0A030025 -#define MAGTLK21CDT 0x0A030026 -#define TAPDRP 0x0A030027 -#define TAPDRPCDT 0x0A030028 -#define TAPRUN 0x0A030029 -#define TAPRUNCDT 0x0A03002A -#define TORCH21 0x0A03002B -#define TORCH21CDT 0x0A03002C - // 45 entities in TXTs, 45 in datafiles. - // room22 -#define R22SPRPAL 0x0A040000 -#define R22L0 0x0A040001 -#define R22L1 0x0A040002 -#define R22G1 0x0A040003 -#define R22PAL 0x0A040004 -#define R22FLR 0x0A040005 -#define FRMBUK 0x0A040006 -#define FRMBUKCDT 0x0A040007 -#define FRMSTD 0x0A040008 -#define FRMSTDCDT 0x0A040009 -#define FRMTLK 0x0A04000A -#define FRMTLKCDT 0x0A04000B -#define FRMWLK 0x0A04000C -#define FRMWLKCDT 0x0A04000D -#define GEOCLM 0x0A04000E -#define GEOCLMCDT 0x0A04000F -#define GEOCLMCDR 0x0A040010 -#define GEOPSH22 0x0A040011 -#define GEOPSH22CDT 0x0A040012 - // 19 entities in TXTs, 19 in datafiles. - // room23 -#define R23L0 0x0A050000 -#define R23PAL 0x0A050001 -#define GEOCLM23 0x0A050002 -#define GEOCLM23CDT 0x0A050003 -#define GEOCLM23CDR 0x0A050004 -#define GEOKEY23 0x0A050005 -#define GEOKEY23CDT 0x0A050006 -#define GEOTOP 0x0A050007 -#define GEOTOPCDT 0x0A050008 -#define GEOTOPCDR 0x0A050009 -#define GEOTRY23 0x0A05000A -#define GEOTRY23CDT 0x0A05000B -#define GEOTUG23 0x0A05000C -#define GEOTUG23CDT 0x0A05000D -#define LFTKEY23 0x0A05000E -#define LFTKEY23CDT 0x0A05000F - // 16 entities in TXTs, 16 in datafiles. - // room24 -#define R24L0 0x0A060000 -#define R24L1 0x0A060001 -#define R24G1 0x0A060002 -#define R24PLX 0x0A060003 -#define R24PAL 0x0A060004 -#define R24FLR 0x0A060005 -#define GEOASC24 0x0A060006 -#define GEOASC24CDT 0x0A060007 -#define GEODES24 0x0A060008 -#define GEODES24CDT 0x0A060009 -#define GEOHITL 0x0A06000A -#define GEOHITLCDT 0x0A06000B -#define GEOHITR 0x0A06000C -#define GEOHITRCDT 0x0A06000D -#define GEOLAD 0x0A06000E -#define GEOLADCDT 0x0A06000F -#define GEOLAD8 0x0A060010 -#define GEOLAD8CDT 0x0A060011 -#define GEOPLW 0x0A060012 -#define GEOPLWCDT 0x0A060013 -#define GEORUN 0x0A060014 -#define GEORUNCDT 0x0A060015 -#define GEOUPL24 0x0A060016 -#define GEOUPL24CDT 0x0A060017 -#define GEOUPR24 0x0A060018 -#define GEOUPR24CDT 0x0A060019 -#define GOTBAKL 0x0A06001A -#define GOTBAKLCDT 0x0A06001B -#define GOTBAKR 0x0A06001C -#define GOTBAKRCDT 0x0A06001D -#define GOTCL 0x0A06001E -#define GOTCLCDT 0x0A06001F -#define GOTCR 0x0A060020 -#define GOTCRCDT 0x0A060021 -#define GOTEAT 0x0A060022 -#define GOTEATCDT 0x0A060023 -#define GOTPLW 0x0A060024 -#define GOTPLWCDT 0x0A060025 -#define GOTPLW1 0x0A060026 -#define GOTPLW1CDT 0x0A060027 -#define GOTRIS 0x0A060028 -#define GOTRISCDT 0x0A060029 -#define GOTRISCDR 0x0A06002A -#define PLWMOV 0x0A06002B -#define PLWMOVCDT 0x0A06002C - // 45 entities in TXTs, 45 in datafiles. - // room25 -#define R25SPRPAL 0x0A070000 -#define R25L0 0x0A070001 -#define R25L1 0x0A070002 -#define R25G1 0x0A070003 -#define R25PAL 0x0A070004 -#define R25FLR 0x0A070005 -#define ALTOPN 0x0A070006 -#define ALTOPNCDT 0x0A070007 -#define GEOASC25 0x0A070008 -#define GEOASC25CDT 0x0A070009 -#define GEOCLM25 0x0A07000A -#define GEOCLM25CDT 0x0A07000B -#define GEODES25 0x0A07000C -#define GEODES25CDT 0x0A07000D -#define GEODRY25 0x0A07000E -#define GEODRY25CDT 0x0A07000F -#define GEOFIN25 0x0A070010 -#define GEOFIN25CDT 0x0A070011 -#define GEOPLAS 0x0A070012 -#define GEOPLASCDT 0x0A070013 -#define GEOPLASCDR 0x0A070014 -#define GEOPLS 0x0A070015 -#define GEOPLSCDT 0x0A070016 -#define GEOPSH25 0x0A070017 -#define GEOPSH25CDT 0x0A070018 -#define GEOPUT 0x0A070019 -#define GEOPUTCDT 0x0A07001A -#define GEOSAC 0x0A07001B -#define GEOSACCDT 0x0A07001C -#define GEOSAC25 0x0A07001D -#define GEOSAC25CDT 0x0A07001E -#define GEOSTD25 0x0A07001F -#define GEOSTD25CDT 0x0A070020 -#define GEOSTN 0x0A070021 -#define GEOSTNCDT 0x0A070022 -#define GEOSTN8 0x0A070023 -#define GEOSTN8CDT 0x0A070024 -#define GEOTWL25 0x0A070025 -#define GEOTWL25CDT 0x0A070026 -#define GEOWALF2 0x0A070027 -#define GEOWALF2CDT 0x0A070028 -#define IMPFLR 0x0A070029 -#define IMPFLRCDT 0x0A07002A -#define IMPPLS 0x0A07002B -#define IMPPLSCDT 0x0A07002C -#define PLASWALL 0x0A07002D -#define PLASWALLCDT 0x0A07002E -#define STNFALL 0x0A07002F -#define STNFALLCDT 0x0A070030 - // 49 entities in TXTs, 49 in datafiles. - // room26 -#define R26SPRPAL 0x0A080000 -#define R26L0 0x0A080001 -#define R26L1 0x0A080002 -#define R26L2 0x0A080003 -#define R26G1 0x0A080004 -#define R26G2 0x0A080005 -#define R26PAL 0x0A080006 -#define R26FLR 0x0A080007 -#define GEOLVR08 0x0A080008 -#define GEOLVR08CDT 0x0A080009 -#define GEOLVR26 0x0A08000A -#define GEOLVR26CDT 0x0A08000B -#define LVRDRK 0x0A08000C -#define LVRDRKCDT 0x0A08000D -#define RATJMP 0x0A08000E -#define RATJMPCDT 0x0A08000F - // 16 entities in TXTs, 16 in datafiles. -// spain - // sound_fx -#define FX_SPNBIRD1 0x0B000000 -#define FX_SPNBIRD2 0x0B000001 -#define FX_AMBIEN56 0x0B000002 -#define FX_DOGS56 0x0B000003 -#define FX_PENDULUM 0x0B000004 -#define FX_CANFALL 0x0B000005 -#define FX_HOSE57 0x0B000006 -#define FX_HOSE57B 0x0B000007 -#define FX_SPAIN 0x0B000008 -#define FX_CHESS 0x0B000009 -#define FX_SECDOR59 0x0B00000A -#define FX_WINDOW59 0x0B00000B -#define FX_LIONFALL 0x0B00000C -#define FX_LIONFAL2 0x0B00000D -#define FX_TOOTHPUL 0x0B00000E -#define FX_SECDOR61 0x0B00000F -#define FX_WELLDRIP 0x0B000010 - // 17 entities in TXTs, 17 in datafiles. - // room56 -#define SPAIN_PAL 0x0B010000 -#define R56L0 0x0B010001 -#define R56L1 0x0B010002 -#define R56L2 0x0B010003 -#define R56G1 0x0B010004 -#define R56G2 0x0B010005 -#define R56PAL 0x0B010006 -#define R56FLR 0x0B010007 -#define CHALIC56 0x0B010008 -#define CHALIC56CDT 0x0B010009 -#define GARD20 0x0B01000A -#define GARD20CDT 0x0B01000B -#define GARD21 0x0B01000C -#define GARD21CDT 0x0B01000D -#define GARD22 0x0B01000E -#define GARD22CDT 0x0B01000F -#define GEOSPA10 0x0B010010 -#define GEOSPA10CDT 0x0B010011 -#define GEOSPA10CDR 0x0B010012 -#define GEOSPA11 0x0B010013 -#define GEOSPA11CDT 0x0B010014 -#define GEOSPA13 0x0B010015 -#define GEOSPA13CDT 0x0B010016 -#define GEOSPA13CDR 0x0B010017 -#define GEOSPA19 0x0B010018 -#define GEOSPA19CDT 0x0B010019 -#define GEOSPA44 0x0B01001A -#define GEOSPA44CDT 0x0B01001B -#define GEOSPA48 0x0B01001C -#define GEOSPA48CDT 0x0B01001D -#define PENDULUM 0x0B01001E -#define PENDULUMCDT 0x0B01001F -#define PIECE56 0x0B010020 -#define PIECE56CDT 0x0B010021 -#define VASC01 0x0B010022 -#define VASC01CDT 0x0B010023 -#define VASC02 0x0B010024 -#define VASC02CDT 0x0B010025 -#define VASC04 0x0B010026 -#define VASC04CDT 0x0B010027 -#define VASC05 0x0B010028 -#define VASC05CDT 0x0B010029 -#define VASC05CDR 0x0B01002A -#define VASC06 0x0B01002B -#define VASC06CDT 0x0B01002C -#define VASC26 0x0B01002D -#define VASC26CDT 0x0B01002E -#define VASC26CDR 0x0B01002F -#define VASC27 0x0B010030 -#define VASC27CDT 0x0B010031 -#define VASC28 0x0B010032 -#define VASC28CDT 0x0B010033 -#define VASC29 0x0B010034 -#define VASC29CDT 0x0B010035 -#define VASC29CDR 0x0B010036 -#define VASC30 0x0B010037 -#define VASC30CDT 0x0B010038 -#define VASC30CDR 0x0B010039 -#define VASC32 0x0B01003A -#define VASC32CDT 0x0B01003B - // 60 entities in TXTs, 60 in datafiles. - // room57 -#define R57L0 0x0B020000 -#define R57L1 0x0B020001 -#define R57G1 0x0B020002 -#define R57PAL 0x0B020003 -#define R57FLR 0x0B020004 -#define R57PLX 0x0B020005 -#define MEGA_DOWSE 0x0B020006 -#define GAR57GOB 0x0B020007 -#define GAR57GOBCDT 0x0B020008 -#define GARD01 0x0B020009 -#define GARD01CDT 0x0B02000A -#define GARD02 0x0B02000B -#define GARD02CDT 0x0B02000C -#define GARD03 0x0B02000D -#define GARD03CDT 0x0B02000E -#define GARD04 0x0B02000F -#define GARD04CDT 0x0B020010 -#define GARD04CDR 0x0B020011 -#define GARD05 0x0B020012 -#define GARD05CDT 0x0B020013 -#define GARD06 0x0B020014 -#define GARD06CDT 0x0B020015 -#define GARD07 0x0B020016 -#define GARD07CDT 0x0B020017 -#define GARD07CDR 0x0B020018 -#define GARD08 0x0B020019 -#define GARD08CDT 0x0B02001A -#define GARD09 0x0B02001B -#define GARD09CDT 0x0B02001C -#define GARD17 0x0B02001D -#define GARD17CDT 0x0B02001E -#define GARD17CDR 0x0B02001F -#define GARD18 0x0B020020 -#define GARD18CDT 0x0B020021 -#define GARD31 0x0B020022 -#define GARD31CDT 0x0B020023 -#define GARD31CDR 0x0B020024 -#define GARD32 0x0B020025 -#define GARD32CDT 0x0B020026 -#define GARD34 0x0B020027 -#define GARD34CDT 0x0B020028 -#define GARD35 0x0B020029 -#define GARD35CDT 0x0B02002A -#define GARD36 0x0B02002B -#define GARD36CDT 0x0B02002C -#define GARD37 0x0B02002D -#define GARD37CDT 0x0B02002E -#define GARD38 0x0B02002F -#define GARD38CDT 0x0B020030 -#define GARD39 0x0B020031 -#define GARD39CDT 0x0B020032 -#define GARD40 0x0B020033 -#define GARD40CDT 0x0B020034 -#define GARD40CDR 0x0B020035 -#define GARD41 0x0B020036 -#define GARD41CDT 0x0B020037 -#define GARD42 0x0B020038 -#define GARD42CDT 0x0B020039 -#define GARD43 0x0B02003A -#define GARD43CDT 0x0B02003B -#define GARD44 0x0B02003C -#define GARD44CDT 0x0B02003D -#define GARD44CDR 0x0B02003E -#define GARD45 0x0B02003F -#define GARD45CDT 0x0B020040 -#define GARDKNE 0x0B020041 -#define GARDKNECDT 0x0B020042 -#define GAUGE57 0x0B020043 -#define GAUGE57CDT 0x0B020044 -#define GEOSPA01 0x0B020045 -#define GEOSPA01CDT 0x0B020046 -#define GEOSPA20 0x0B020047 -#define GEOSPA20CDT 0x0B020048 -#define GEOSPA22 0x0B020049 -#define GEOSPA22CDT 0x0B02004A -#define GEOSPA42 0x0B02004B -#define GEOSPA42CDT 0x0B02004C -#define GEOSPA47 0x0B02004D -#define GEOSPA47CDT 0x0B02004E -#define HOLE57 0x0B02004F -#define HOLE57CDT 0x0B020050 -#define HOSE57 0x0B020051 -#define HOSE57CDT 0x0B020052 - // 83 entities in TXTs, 83 in datafiles. - // room58 -#define R58L0 0x0B030000 -#define R58L1 0x0B030001 -#define R58G1 0x0B030002 -#define R58PAL 0x0B030003 -#define R58FLR 0x0B030004 -#define R58PLX 0x0B030005 -#define GARD24 0x0B030006 -#define GARD24CDT 0x0B030007 -#define GARD25 0x0B030008 -#define GARD25CDT 0x0B030009 -#define GARD26 0x0B03000A -#define GARD26CDT 0x0B03000B -#define MAUSDOOR 0x0B03000C -#define MAUSDOORCDT 0x0B03000D -#define VASC07 0x0B03000E -#define VASC07CDT 0x0B03000F -#define VASC08 0x0B030010 -#define VASC08CDT 0x0B030011 -#define VASC09 0x0B030012 -#define VASC09CDT 0x0B030013 -#define VASC10 0x0B030014 -#define VASC10CDT 0x0B030015 -#define VASC11 0x0B030016 -#define VASC11CDT 0x0B030017 -#define VASC12 0x0B030018 -#define VASC12CDT 0x0B030019 - // 26 entities in TXTs, 26 in datafiles. - // room59 -#define R59L0 0x0B040000 -#define R59L1 0x0B040001 -#define R59L2 0x0B040002 -#define R59G1 0x0B040003 -#define R59G2 0x0B040004 -#define R59PAL 0x0B040005 -#define R59FLR 0x0B040006 -#define BIBLE59 0x0B040007 -#define BIBLE59CDT 0x0B040008 -#define BLOWOUT 0x0B040009 -#define BLOWOUTCDT 0x0B04000A -#define CANDLE59 0x0B04000B -#define CANDLE59CDT 0x0B04000C -#define CHAL59 0x0B04000D -#define CHAL59CDT 0x0B04000E -#define FLAMEL59 0x0B04000F -#define FLAMEL59CDT 0x0B040010 -#define FLAMER59 0x0B040011 -#define FLAMER59CDT 0x0B040012 -#define FLAMET59 0x0B040013 -#define FLAMET59CDT 0x0B040014 -#define GARD27 0x0B040015 -#define GARD27CDT 0x0B040016 -#define GARD28 0x0B040017 -#define GARD28CDT 0x0B040018 -#define GARD29 0x0B040019 -#define GARD29CDT 0x0B04001A -#define GARD30 0x0B04001B -#define GARD30CDT 0x0B04001C -#define GEOBIBLE 0x0B04001D -#define GEOBIBLECDT 0x0B04001E -#define GEOSPA12 0x0B04001F -#define GEOSPA12CDT 0x0B040020 -#define GEOSPA16 0x0B040021 -#define GEOSPA16CDT 0x0B040022 -#define GEOSPA17 0x0B040023 -#define GEOSPA17CDT 0x0B040024 -#define GEOSPA18 0x0B040025 -#define GEOSPA18CDT 0x0B040026 -#define GEOSPA18CDR 0x0B040027 -#define GEOSPA23 0x0B040028 -#define GEOSPA23CDT 0x0B040029 -#define GEOSPA23CDR 0x0B04002A -#define GEOSPA37 0x0B04002B -#define GEOSPA37CDT 0x0B04002C -#define GEOSPA37CDR 0x0B04002D -#define GEOSPA38 0x0B04002E -#define GEOSPA38CDT 0x0B04002F -#define GEOSPA39 0x0B040030 -#define GEOSPA39CDT 0x0B040031 -#define GEOSPA40 0x0B040032 -#define GEOSPA40CDT 0x0B040033 -#define GEOSPA41 0x0B040034 -#define GEOSPA41CDT 0x0B040035 -#define GEOSPA43 0x0B040036 -#define GEOSPA43CDT 0x0B040037 -#define GEOSPA45 0x0B040038 -#define GEOSPA45CDT 0x0B040039 -#define GEOSPA46 0x0B04003A -#define GEOSPA46CDT 0x0B04003B -#define SECDOR59 0x0B04003C -#define SECDOR59CDT 0x0B04003D -#define SNUFF59 0x0B04003E -#define SNUFF59CDT 0x0B04003F -#define TISSUE59 0x0B040040 -#define TISSUE59CDT 0x0B040041 -#define VASC13 0x0B040042 -#define VASC13CDT 0x0B040043 -#define VASC14 0x0B040044 -#define VASC14CDT 0x0B040045 -#define VASC15 0x0B040046 -#define VASC15CDT 0x0B040047 -#define VASC16 0x0B040048 -#define VASC16CDT 0x0B040049 -#define VASC17 0x0B04004A -#define VASC17CDT 0x0B04004B -#define VASC18 0x0B04004C -#define VASC18CDT 0x0B04004D -#define VASC19 0x0B04004E -#define VASC19CDT 0x0B04004F -#define VASC20 0x0B040050 -#define VASC20CDT 0x0B040051 -#define VASC20CDR 0x0B040052 -#define VASC21 0x0B040053 -#define VASC21CDT 0x0B040054 -#define VASC22 0x0B040055 -#define VASC22CDT 0x0B040056 -#define VASC23 0x0B040057 -#define VASC23CDT 0x0B040058 -#define VASC24 0x0B040059 -#define VASC24CDT 0x0B04005A -#define VASC25 0x0B04005B -#define VASC25CDT 0x0B04005C -#define VASC31 0x0B04005D -#define VASC31CDT 0x0B04005E -#define WINDSHUT 0x0B04005F -#define WINDSHUTCDT 0x0B040060 -#define WINDSHUTCDR 0x0B040061 - // 98 entities in TXTs, 98 in datafiles. - // room60 -#define R60L0 0x0B050000 -#define R60L1 0x0B050001 -#define R60L2 0x0B050002 -#define R60G1 0x0B050003 -#define R60G2 0x0B050004 -#define R60PAL 0x0B050005 -#define R60FLR 0x0B050006 -#define GARD10 0x0B050007 -#define GARD10CDT 0x0B050008 -#define GARD11 0x0B050009 -#define GARD11CDT 0x0B05000A -#define GARD13 0x0B05000B -#define GARD13CDT 0x0B05000C -#define GARD16 0x0B05000D -#define GARD16CDT 0x0B05000E -#define GARD19 0x0B05000F -#define GARD19CDT 0x0B050010 -#define GEOSPA05 0x0B050011 -#define GEOSPA05CDT 0x0B050012 -#define GEOSPA05CDR 0x0B050013 -#define GEOSPA08 0x0B050014 -#define GEOSPA08CDT 0x0B050015 -#define GEOSPA09 0x0B050016 -#define GEOSPA09CDT 0x0B050017 -#define GEOSPA09CDR 0x0B050018 -#define GEOSPA21 0x0B050019 -#define GEOSPA21CDT 0x0B05001A -#define MIRROR60 0x0B05001B -#define MIRROR60CDT 0x0B05001C - // 29 entities in TXTs, 29 in datafiles. - // room61 -#define R61L0 0x0B060000 -#define R61L1 0x0B060001 -#define R61G1 0x0B060002 -#define R61PAL 0x0B060003 -#define R61FLR 0x0B060004 -#define DUST 0x0B060005 -#define DUSTCDT 0x0B060006 -#define GEOSPA24 0x0B060007 -#define GEOSPA24CDT 0x0B060008 -#define GEOSPA25 0x0B060009 -#define GEOSPA25CDT 0x0B06000A -#define GEOSPA26 0x0B06000B -#define GEOSPA26CDT 0x0B06000C -#define GEOSPA27 0x0B06000D -#define GEOSPA27CDT 0x0B06000E -#define GEOSPA30 0x0B06000F -#define GEOSPA30CDT 0x0B060010 -#define GEOSPA31 0x0B060011 -#define GEOSPA31CDT 0x0B060012 -#define GEOSPA32 0x0B060013 -#define GEOSPA32CDT 0x0B060014 -#define GEOSPA33 0x0B060015 -#define GEOSPA33CDT 0x0B060016 -#define GEOSPA35 0x0B060017 -#define GEOSPA35CDT 0x0B060018 -#define LION1 0x0B060019 -#define LION1CDT 0x0B06001A -#define LION2 0x0B06001B -#define LION2CDT 0x0B06001C -#define LIONDOOR 0x0B06001D -#define LIONDOORCDT 0x0B06001E -#define LIONFLOR 0x0B06001F -#define LIONFLORCDT 0x0B060020 -#define ROPE61 0x0B060021 -#define ROPE61CDT 0x0B060022 -#define SECDOR61 0x0B060023 -#define SECDOR61CDT 0x0B060024 - // 37 entities in TXTs, 37 in datafiles. - // room62 -#define R62L0 0x0B070000 -#define R62PAL 0x0B070001 -#define BISHOP62 0x0B070002 -#define BISHOP62CDT 0x0B070003 -#define KING62 0x0B070004 -#define KING62CDT 0x0B070005 -#define KNIGHT62 0x0B070006 -#define KNIGHT62CDT 0x0B070007 - // 8 entities in TXTs, 8 in datafiles. -// syria - // sound_fx -#define FX_CAMERA45 0x0C000000 -#define FX_SHOCK3 0x0C000001 -#define FX_STALLBEL 0x0C000002 -#define FX_AYUBDOOR 0x0C000003 -#define FX_BALLPLAY 0x0C000004 -#define FX_CATHIT 0x0C000005 -#define FX_MARIB 0x0C000006 -#define FX_NEWTON 0x0C000007 -#define FX_STALLCAT 0x0C000008 -#define FX_STATBREK 0x0C000009 -#define FX_KEYS49 0x0C00000A -#define FX_MANG1 0x0C00000B -#define FX_MANG2 0x0C00000C -#define FX_MANG3 0x0C00000D -#define FX_UNLOCK49 0x0C00000E -#define FX_WCCHAIN 0x0C00000F -#define FX_CUBDOR 0x0C000010 -#define FX_BREKSTIK 0x0C000011 -#define FX_CLIMBDWN 0x0C000012 -#define FX_CRICKET 0x0C000013 -#define FX_GEOFAL54 0x0C000014 -#define FX_KHANDOWN 0x0C000015 -#define FX_RINGPULL 0x0C000016 -#define FX_SECDOR54 0x0C000017 -#define FX_SHOTKHAN 0x0C000018 -#define FX_SYRIWIND 0x0C000019 -#define FX_THUMP1 0x0C00001A -#define FX_SECDOR55 0x0C00001B - // 28 entities in TXTs, 28 in datafiles. - // duane -#define DUANE_MEGA 0x0C010000 -#define DUANE_WLK 0x0C010001 -#define DNETLK3 0x0C010002 -#define DNETLK3CDT 0x0C010003 -#define DNETLK5 0x0C010004 -#define DNETLK5CDT 0x0C010005 -#define XDNEMON3 0x0C010006 -#define XDNEMON3CDT 0x0C010007 -#define XDNEMON5 0x0C010008 -#define XDNEMON5CDT 0x0C010009 -#define XDNESTA3 0x0C01000A -#define XDNESTA3CDT 0x0C01000B -#define XDNESTA5 0x0C01000C -#define XDNESTA5CDT 0x0C01000D -#define XDNEPHO3 0x0C01000E -#define XDNEPHO3CDT 0x0C01000F -#define XDNEPHO5 0x0C010010 -#define XDNEPHO5CDT 0x0C010011 - // 18 entities in TXTs, 18 in datafiles. - // room45 -#define SYRIA_PAL 0x0C020000 -#define R45SPRPAL 0x0C020001 -#define R45L0 0x0C020002 -#define R45L1 0x0C020003 -#define R45G1 0x0C020004 -#define R45PAL 0x0C020005 -#define R45FLR 0x0C020006 -#define R45PLX 0x0C020007 -#define ART1 0x0C020008 -#define ART1CDT 0x0C020009 -#define ART2 0x0C02000A -#define ART2CDT 0x0C02000B -#define ART3A 0x0C02000C -#define ART3ACDT 0x0C02000D -#define ART3ACDR 0x0C02000E -#define ART4 0x0C02000F -#define ART4CDT 0x0C020010 -#define ART5 0x0C020011 -#define ART5CDT 0x0C020012 -#define ART6 0x0C020013 -#define ART6CDT 0x0C020014 -#define ART7 0x0C020015 -#define ART7CDT 0x0C020016 -#define AYU1 0x0C020017 -#define AYU1CDT 0x0C020018 -#define AYU1A 0x0C020019 -#define AYU1ACDT 0x0C02001A -#define AYU1B 0x0C02001B -#define AYU1BCDT 0x0C02001C -#define AYU5 0x0C02001D -#define AYU5CDT 0x0C02001E -#define BRUSH 0x0C02001F -#define BRUSHCDT 0x0C020020 -#define CAT1 0x0C020021 -#define CAT1CDT 0x0C020022 -#define CAT3 0x0C020023 -#define CAT3CDT 0x0C020024 -#define CAT4 0x0C020025 -#define CAT4CDT 0x0C020026 -#define CAT5 0x0C020027 -#define CAT5CDT 0x0C020028 -#define GEOCHA 0x0C020029 -#define GEOCHACDT 0x0C02002A -#define GEOSYR1 0x0C02002B -#define GEOSYR1CDT 0x0C02002C -#define GEOSYR10 0x0C02002D -#define GEOSYR10CDT 0x0C02002E -#define GEOSYR10CDR 0x0C02002F -#define GEOSYR18 0x0C020030 -#define GEOSYR18CDT 0x0C020031 -#define GEOSYR2 0x0C020032 -#define GEOSYR2CDT 0x0C020033 -#define GEOSYR5 0x0C020034 -#define GEOSYR5CDT 0x0C020035 -#define GEOSYR6 0x0C020036 -#define GEOSYR6CDT 0x0C020037 -#define GEOSYR7 0x0C020038 -#define GEOSYR7CDT 0x0C020039 -#define NEJ1 0x0C02003A -#define NEJ1CDT 0x0C02003B -#define NEJ10 0x0C02003C -#define NEJ10CDT 0x0C02003D -#define NEJ12 0x0C02003E -#define NEJ12CDT 0x0C02003F -#define NEJ13 0x0C020040 -#define NEJ13CDT 0x0C020041 -#define NEJ13CDR 0x0C020042 -#define NEJ2 0x0C020043 -#define NEJ2CDT 0x0C020044 -#define NEJ2B 0x0C020045 -#define NEJ2BCDT 0x0C020046 -#define NEJ4 0x0C020047 -#define NEJ4CDT 0x0C020048 -#define NEJ6 0x0C020049 -#define NEJ6CDT 0x0C02004A -#define NEJ7 0x0C02004B -#define NEJ7CDT 0x0C02004C -#define NEJ7B 0x0C02004D -#define NEJ7BCDT 0x0C02004E -#define NEJ8 0x0C02004F -#define NEJ8CDT 0x0C020050 -#define NEJ9 0x0C020051 -#define NEJ9CDT 0x0C020052 -#define NEWTON 0x0C020053 -#define NEWTONCDT 0x0C020054 -#define PRL1 0x0C020055 -#define PRL1CDT 0x0C020056 -#define PRL2 0x0C020057 -#define PRL2CDT 0x0C020058 -#define PRL6 0x0C020059 -#define PRL6CDT 0x0C02005A -#define PRL7 0x0C02005B -#define PRL7CDT 0x0C02005C -#define PRL8 0x0C02005D -#define PRL8CDT 0x0C02005E -#define SHO1 0x0C02005F -#define SHO1CDT 0x0C020060 -#define SHO2 0x0C020061 -#define SHO2CDT 0x0C020062 -#define SHT1 0x0C020063 -#define SHT1CDT 0x0C020064 -#define SHT2 0x0C020065 -#define SHT2CDT 0x0C020066 -#define SHT3 0x0C020067 -#define SHT3CDT 0x0C020068 -#define STA2 0x0C020069 -#define STA2CDT 0x0C02006A -#define STEAM45 0x0C02006B -#define STEAM45CDT 0x0C02006C -#define TRUCK45 0x0C02006D -#define TRUCK45CDT 0x0C02006E -#define TRUCKEMP 0x0C02006F -#define TRUCKEMPCDT 0x0C020070 -#define ULT6 0x0C020071 -#define ULT6CDT 0x0C020072 -#define ULT7 0x0C020073 -#define ULT7CDT 0x0C020074 -#define ULT8 0x0C020075 -#define ULT8CDT 0x0C020076 -#define ULT9 0x0C020077 -#define ULT9CDT 0x0C020078 -#define XGEOMON3 0x0C020079 -#define XGEOMON3CDT 0x0C02007A -#define XGEOMON5 0x0C02007B -#define XGEOMON5CDT 0x0C02007C -#define XGEOSTA3 0x0C02007D -#define XGEOSTA3CDT 0x0C02007E -#define XGEOSTA5 0x0C02007F -#define XGEOSTA5CDT 0x0C020080 -#define XGEOSTAT 0x0C020081 -#define XGEOSTATCDT 0x0C020082 - // 131 entities in TXTs, 131 in datafiles. - // room47 -#define R47L0 0x0C030000 -#define R47L1 0x0C030001 -#define R47L2 0x0C030002 -#define R47G1 0x0C030003 -#define R47G2 0x0C030004 -#define R47PAL 0x0C030005 -#define R47FLR 0x0C030006 -#define CAR1 0x0C030007 -#define CAR1CDT 0x0C030008 -#define CAR2 0x0C030009 -#define CAR2CDT 0x0C03000A -#define CAR3 0x0C03000B -#define CAR3CDT 0x0C03000C -#define CAR4 0x0C03000D -#define CAR4CDT 0x0C03000E -#define CAR5 0x0C03000F -#define CAR5CDT 0x0C030010 -#define CAR6 0x0C030011 -#define CAR6CDT 0x0C030012 -#define CRPMOV 0x0C030013 -#define CRPMOVCDT 0x0C030014 -#define GEOSYR3 0x0C030015 -#define GEOSYR3CDT 0x0C030016 -#define GEOSYR3A 0x0C030017 -#define GEOSYR3ACDT 0x0C030018 -#define GEOSYR4 0x0C030019 -#define GEOSYR4CDT 0x0C03001A -#define GEOSYR4A 0x0C03001B -#define GEOSYR4ACDT 0x0C03001C - // 29 entities in TXTs, 29 in datafiles. - // room49 -#define R49L0 0x0C040000 -#define R49L1 0x0C040001 -#define R49L2 0x0C040002 -#define R49G1 0x0C040003 -#define R49G2 0x0C040004 -#define R49PAL 0x0C040005 -#define R49FLR 0x0C040006 -#define DOOR49 0x0C040007 -#define DOOR49CDT 0x0C040008 -#define DOOR49CDR 0x0C040009 -#define GEOKEYS1 0x0C04000A -#define GEOKEYS1CDT 0x0C04000B -#define GEOSYR43 0x0C04000C -#define GEOSYR43CDT 0x0C04000D -#define KEYS 0x0C04000E -#define KEYSCDT 0x0C04000F -#define MAN1 0x0C040010 -#define MAN1CDT 0x0C040011 -#define MAN2 0x0C040012 -#define MAN2CDT 0x0C040013 -#define MAN3 0x0C040014 -#define MAN3CDT 0x0C040015 -#define MAN4 0x0C040016 -#define MAN4CDT 0x0C040017 -#define MAN4A 0x0C040018 -#define MAN4ACDT 0x0C040019 -#define ULT10 0x0C04001A -#define ULT10CDT 0x0C04001B -#define ULT15 0x0C04001C -#define ULT15CDT 0x0C04001D -#define ULT3 0x0C04001E -#define ULT3CDT 0x0C04001F -#define ULTTAK 0x0C040020 -#define ULTTAKCDT 0x0C040021 - // 34 entities in TXTs, 34 in datafiles. - // room50 -#define R50L0 0x0C050000 -#define R50L1 0x0C050001 -#define R50L2 0x0C050002 -#define R50L3 0x0C050003 -#define R50G1 0x0C050004 -#define R50G2 0x0C050005 -#define R50G3 0x0C050006 -#define R50PAL 0x0C050007 -#define R50FLR 0x0C050008 -#define CHAIN50 0x0C050009 -#define CHAIN50CDT 0x0C05000A -#define CUBDOR50 0x0C05000B -#define CUBDOR50CDT 0x0C05000C -#define DOOR50 0x0C05000D -#define DOOR50CDT 0x0C05000E -#define DOOR50CDR 0x0C05000F -#define GEOSYR48 0x0C050010 -#define GEOSYR48CDT 0x0C050011 -#define GEOSYR49 0x0C050012 -#define GEOSYR49CDT 0x0C050013 -#define GEOSYR50 0x0C050014 -#define GEOSYR50CDT 0x0C050015 -#define GEOSYR51 0x0C050016 -#define GEOSYR51CDT 0x0C050017 -#define GEOSYR51CDR 0x0C050018 -#define GEOSYR52 0x0C050019 -#define GEOSYR52CDT 0x0C05001A -#define GEOSYR53 0x0C05001B -#define GEOSYR53CDT 0x0C05001C -#define GEOSYR54 0x0C05001D -#define GEOSYR54CDT 0x0C05001E -#define TOWEL1 0x0C05001F -#define TOWEL1CDT 0x0C050020 -#define TOWEL4 0x0C050021 -#define TOWEL4CDT 0x0C050022 - // 35 entities in TXTs, 35 in datafiles. - // room53 -#define R53L0 0x0C060000 -#define R53PAL 0x0C060001 -#define BACK53PLX 0x0C060002 -#define FRONT53PLX 0x0C060003 -#define R53SPRPAL 0x0C060004 - // 5 entities in TXTs, 5 in datafiles. - // room54 -#define R54L0 0x0C070000 -#define R54L1 0x0C070001 -#define R54G1 0x0C070002 -#define R54PAL 0x0C070003 -#define R54FLR 0x0C070004 -#define R54PLX 0x0C070005 -#define GEOSYR19 0x0C070006 -#define GEOSYR19CDT 0x0C070007 -#define GEOSYR20 0x0C070008 -#define GEOSYR20CDT 0x0C070009 -#define GEOSYR22 0x0C07000A -#define GEOSYR22CDT 0x0C07000B -#define GEOSYR23 0x0C07000C -#define GEOSYR23CDT 0x0C07000D -#define GEOSYR25 0x0C07000E -#define GEOSYR25CDT 0x0C07000F -#define GEOSYR26 0x0C070010 -#define GEOSYR26CDT 0x0C070011 -#define GEOSYR27 0x0C070012 -#define GEOSYR27CDT 0x0C070013 -#define GEOSYR37 0x0C070014 -#define GEOSYR37CDT 0x0C070015 -#define GEOSYR39 0x0C070016 -#define GEOSYR39CDT 0x0C070017 -#define GEOSYR40 0x0C070018 -#define GEOSYR40CDT 0x0C070019 -#define GEOSYR41 0x0C07001A -#define GEOSYR41CDT 0x0C07001B -#define GEOSYR42 0x0C07001C -#define GEOSYR42CDT 0x0C07001D -#define GEOSYR99 0x0C07001E -#define GEOSYR99CDT 0x0C07001F -#define GUN54 0x0C070020 -#define GUN54CDT 0x0C070021 -#define KHS10 0x0C070022 -#define KHS10CDT 0x0C070023 -#define KHS12 0x0C070024 -#define KHS12CDT 0x0C070025 -#define KHS5 0x0C070026 -#define KHS5CDT 0x0C070027 -#define KHS7 0x0C070028 -#define KHS7CDT 0x0C070029 -#define KHS8 0x0C07002A -#define KHS8CDT 0x0C07002B -#define KHS9 0x0C07002C -#define KHS9CDT 0x0C07002D -#define KHSTLK54 0x0C07002E -#define KHSTLK54CDT 0x0C07002F -#define SECDOR 0x0C070030 -#define SECDORCDT 0x0C070031 -#define STCKTREE 0x0C070032 -#define STCKTREECDT 0x0C070033 -#define STICKIN 0x0C070034 -#define STICKINCDT 0x0C070035 -#define XGEOSY21 0x0C070036 -#define XGEOSY21CDT 0x0C070037 - // 56 entities in TXTs, 56 in datafiles. - // room55 -#define R55SPRPAL 0x0C080000 -#define R55L0 0x0C080001 -#define R55PAL 0x0C080002 -#define R55FLR 0x0C080003 -#define R55PLX 0x0C080004 -#define BODY55 0x0C080005 -#define BODY55CDT 0x0C080006 -#define BRITMAP 0x0C080007 -#define BRITMAP_PAL 0x0C080008 -#define DOOR55 0x0C080009 -#define DOOR55CDT 0x0C08000A -#define DOOR55CDR 0x0C08000B -#define GEOSY30T 0x0C08000C -#define GEOSY30TCDT 0x0C08000D -#define GEOSY30U 0x0C08000E -#define GEOSY30UCDT 0x0C08000F -#define GEOSYR29 0x0C080010 -#define GEOSYR29CDT 0x0C080011 -#define GEOSYR30 0x0C080012 -#define GEOSYR30CDT 0x0C080013 -#define GEOSYR31 0x0C080014 -#define GEOSYR31CDT 0x0C080015 -#define GEOSYR33 0x0C080016 -#define GEOSYR33CDT 0x0C080017 -#define GEOSYR34 0x0C080018 -#define GEOSYR34CDT 0x0C080019 -#define GEOSYR34CDR 0x0C08001A -#define GEOSYR35 0x0C08001B -#define GEOSYR35CDT 0x0C08001C -#define GEOSYR56 0x0C08001D -#define GEOSYR56CDT 0x0C08001E -#define KHS2 0x0C08001F -#define KHS2CDT 0x0C080020 -#define KHS3 0x0C080021 -#define KHS3CDT 0x0C080022 -#define KHS6 0x0C080023 -#define KHS6CDT 0x0C080024 - // 37 entities in TXTs, 37 in datafiles. -// train - // sound_fx -#define FX_SHOCK63 0x0D000000 -#define FX_TRAINEXT 0x0D000001 -#define FX_TRAININT 0x0D000002 -#define FX_DOOR65 0x0D000003 -#define FX_WIND66 0x0D000004 -#define FX_WINDOW66 0x0D000005 -#define FX_BRAKES 0x0D000006 -#define FX_DOOR69 0x0D000007 -#define FX_EKSHOOT 0x0D000008 -#define FX_FIGHT69 0x0D000009 -#define FX_PNEUMO69 0x0D00000A -#define FX_TICK69 0x0D00000B -#define FX_TRNPASS 0x0D00000C - // 13 entities in TXTs, 13 in datafiles. - // room63 -#define TRAIN_PAL 0x0D010000 -#define R63L0 0x0D010001 -#define R63L1 0x0D010002 -#define R63G1 0x0D010003 -#define R63PAL 0x0D010004 -#define R63FLR 0x0D010005 -#define GEOTRAIN_MEGA 0x0D010006 -#define GEOTRAIN_WLK 0x0D010007 -#define BASHER63 0x0D010008 -#define BASHER63CDT 0x0D010009 -#define BOXDOR64 0x0D01000A -#define BOXDOR64CDT 0x0D01000B -#define BUSHA63 0x0D01000C -#define BUSHA63CDT 0x0D01000D -#define BUSHB63 0x0D01000E -#define BUSHB63CDT 0x0D01000F -#define BUSHC63 0x0D010010 -#define BUSHC63CDT 0x0D010011 -#define DOOR63C1 0x0D010012 -#define DOOR63C1CDT 0x0D010013 -#define DOOR63C1CDR 0x0D010014 -#define DOOR63C2 0x0D010015 -#define DOOR63C2CDT 0x0D010016 -#define DOOR63C2CDR 0x0D010017 -#define DOOR63C3 0x0D010018 -#define DOOR63C3CDT 0x0D010019 -#define DOOR63C3CDR 0x0D01001A -#define GEOCLI64 0x0D01001B -#define GEOCLI64CDT 0x0D01001C -#define GEOJGL64 0x0D01001D -#define GEOJGL64CDT 0x0D01001E -#define GEOJGR64 0x0D01001F -#define GEOJGR64CDT 0x0D010020 -#define GEOLAD64 0x0D010021 -#define GEOLAD64CDT 0x0D010022 -#define GEOSHK64 0x0D010023 -#define GEOSHK64CDT 0x0D010024 -#define GEOSTDL 0x0D010025 -#define GEOSTDLCDT 0x0D010026 -#define GEOSTDR 0x0D010027 -#define GEOSTDRCDT 0x0D010028 -#define GUIDOR63 0x0D010029 -#define GUIDOR63CDT 0x0D01002A -#define GUIDSM63 0x0D01002B -#define GUIDSM63CDT 0x0D01002C -#define LADY63 0x0D01002D -#define LADY63CDT 0x0D01002E -#define LIGHT63A 0x0D01002F -#define LIGHT63ACDT 0x0D010030 -#define LIGHT63B 0x0D010031 -#define LIGHT63BCDT 0x0D010032 -#define LIGHT63C 0x0D010033 -#define LIGHT63CCDT 0x0D010034 -#define LIGHT63D 0x0D010035 -#define LIGHT63DCDT 0x0D010036 -#define LIGHT63E 0x0D010037 -#define LIGHT63ECDT 0x0D010038 -#define NICO63 0x0D010039 -#define NICO63CDT 0x0D01003A -#define POLE63 0x0D01003B -#define POLE63CDT 0x0D01003C -#define WHEELA63 0x0D01003D -#define WHEELA63CDT 0x0D01003E -#define WHEELB63 0x0D01003F -#define WHEELB63CDT 0x0D010040 -#define WHEELC63 0x0D010041 -#define WHEELC63CDT 0x0D010042 -#define WHEELD63 0x0D010043 -#define WHEELD63CDT 0x0D010044 -#define WHEELE63 0x0D010045 -#define WHEELE63CDT 0x0D010046 -#define WHEELF63 0x0D010047 -#define WHEELF63CDT 0x0D010048 - // 73 entities in TXTs, 73 in datafiles. - // room65 -#define R65L0 0x0D020000 -#define R65L1 0x0D020001 -#define R65G1 0x0D020002 -#define R65PAL 0x0D020003 -#define R65FLR 0x0D020004 -#define DOOR65 0x0D020005 -#define DOOR65CDT 0x0D020006 -#define DOOR65CDR 0x0D020007 -#define GEOGUA 0x0D020008 -#define GEOGUACDT 0x0D020009 -#define GEOLNK3 0x0D02000A -#define GEOLNK3CDT 0x0D02000B -#define GEONIC65 0x0D02000C -#define GEONIC65CDT 0x0D02000D -#define GEOSIT 0x0D02000E -#define GEOSITCDT 0x0D02000F -#define GEOSIT65 0x0D020010 -#define GEOSIT65CDT 0x0D020011 -#define GEOSTD65 0x0D020012 -#define GEOSTD65CDT 0x0D020013 -#define GEOSTD65CDR 0x0D020014 -#define GEOTIK 0x0D020015 -#define GEOTIKCDT 0x0D020016 -#define GEOTN652 0x0D020017 -#define GEOTN652CDT 0x0D020018 -#define GEOTN652CDR 0x0D020019 -#define GEOTRN65 0x0D02001A -#define GEOTRN65CDT 0x0D02001B -#define GEOTRN65CDR 0x0D02001C -#define GUADOR65 0x0D02001D -#define GUADOR65CDT 0x0D02001E -#define GUALEA65 0x0D02001F -#define GUALEA65CDT 0x0D020020 -#define GUATGN 0x0D020021 -#define GUATGNCDT 0x0D020022 -#define GUATGNCDR 0x0D020023 -#define GUATIK1 0x0D020024 -#define GUATIK1CDT 0x0D020025 -#define GUATIK2 0x0D020026 -#define GUATIK2CDT 0x0D020027 -#define GUATLK1 0x0D020028 -#define GUATLK1CDT 0x0D020029 -#define GUATLK2 0x0D02002A -#define GUATLK2CDT 0x0D02002B -#define NICGEO65 0x0D02002C -#define NICGEO65CDT 0x0D02002D -#define NICSIT65 0x0D02002E -#define NICSIT65CDT 0x0D02002F -#define NICTRN65 0x0D020030 -#define NICTRN65CDT 0x0D020031 -#define NICTRN65CDR 0x0D020032 -#define OLDREAD 0x0D020033 -#define OLDREADCDT 0x0D020034 -#define OLDREADCDR 0x0D020035 -#define OLDTIK1 0x0D020036 -#define OLDTIK1CDT 0x0D020037 -#define OLDTLK1 0x0D020038 -#define OLDTLK1CDT 0x0D020039 - // 58 entities in TXTs, 58 in datafiles. - // room66 -#define R66L0 0x0D030000 -#define R66PAL 0x0D030001 -#define R66FLR 0x0D030002 -#define BASHBURP 0x0D030003 -#define BASHBURPCDT 0x0D030004 -#define BASHCAN 0x0D030005 -#define BASHCANCDT 0x0D030006 -#define BASHCLA 0x0D030007 -#define BASHCLACDT 0x0D030008 -#define BASHDRI 0x0D030009 -#define BASHDRICDT 0x0D03000A -#define BASHSTD 0x0D03000B -#define BASHSTDCDT 0x0D03000C -#define BASHTLK1 0x0D03000D -#define BASHTLK1CDT 0x0D03000E -#define CAN66 0x0D03000F -#define CAN66CDT 0x0D030010 -#define GEOLEA 0x0D030011 -#define GEOLEACDT 0x0D030012 -#define GEOOPN1 0x0D030013 -#define GEOOPN1CDT 0x0D030014 -#define GEOOUT66 0x0D030015 -#define GEOOUT66CDT 0x0D030016 -#define SLEEPY1 0x0D030017 -#define SLEEPY1CDT 0x0D030018 -#define SLEEPY1CDR 0x0D030019 -#define SLEEPY2 0x0D03001A -#define SLEEPY2CDT 0x0D03001B - // 28 entities in TXTs, 28 in datafiles. - // room67 -#define R67L0 0x0D040000 -#define R67L1 0x0D040001 -#define R67G1 0x0D040002 -#define R67PAL 0x0D040003 -#define R67FLR 0x0D040004 -#define DOOR67 0x0D040005 -#define DOOR67CDT 0x0D040006 -#define DOOR67CDR 0x0D040007 - // 8 entities in TXTs, 8 in datafiles. - // room69 -#define R69SPRPAL 0x0D050000 -#define R69L0 0x0D050001 -#define R69L1 0x0D050002 -#define R69G1 0x0D050003 -#define R69PAL 0x0D050004 -#define R69FLR 0x0D050005 -#define ASSDIE69 0x0D050006 -#define ASSDIE69CDT 0x0D050007 -#define ASSDWN69 0x0D050008 -#define ASSDWN69CDT 0x0D050009 -#define ASSLIFT 0x0D05000A -#define ASSLIFTCDT 0x0D05000B -#define ASSTLK69 0x0D05000C -#define ASSTLK69CDT 0x0D05000D -#define BOXES69 0x0D05000E -#define BOXES69CDT 0x0D05000F -#define EKLBOX69 0x0D050010 -#define EKLBOX69CDT 0x0D050011 -#define EKLGUN 0x0D050012 -#define EKLGUNCDT 0x0D050013 -#define EKLGUN69 0x0D050014 -#define EKLGUN69CDT 0x0D050015 -#define EKLTLK69 0x0D050016 -#define EKLTLK69CDT 0x0D050017 -#define EKLFIGHT 0x0D050018 -#define EKLFIGHTCDT 0x0D050019 -#define FIGHT69 0x0D05001A -#define FIGHT69CDT 0x0D05001B -#define GEODIE69 0x0D05001C -#define GEODIE69CDT 0x0D05001D -#define GEOENT69 0x0D05001E -#define GEOENT69CDT 0x0D05001F -#define GEOSTD69 0x0D050020 -#define GEOSTD69CDT 0x0D050021 -#define GEOSTP69 0x0D050022 -#define GEOSTP69CDT 0x0D050023 -#define GEOTLK69 0x0D050024 -#define GEOTLK69CDT 0x0D050025 -#define GEOUNTIE 0x0D050026 -#define GEOUNTIECDT 0x0D050027 -#define GEOXIT69 0x0D050028 -#define GEOXIT69CDT 0x0D050029 -#define NICTKB69 0x0D05002A -#define NICTKB69CDT 0x0D05002B -#define NICTLK69 0x0D05002C -#define NICTLK69CDT 0x0D05002D -#define NICTRN69 0x0D05002E -#define NICTRN69CDT 0x0D05002F -#define NICTRN69CDR 0x0D050030 -#define NICTUG69 0x0D050031 -#define NICTUG69CDT 0x0D050032 -#define NICWLK69 0x0D050033 -#define NICWLK69CDT 0x0D050034 -#define NICXIT69 0x0D050035 -#define NICXIT69CDT 0x0D050036 -#define RGTDOR69 0x0D050037 -#define RGTDOR69CDT 0x0D050038 - // 57 entities in TXTs, 57 in datafiles. -// scotland - // sound_fx -#define FX_WIND71 0x0E000000 -#define FX_GUST71 0x0E000001 -#define FX_OWL71A 0x0E000002 -#define FX_OWL71B 0x0E000003 -#define FX_COG72A 0x0E000004 -#define FX_PING 0x0E000005 -#define FX_RUMMAGE1 0x0E000006 -#define FX_RUMMAGE2 0x0E000007 -#define FX_SECDOR72 0x0E000008 -#define FX_CHANT 0x0E000009 -#define FX_DAGGER1 0x0E00000A -#define FX_GDROP73 0x0E00000B -#define FX_GUNPOWDR 0x0E00000C -#define FX_STAFF 0x0E00000D -#define FX_TORCH73 0x0E00000E -#define FX_BAPHAMB 0x0E00000F -#define FX_FIGHT1 0x0E000010 -#define FX_REFORGE2 0x0E000011 -#define FX_ROSSODIE 0x0E000012 -#define FX_GKSWORD 0x0E000013 -#define FX_REFORGE1 0x0E000014 -#define FX_REFORGE4 0x0E000015 -#define FX_CHOKE1 0x0E000016 -#define FX_CHOKE2 0x0E000017 -#define FX_EKDIES 0x0E000018 -#define FX_FIGHT2 0x0E000019 -#define FX_GUN79 0x0E00001A - // 27 entities in TXTs, 27 in datafiles. - // room71 -#define R71L0 0x0E010000 -#define R71L1 0x0E010001 -#define R71G1 0x0E010002 -#define R71PAL 0x0E010003 -#define R71FLR 0x0E010004 -#define R71PLX 0x0E010005 - // 6 entities in TXTs, 6 in datafiles. - // room72 -#define R72L0 0x0E020000 -#define R72L1 0x0E020001 -#define R72G1 0x0E020002 -#define R72PAL 0x0E020003 -#define R72FLR 0x0E020004 -#define COGL72 0x0E020005 -#define COGL72CDT 0x0E020006 -#define COGR72 0x0E020007 -#define COGR72CDT 0x0E020008 -#define GEOJMP72 0x0E020009 -#define GEOJMP72CDT 0x0E02000A -#define GEOPIPE 0x0E02000B -#define GEOPIPECDT 0x0E02000C -#define GEOPIPECDR 0x0E02000D -#define GEOPSH72 0x0E02000E -#define GEOPSH72CDT 0x0E02000F -#define GEOPUT72 0x0E020010 -#define GEOPUT72CDT 0x0E020011 -#define GEOTAK72 0x0E020012 -#define GEOTAK72CDT 0x0E020013 -#define GEOTAK72CDR 0x0E020014 -#define GEOTRY72 0x0E020015 -#define GEOTRY72CDT 0x0E020016 -#define GEOWIND2 0x0E020017 -#define GEOWIND2CDT 0x0E020018 -#define GEOWIND3 0x0E020019 -#define GEOWIND3CDT 0x0E02001A -#define GEOWIND4 0x0E02001B -#define GEOWIND4CDT 0x0E02001C -#define GEOWND72 0x0E02001D -#define GEOWND72CDT 0x0E02001E -#define HANDLE72 0x0E02001F -#define HANDLE72CDT 0x0E020020 -#define NICGEO72 0x0E020021 -#define NICGEO72CDT 0x0E020022 -#define NICJMP72 0x0E020023 -#define NICJMP72CDT 0x0E020024 -#define NICLNK72 0x0E020025 -#define NICLNK72CDT 0x0E020026 -#define NICLNK72CDR 0x0E020027 -#define NICOPY72 0x0E020028 -#define NICOPY72CDT 0x0E020029 -#define NICOPY72CDR 0x0E02002A -#define NICTLK72 0x0E02002B -#define NICTLK72CDT 0x0E02002C -#define NOSE72 0x0E02002D -#define NOSE72CDT 0x0E02002E -#define PANEL72 0x0E02002F -#define PANEL72CDT 0x0E020030 -#define PIPE72 0x0E020031 -#define PIPE72CDT 0x0E020032 -#define SPINDL72 0x0E020033 -#define SPINDL72CDT 0x0E020034 -#define WHEEL72 0x0E020035 -#define WHEEL72CDT 0x0E020036 - // 55 entities in TXTs, 55 in datafiles. - // room73 -#define R73SPRPAL 0x0E030000 -#define R73L0 0x0E030001 -#define R73L1 0x0E030002 -#define R73L2 0x0E030003 -#define R73G1 0x0E030004 -#define R73G2 0x0E030005 -#define R73PAL 0x0E030006 -#define R73FLR 0x0E030007 -#define DAGGER1 0x0E030008 -#define DAGGER1CDT 0x0E030009 -#define DAGGER2 0x0E03000A -#define DAGGER2CDT 0x0E03000B -#define DARKWALL 0x0E03000C -#define DARKWALLCDT 0x0E03000D -#define FLAME73 0x0E03000E -#define FLAME73CDT 0x0E03000F -#define GEOCRCH 0x0E030010 -#define GEOCRCHCDT 0x0E030011 -#define GEOCREEP 0x0E030012 -#define GEOCREEPCDT 0x0E030013 -#define GEODIE1 0x0E030014 -#define GEODIE1CDT 0x0E030015 -#define GEODIE2 0x0E030016 -#define GEODIE2CDT 0x0E030017 -#define GEOTHROW 0x0E030018 -#define GEOTHROWCDT 0x0E030019 -#define GEOTLK73 0x0E03001A -#define GEOTLK73CDT 0x0E03001B -#define GEOTN73 0x0E03001C -#define GEOTN73CDT 0x0E03001D -#define GEOTN73CDR 0x0E03001E -#define GMENTER 0x0E03001F -#define GMENTERCDT 0x0E030020 -#define GMSPEAK 0x0E030021 -#define GMSPEAKCDT 0x0E030022 -#define GUIDLE 0x0E030023 -#define GUIDLECDT 0x0E030024 -#define GUITALK 0x0E030025 -#define GUITALKCDT 0x0E030026 -#define GUITHROW 0x0E030027 -#define GUITHROWCDT 0x0E030028 -#define GUITURN7 0x0E030029 -#define GUITURN7CDT 0x0E03002A -#define GUITURN7CDR 0x0E03002B -#define NICENT73 0x0E03002C -#define NICENT73CDT 0x0E03002D -#define NICEX73 0x0E03002E -#define NICEX73CDT 0x0E03002F -#define NICOTHRO 0x0E030030 -#define NICOTHROCDT 0x0E030031 -#define NICPANIC 0x0E030032 -#define NICPANICCDT 0x0E030033 -#define NICTLK73 0x0E030034 -#define NICTLK73CDT 0x0E030035 -#define NICTRN73 0x0E030036 -#define NICTRN73CDT 0x0E030037 -#define NICTRN73CDR 0x0E030038 -#define NITALK73 0x0E030039 -#define NITALK73CDT 0x0E03003A -#define SPARKING 0x0E03003B -#define SPARKINGCDT 0x0E03003C -#define TORCH1 0x0E03003D -#define TORCH1CDT 0x0E03003E -#define TORCH2 0x0E03003F -#define TORCH2CDT 0x0E030040 -#define TORCH3 0x0E030041 -#define TORCH3CDT 0x0E030042 - // 67 entities in TXTs, 67 in datafiles. - // room74 -#define ENDSPRPAL 0x0E040000 -#define R74L0 0x0E040001 -#define R74L1 0x0E040002 -#define R74G1 0x0E040003 -#define R74PAL 0x0E040004 -#define R74APAL 0x0E040005 -#define R74BPAL 0x0E040006 -#define R74CPAL 0x0E040007 -#define R74DPAL 0x0E040008 -#define CHANT74 0x0E040009 -#define CHANT74CDT 0x0E04000A -#define EKFIGHT 0x0E04000B -#define EKFIGHTCDT 0x0E04000C -#define EKGUN74 0x0E04000D -#define EKGUN74CDT 0x0E04000E -#define GEOFIGHT 0x0E04000F -#define GEOFIGHTCDT 0x0E040010 -#define GEOLUK74 0x0E040011 -#define GEOLUK74CDT 0x0E040012 -#define GEOLUK74CDR 0x0E040013 -#define GEORCT74 0x0E040014 -#define GEORCT74CDT 0x0E040015 -#define GEORUN74 0x0E040016 -#define GEORUN74CDT 0x0E040017 -#define GEOSTND 0x0E040018 -#define GEOSTNDCDT 0x0E040019 -#define GEOTLK74 0x0E04001A -#define GEOTLK74CDT 0x0E04001B -#define GKKNEE 0x0E04001C -#define GKKNEECDT 0x0E04001D -#define GMGUN 0x0E04001E -#define GMGUNCDT 0x0E04001F -#define GMMOV1 0x0E040020 -#define GMMOV1CDT 0x0E040021 -#define GMMOV2 0x0E040022 -#define GMMOV2CDT 0x0E040023 -#define GMMOV3 0x0E040024 -#define GMMOV3CDT 0x0E040025 -#define GMMOV4 0x0E040026 -#define GMMOV4CDT 0x0E040027 -#define GMMOV5 0x0E040028 -#define GMMOV5CDT 0x0E040029 -#define GMMOV6 0x0E04002A -#define GMMOV6CDT 0x0E04002B -#define GMTLK1 0x0E04002C -#define GMTLK1CDT 0x0E04002D -#define GMTLK2 0x0E04002E -#define GMTLK2CDT 0x0E04002F -#define GMTLK3 0x0E040030 -#define GMTLK3CDT 0x0E040031 -#define GMTLK4 0x0E040032 -#define GMTLK4CDT 0x0E040033 -#define GMTLK5 0x0E040034 -#define GMTLK5CDT 0x0E040035 -#define GMTLK6 0x0E040036 -#define GMTLK6CDT 0x0E040037 -#define GMTLK7 0x0E040038 -#define GMTLK7CDT 0x0E040039 -#define GMTLK74 0x0E04003A -#define GMTLK74CDT 0x0E04003B -#define GMWLK 0x0E04003C -#define GMWLKCDT 0x0E04003D -#define GMWRIT74 0x0E04003E -#define GMWRIT74CDT 0x0E04003F -#define MONKFALL 0x0E040040 -#define MONKFALLCDT 0x0E040041 -#define MONKRISE 0x0E040042 -#define MONKRISECDT 0x0E040043 -#define MONKSTRS 0x0E040044 -#define MONKSTRSCDT 0x0E040045 -#define MONKTURN 0x0E040046 -#define MONKTURNCDT 0x0E040047 -#define NICFIGHT 0x0E040048 -#define NICFIGHTCDT 0x0E040049 -#define NICLUK74 0x0E04004A -#define NICLUK74CDT 0x0E04004B -#define NICLUK74CDR 0x0E04004C -#define NICRCVR 0x0E04004D -#define NICRCVRCDT 0x0E04004E -#define NICRUN74 0x0E04004F -#define NICRUN74CDT 0x0E040050 -#define NICSTND 0x0E040051 -#define NICSTNDCDT 0x0E040052 -#define NICTLK74 0x0E040053 -#define NICTLK74CDT 0x0E040054 -#define ROSSFALL 0x0E040055 -#define ROSSFALLCDT 0x0E040056 -#define ROSSTAIR 0x0E040057 -#define ROSSTAIRCDT 0x0E040058 -#define ROSSTND 0x0E040059 -#define ROSSTNDCDT 0x0E04005A -#define ROSSWLK 0x0E04005B -#define ROSSWLKCDT 0x0E04005C -#define RUBBLE 0x0E04005D -#define RUBBLECDT 0x0E04005E -#define STONLIT1 0x0E04005F -#define STONLIT1CDT 0x0E040060 -#define STONLIT2 0x0E040061 -#define STONLIT2CDT 0x0E040062 -#define STONWHT1 0x0E040063 -#define STONWHT1CDT 0x0E040064 -#define STONWHT2 0x0E040065 -#define STONWHT2CDT 0x0E040066 - // 103 entities in TXTs, 103 in datafiles. - // room75 -#define R75L0 0x0E050000 -#define R75PAL 0x0E050001 -#define R75APAL 0x0E050002 -#define R75BPAL 0x0E050003 -#define R75CPAL 0x0E050004 -#define R75DPAL 0x0E050005 -#define EKGUN 0x0E050006 -#define EKGUNCDT 0x0E050007 -#define EKGUN2 0x0E050008 -#define EKGUN2CDT 0x0E050009 -#define EKLITE 0x0E05000A -#define EKLITECDT 0x0E05000B -#define EKRELAX 0x0E05000C -#define EKRELAXCDT 0x0E05000D -#define EKTLK75 0x0E05000E -#define EKTLK75CDT 0x0E05000F -#define GEOLUK75 0x0E050010 -#define GEOLUK75CDT 0x0E050011 -#define GEOLUK75CDR 0x0E050012 -#define GTMP 0x0E050013 -#define GTMPCDT 0x0E050014 -#define NICLUK75 0x0E050015 -#define NICLUK75CDT 0x0E050016 -#define NICLUK75CDR 0x0E050017 -#define NTMP 0x0E050018 -#define NTMPCDT 0x0E050019 -#define TORCH75 0x0E05001A -#define TORCH75CDT 0x0E05001B - // 28 entities in TXTs, 28 in datafiles. - // room76 -#define R76L0 0x0E060000 -#define R76PAL 0x0E060001 -#define CHANT76 0x0E060002 -#define CHANT76CDT 0x0E060003 -#define EKGUN76 0x0E060004 -#define EKGUN76CDT 0x0E060005 -#define GKBAK 0x0E060006 -#define GKBAKCDT 0x0E060007 -#define GKKNEE76 0x0E060008 -#define GKKNEE76CDT 0x0E060009 -#define GKLOWER 0x0E06000A -#define GKLOWERCDT 0x0E06000B -#define GKSWORD 0x0E06000C -#define GKSWORDCDT 0x0E06000D -#define GKTLK 0x0E06000E -#define GKTLKCDT 0x0E06000F -#define GKTLK2 0x0E060010 -#define GKTLK2CDT 0x0E060011 -#define GMARMS 0x0E060012 -#define GMARMSCDT 0x0E060013 -#define GMSTONES 0x0E060014 -#define GMSTONESCDT 0x0E060015 -#define GMTLK76 0x0E060016 -#define GMTLK76CDT 0x0E060017 -#define GMTRN76 0x0E060018 -#define GMTRN76CDT 0x0E060019 -#define LSTONE76 0x0E06001A -#define LSTONE76CDT 0x0E06001B -#define MONKNEE 0x0E06001C -#define MONKNEECDT 0x0E06001D -#define ROSSTND76 0x0E06001E -#define ROSSTND76CDT 0x0E06001F -#define RSTONE76 0x0E060020 -#define RSTONE76CDT 0x0E060021 - // 34 entities in TXTs, 34 in datafiles. - // room77 -#define R77L0 0x0E070000 -#define R77PAL 0x0E070001 -#define CHANT77 0x0E070002 -#define CHANT77CDT 0x0E070003 -#define GEOPEER 0x0E070004 -#define GEOPEERCDT 0x0E070005 -#define GMHEAD 0x0E070006 -#define GMHEADCDT 0x0E070007 -#define NICPEER 0x0E070008 -#define NICPEERCDT 0x0E070009 -#define NICTLK77 0x0E07000A -#define NICTLK77CDT 0x0E07000B -#define ROSLUK77 0x0E07000C -#define ROSLUK77CDT 0x0E07000D - // 14 entities in TXTs, 14 in datafiles. - // room78 -#define R78L0 0x0E080000 -#define R78PAL 0x0E080001 -#define R78APAL 0x0E080002 -#define R78BPAL 0x0E080003 -#define R78CPAL 0x0E080004 -#define R78DPAL 0x0E080005 -#define R78EPAL 0x0E080006 -#define R78FPAL 0x0E080007 -#define LSTONE78 0x0E080008 -#define LSTONE78CDT 0x0E080009 -#define LSTONE78CDR 0x0E08000A -#define GMPOWER 0x0E08000B -#define GMPOWERCDT 0x0E08000C -#define GMWRITH 0x0E08000D -#define GMWRITHCDT 0x0E08000E -#define RSTONE78 0x0E08000F -#define RSTONE78CDT 0x0E080010 -#define RSTONE78CDR 0x0E080011 - // 18 entities in TXTs, 18 in datafiles. - // room79 -#define R79L0 0x0E090000 -#define R79PAL 0x0E090001 -#define EKSTD79 0x0E090002 -#define EKSTD79CDT 0x0E090003 -#define FIGHT79 0x0E090004 -#define FIGHT79CDT 0x0E090005 -#define GEOANG79 0x0E090006 -#define GEOANG79CDT 0x0E090007 -#define GEOTLK79 0x0E090008 -#define GEOTLK79CDT 0x0E090009 -#define NICSTD79 0x0E09000A -#define NICSTD79CDT 0x0E09000B -#define ROSENT79 0x0E09000C -#define ROSENT79CDT 0x0E09000D -#define ROSSHOT 0x0E09000E -#define ROSSHOTCDT 0x0E09000F -#define ROSTLK79 0x0E090010 -#define ROSTLK79CDT 0x0E090011 - // 18 entities in TXTs, 18 in datafiles. - -//} // End of namespace Sword1 - -#endif //SWORDRES_H diff --git a/backends/PalmOS/Src/cd_aeroplayer.cpp b/backends/PalmOS/Src/cd_aeroplayer.cpp deleted file mode 100644 index d70bf572c9..0000000000 --- a/backends/PalmOS/Src/cd_aeroplayer.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/system.h" -#include "common/config-manager.h" - -#include "cd_aeroplayer.h" - -AeroCDPlayer::AeroCDPlayer(OSystem *sys) { - _sys = sys; - StrCopy(gameP, ConfMan.getActiveDomainName().c_str()); -} - -bool AeroCDPlayer::init() { - aeroplayer_Startup(); - _isInitialized = aeroplayer_PlayerIsActive(); - - if (_isInitialized) - _volumeLimit = aeroplayer_GetMaxVolumeIndex(); - - return _isInitialized; -} - -void AeroCDPlayer::release() { - aeroplayer_Shutdown(); - - // self delete - delete this; -} - -UInt32 AeroCDPlayer::getStatus() { - return aeroplayer_GetPlaybackStatus(); -} - -UInt32 AeroCDPlayer::getPosition() { - return aeroplayer_GetPosition_msec(); -} - -UInt32 AeroCDPlayer::getDuration() { - return aeroplayer_GetDuration_msec(); -} - -void AeroCDPlayer::setPosition(UInt32 value) { - aeroplayer_Seek_abs_msec(value); -} - -void AeroCDPlayer::setVolume(int volume) { - _volumeLevel = volume; - aeroplayer_SetVolumeIndex((_volumeLimit * volume) / 100); -} - -bool AeroCDPlayer::poll() { - return - ( _pckLoops != 0 && - ( getPosition() < _pckTrackEndFrame && - getStatus() == AEROPLAYER_STATUS_PLAY - ) - ); -} - -void AeroCDPlayer::update() { - - // stop replay upon request of stopCD() - if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) { - forceStop(); - _pckLoops = 0; - _pckStopTime = 0; - _pckTrackEndFrame = 0; - return; - } - - // not fully played - if (getPosition() < _pckTrackEndFrame && getStatus() == AEROPLAYER_STATUS_PLAY) - return; - - aeroplayer_Pause(); -// _pckStopTime = _sys->getMillis(); - - // loop again ? - if (_pckLoops > 0) - _pckLoops--; - - // loop if needed - if (_pckLoops == 0) - forceStop(); - else { - //_pckStopTime = 0; - - if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { - setPosition(0); - } else { - setPosition(_pckTrackStartFrame); - } - - aeroplayer_Play(); - _pckEndTime = _sys->getMillis() + _pckTrackDuration; - } -} - -void AeroCDPlayer::stop() { - _pckStopTime = _sys->getMillis(); - _pckLoops = 0; - return; -} - -void AeroCDPlayer::forceStop() { - if (getStatus() != AEROPLAYER_STATUS_STOP) - aeroplayer_PlayTrack(vfsInvalidVolRef, NULL); -} - -void AeroCDPlayer::play(int track, int num_loops, int start_frame, int duration) { - if (!num_loops && !start_frame) - return; - - Char fileP[100]; - static const Char *ext[] = { "mp3", "ogg" }; - -// if (duration > 0) -// duration += 5; - - _pckTrack = track; - _pckLoops = num_loops; - _pckTrackStartFrame = TO_MSECS(start_frame); - _pckTrackDuration = TO_MSECS(duration); - - StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]); - aeroplayer_Pause(); - aeroplayer_PlayTrack(gVars->VFS.volRefNum, fileP); - aeroplayer_Pause(); - - if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { - _pckTrackDuration = getDuration(); - } else { - setPosition(_pckTrackStartFrame); - if (_pckTrackDuration == 0) - _pckTrackDuration = getDuration() - _pckTrackStartFrame; - } - - aeroplayer_Play(); - - _pckStopTime = 0; - _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration; - _pckEndTime = _sys->getMillis() + _pckTrackDuration; -} diff --git a/backends/PalmOS/Src/cd_aeroplayer.h b/backends/PalmOS/Src/cd_aeroplayer.h deleted file mode 100644 index 1ea48a4c9b..0000000000 --- a/backends/PalmOS/Src/cd_aeroplayer.h +++ /dev/null @@ -1,64 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef CD_AEROPLAYER_H -#define CD_AEROPLAYER_H - -#include "cdaudio.h" -#include "aeroplayer_public.h" - -class AeroCDPlayer : public CDAudio { -public: - AeroCDPlayer(OSystem *sys); - - bool init(); - void release(); - - bool poll(); - void update(); - void play(int track, int num_loops, int start_frame, int duration); - void stop(); - - void setVolume(int volume); - -private: - OSystem *_sys; - Char gameP[15]; - - UInt32 getStatus(); - void setPosition(UInt32 value); - UInt32 getDuration(); - UInt32 getPosition(); - void forceStop(); - - UInt16 _volumeLimit; - - Boolean _isPlaying; - // cdrom - UInt16 _pckLoops, _pckTrack; - UInt32 _pckTrackStartFrame, _pckTrackEndFrame; - UInt32 _pckStopTime, _pckEndTime, _pckTrackDuration; -}; - -#endif diff --git a/backends/PalmOS/Src/cd_default.cpp b/backends/PalmOS/Src/cd_default.cpp deleted file mode 100644 index 4862600b0c..0000000000 --- a/backends/PalmOS/Src/cd_default.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ -#include "common/stdafx.h" -#include "common/system.h" -#include "cd_default.h" - -DefaultCDPlayer::DefaultCDPlayer(OSystem *sys) { - _sys = sys; -} - -bool DefaultCDPlayer::init() { - _isInitialized = true; - return _isInitialized; -} - -void DefaultCDPlayer::release() { - // self delete - delete this; -} - -bool DefaultCDPlayer::poll() { - return (_defLoops != 0 && _sys->getMillis() < _defTrackEndFrame); -} - -void DefaultCDPlayer::update() { - - // stop replay upon request of stopCD() - if (_defStopTime != 0 && _sys->getMillis() >= _defStopTime) { - _defLoops = 0; - _defStopTime = 0; - _defTrackEndFrame = 0; - return; - } - - // not fully played - if (_sys->getMillis() < _defTrackEndFrame) - return; - - if (_defLoops == 0) - return; - - // loop again ? - if (_defLoops > 0) - _defLoops--; - - // loop if needed - if (_defLoops != 0) { - _defTrackEndFrame = _sys->getMillis() + _defTrackLength; - } -} - -void DefaultCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ - _defStopTime = _sys->getMillis() + 100; - _defLoops = 0; - return; -} - -void DefaultCDPlayer::play(int track, int num_loops, int start_frame, int duration) { - if (!num_loops && !start_frame) - return; - - UInt32 fullLength; - - _defLoops = num_loops; - start_frame = TO_MSECS(start_frame); - duration = TO_MSECS(duration); - - // frame in milli-seconds - _defStopTime = 0; - fullLength = start_frame + gVars->CD.defaultTrackLength * 1000; - - if (duration > 0) { - _defTrackLength = duration; - } else if (start_frame > 0) { - _defTrackLength = fullLength; - _defTrackLength -= start_frame; - } else { - _defTrackLength = fullLength; - } - - // try to play the track - _defTrackEndFrame = _sys->getMillis() + _defTrackLength; -} diff --git a/backends/PalmOS/Src/cd_default.h b/backends/PalmOS/Src/cd_default.h deleted file mode 100644 index 9dac0d7c16..0000000000 --- a/backends/PalmOS/Src/cd_default.h +++ /dev/null @@ -1,49 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - #ifndef CD_DEFAULT_H - #define CD_DEFAULT_H - - #include "cdaudio.h" - - class DefaultCDPlayer : public CDAudio { - public: - DefaultCDPlayer(OSystem *sys); - - bool init(); - void release(); - - bool poll(); - void update(); - void play(int track, int num_loops, int start_frame, int duration); - void stop(); - - private: - OSystem *_sys; - - // cdrom - UInt16 _defLoops; - UInt32 _defStopTime, _defTrackEndFrame, _defTrackLength; - }; - - #endif diff --git a/backends/PalmOS/Src/cd_msa.cpp b/backends/PalmOS/Src/cd_msa.cpp deleted file mode 100644 index 553551ce7f..0000000000 --- a/backends/PalmOS/Src/cd_msa.cpp +++ /dev/null @@ -1,260 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ -#include -#include "common/stdafx.h" -#include "common/system.h" -#include "cd_msa.h" -#include "start.h" // for appFileCreat - -static void doErr(Err e, const Char *msg) { - Char err[100]; - StrPrintF(err, "%ld : " , e); - StrCat(err,msg); - FrmCustomAlert(1000,err,0,0); -} - -MsaCDPlayer::MsaCDPlayer(OSystem *sys) { - _sys = sys; - _msaRefNum = sysInvalidRefNum; - - _msaLoops = 0; - _msaStopTime = 0; - _msaTrackEndSu = 0; -} - -bool MsaCDPlayer::init() { - SonySysFtrSysInfoP sonySysFtrSysInfoP; - Err error = errNone; - - if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { - // not found with audio adapter ?! - //if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrMsa) { - if ((error = SysLibFind(sonySysLibNameMsa, &_msaRefNum))) - if (error == sysErrLibNotFound) - error = SysLibLoad(sonySysFileTMsaLib, sonySysFileCMsaLib, &_msaRefNum); - - // FIXME : still don't understand how this lib works, it seems to be very unstable - // and with the very bad documentation provided by Sony it's difficult to find out why - // this doesn't work the same way on build-in MP3 device and external MP3 devices - if (!error) { - //MsaLibClose(_msaRefNum, msaLibOpenModeAlbum); // close the lib if we previously let it open (?) Need to add Notify for sonySysNotifyMsaEnforceOpenEvent just in case ... - error = MsaLibOpen(_msaRefNum, msaLibOpenModeAlbum); - - //if (error == msaErrAlreadyOpen) - // error = MsaLibEnforceOpen(_msaRefNum, msaLibOpenModeAlbum, appFileCreator); - - //error = (error != msaErrStillOpen) ? error : errNone; - } - //} - } - -// if (error) -// _msaRefNum = sysInvalidRefNum; - - _isInitialized = (_msaRefNum != sysInvalidRefNum); - initInternal(); - return _isInitialized; -} - -void MsaCDPlayer::initInternal() { - if (!_isInitialized) - return; - - Err e; - Char nameP[256]; - UInt32 dummy, albumIterater = albumIteratorStart; - - MemSet(&_msaAlbum, sizeof(_msaAlbum), 0); - _msaAlbum.maskflag = msa_INF_ALBUM; - _msaAlbum.code = msa_LANG_CODE_ASCII; - _msaAlbum.nameP = nameP; - _msaAlbum.fileNameLength = 256; - - e = MsaAlbumEnumerate(_msaRefNum, &albumIterater, &_msaAlbum); - e = MsaSetAlbum(_msaRefNum, _msaAlbum.albumRefNum, &dummy); - - // TODO : use RMC to control volume - MsaOutCapabilityType capability; - MsaOutGetCapability(_msaRefNum, &capability); - _volumeLLimit = capability.volumeLLimit; - _volumeRLimit = capability.volumeRLimit; -} - -void MsaCDPlayer::setVolume(int volume) { - _volumeLevel = volume; - MsaOutSetVolume(_msaRefNum, (_volumeLLimit * volume) / 100, (_volumeRLimit * volume) / 100); -} - -void MsaCDPlayer::release() { - if (_isInitialized) { - if (_msaRefNum != sysInvalidRefNum) { - // stop the current track if any (needed if we use enforce open to prevent the track to play after exit) - MsaStop(_msaRefNum, true); - MsaLibClose(_msaRefNum, msaLibOpenModeAlbum); - } - } - - // self delete - delete this; -} - -bool MsaCDPlayer::poll() { - if (!_isInitialized) - return false; - - MsaPBStatus pb; - MsaGetPBStatus(_msaRefNum, &pb); - return (_msaLoops != 0 && (pb.currentSU < _msaTrackEndSu || pb.status != msa_STOPSTATUS)); -} - -void MsaCDPlayer::update() { - if (!_isInitialized) - return; - - // get playback status - MsaPBStatus pb; - MsaGetPBStatus(_msaRefNum, &pb); - - // stop replay upon request of stopCD() - if (_msaStopTime != 0 && _sys->getMillis() >= _msaStopTime) { - MsaStop(_msaRefNum, true); - _msaLoops = 0; - _msaStopTime = 0; - _msaTrackEndSu = 0; - return; - } - - // not fully played nad still playing the correct track - // (when playing a full track the return SU is not correct - // and so we need to check if we are still playing the correct track) - if (pb.currentSU < _msaTrackEndSu) { - UInt16 trackNo; - MsaPBListIndexToTrackNo(_msaRefNum, pb.currentpblistindex, &trackNo); - if (trackNo == _msaTrack) - return; - } - - MsaStop(_msaRefNum, true); - - if (_msaLoops == 0) - return; - - // track ends and last play, force stop if still playing -/* if (_msaLoops != 1 && pb.status != msa_STOPSTATUS) { - MsaStop(_msaRefNum, true); - return; - } -*/ - // loop again ? - if (_msaLoops > 0) - _msaLoops--; - - // loop if needed - if (_msaLoops != 0) { - if (_msaStartFrame == 0 && _msaDuration == 0) - MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); - else - MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP); - } -} - -void MsaCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ - if (!_isInitialized) - return; - - _msaStopTime = _sys->getMillis() + 100; - _msaLoops = 0; - return; -} - -void MsaCDPlayer::play(int track, int num_loops, int start_frame, int duration) { - if (!_isInitialized) - return; - - if (!num_loops && !start_frame) - return; - - _msaTrack = track + gVars->CD.firstTrack - 1; // first track >= 1 ?, not 0 (0=album) - _msaLoops = num_loops; - _msaStartFrame = TO_MSECS(start_frame); - _msaDuration = TO_MSECS(duration); - - Err e; - MemHandle trackH; - - // stop current play if any - MsaStop(_msaRefNum, true); - _msaStopTime = 0; - - // retreive track infos - e = MsaGetTrackInfo(_msaRefNum, _msaTrack, 0, msa_LANG_CODE_ASCII, &trackH); - - // track exists - if (!e && trackH) { - MsaTime msaTime; - MsaTrackInfo *trackP; - UInt32 SU, fullLength; - - // FIXME (?) : this enable MsaSuToTime to return the right value in some cases - MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); - MsaStop(_msaRefNum, true); - - // get the msa time - trackP = (MsaTrackInfo *)MemHandleLock(trackH); - MsaSuToTime(_msaRefNum, trackP->totalsu, &msaTime); - SU = trackP->totalsu; - MemPtrUnlock(trackP); - MemHandleFree(trackH); - - // MSA frame in milli-seconds - fullLength = FROM_MIN(msaTime.minute); - fullLength += FROM_SEC(msaTime.second); - fullLength += msaTime.frame; - - if (_msaDuration > 0) { - _msaTrackLength = _msaDuration; - } else if (_msaStartFrame > 0) { - _msaTrackLength = fullLength; - _msaTrackLength -= _msaStartFrame; - } else { - _msaTrackLength = fullLength; - } - - // try to play the track - if (start_frame == 0 && duration == 0) { - MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); - _msaTrackEndSu = SU; - } else { - // FIXME : MsaTimeToSu doesn't work ... (may work with previous FIXME) - _msaTrackStartSu = (UInt32) ((float)(_msaStartFrame) / ((float)fullLength / (float)SU)); - _msaTrackEndSu = (UInt32) ((float)(_msaTrackLength) / ((float)fullLength / (float)SU)); - _msaTrackEndSu += _msaTrackStartSu; - - if (_msaTrackEndSu > SU) - _msaTrackEndSu = SU; - - MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP); - } - } - // TODO : use default track length if track not found -} diff --git a/backends/PalmOS/Src/cd_msa.h b/backends/PalmOS/Src/cd_msa.h deleted file mode 100644 index 44dbc6672b..0000000000 --- a/backends/PalmOS/Src/cd_msa.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef CD_MSA_H -#define CD_MSA_H - -#include "cdaudio.h" - -class MsaCDPlayer : public CDAudio { -public: - MsaCDPlayer(OSystem *sys); - - bool init(); - void release(); - - bool poll(); - void update(); - void play(int track, int num_loops, int start_frame, int duration); - void stop(); - - void setVolume(int volume); - - private: - void initInternal(); - - OSystem *_sys; - UInt16 _msaRefNum; - - UInt32 _volumeLLimit; - UInt32 _volumeRLimit; - - // cdrom - AlbumInfoType _msaAlbum; - UInt16 _msaLoops; - - UInt32 _msaStopTime; - - UInt32 _msaStartFrame; - UInt32 _msaDuration; - - UInt16 _msaTrack; - UInt32 _msaTrackStartSu, _msaTrackEndSu; - UInt32 _msaTrackLength; -}; - -#endif diff --git a/backends/PalmOS/Src/cd_pockettunes.cpp b/backends/PalmOS/Src/cd_pockettunes.cpp deleted file mode 100644 index 75574b9802..0000000000 --- a/backends/PalmOS/Src/cd_pockettunes.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ -#include "common/stdafx.h" -#include "common/system.h" -#include "common/config-manager.h" - -#include "cd_pockettunes.h" - -PckTunesCDPlayer::PckTunesCDPlayer(OSystem *sys) { - _sys = sys; - StrCopy(gameP, ConfMan.getActiveDomainName().c_str()); -} - -bool PckTunesCDPlayer::init() { - PocketTunesStart(); - _isInitialized = PocketTunesIsRunning(); - _isPlaying = false; - _pAction = NULL; - - if (_isInitialized) { - _pAction = (PocketTunesAction*)MemPtrNew(sizeof(PocketTunesAction)); - _volumeLimit = getVolumeLimit(); - } - - _isInitialized = (_isInitialized && _pAction); - return _isInitialized; -} - -void PckTunesCDPlayer::release() { - PocketTunesStop(); - if (_pAction) - MemPtrFree(_pAction); - - // self delete - delete this; -} - -UInt32 PckTunesCDPlayer::getVolumeLimit() { - UInt32 value = 0; - - if (!_pAction) - return value; - - _pAction->action = kPocketTunesActionGetValue; - _pAction->data.getValueAction.which = kPtunesValueMaxVolume; - - EvtGetEvent(&_eAction, evtNoWait); - if (PocketTunesCallSynch(_pAction) == errNone) - value = _pAction->data.getValueAction.value; - - return value; -} - -UInt32 PckTunesCDPlayer::getStatus() { - UInt32 status = kPtunesStopped; - - if (!_isPlaying || !_pAction) - return status; - - _pAction->action = kPocketTunesActionGetStatus; - - EvtGetEvent(&_eAction, evtNoWait); - if (PocketTunesCallSynch(_pAction) == errNone) - status = _pAction->data.getStatusAction.status; - - return status; -} - -UInt32 PckTunesCDPlayer::getPosition(UInt32 deflt) { - UInt32 value = deflt; - - if (!_isPlaying || !_pAction) - return value; - - _pAction->action = kPocketTunesActionGetValue; - _pAction->data.getValueAction.which = kPtunesValueSongPosition; - - EvtGetEvent(&_eAction, evtNoWait); - if (PocketTunesCallSynch(_pAction) == errNone) - value = _pAction->data.getValueAction.value; - - return value; -} - -UInt32 PckTunesCDPlayer::getDuration() { - UInt32 value = gVars->CD.defaultTrackLength; - - if (!_isPlaying || !_pAction) - return value; - - _pAction->action = kPocketTunesActionGetValue; - _pAction->data.getValueAction.which = kPtunesValueSongDuration; - - EvtGetEvent(&_eAction, evtNoWait); - if (PocketTunesCallSynch(_pAction) == errNone) - value = _pAction->data.getValueAction.value; - - return value; -} - -void PckTunesCDPlayer::setPosition(UInt32 value) { - if (!_isPlaying) - return; - - PocketTunesAction *pAction = AllocateAsynchronousActionStruct(); - if (!pAction) - return; - - pAction->action = kPocketTunesActionSetValue; - pAction->data.getValueAction.which = kPtunesValueSongPosition; - pAction->data.getValueAction.value = value; - - EvtGetEvent(&_eAction, evtNoWait); - PocketTunesCall(pAction); -} - -void PckTunesCDPlayer::setVolume(int volume) { - _volumeLevel = volume; - - PocketTunesAction *pAction = AllocateAsynchronousActionStruct(); - if (!pAction) - return; - - pAction->action = kPocketTunesActionSetValue; - pAction->data.getValueAction.which = kPtunesValueVolume; - pAction->data.getValueAction.value = (_volumeLimit * volume) / 100; - - EvtGetEvent(&_eAction, evtNoWait); - PocketTunesCall(pAction); -} - -bool PckTunesCDPlayer::poll() { - return (_pckLoops != 0 && (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame || getStatus() != kPtunesStopped)); -} - -void PckTunesCDPlayer::update() { - - // stop replay upon request of stopCD() - if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) { - PocketTunesStop(); - _pckLoops = 0; - _pckStopTime = 0; - _pckTrackEndFrame = 0; - return; - } - - // not fully played - if (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame && getStatus() != kPtunesStopped) - return; - - PocketTunesStop(); - - if (_pckLoops == 0) - return; - - // loop again ? - if (_pckLoops > 0) - _pckLoops--; - - // loop if needed - if (_pckLoops != 0 && _isPlaying) { - if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { - setPosition(0); - } else { - setPosition(_pckTrackStartFrame); - } - - PocketTunesPlay(); - } -} - -void PckTunesCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ - _pckStopTime = _sys->getMillis() + 100; - _pckLoops = 0; - return; -} - -void PckTunesCDPlayer::play(int track, int num_loops, int start_frame, int duration) { - if (!num_loops && !start_frame) - return; - - EventType e; - Char nameP[256], fileP[100]; - static const Char *ext[] = { "mp3", "ogg" }; - - _pckTrack = track; - _pckLoops = num_loops; - _pckTrackStartFrame = TO_MSECS(start_frame); - _pckTrackDuration = TO_MSECS(duration); - - VFSVolumeGetLabel(gVars->VFS.volRefNum, nameP, 256); - - StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]); - - if (PocketTunesOpenFile(nameP, fileP, 0) == errNone) { - EvtGetEvent(&e, evtNoWait); - PocketTunesPauseIfPlaying(); - _isPlaying = true; - - if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { - _pckTrackDuration = getDuration(); - } else { - setPosition(_pckTrackStartFrame); - if (_pckTrackDuration == 0) - _pckTrackDuration = getDuration() - _pckTrackStartFrame; - } - - PocketTunesPlay(); - - } else { - _isPlaying = false; - _pckTrackDuration = gVars->CD.defaultTrackLength * 1000; - } - - _pckStopTime = 0; - _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration; -} diff --git a/backends/PalmOS/Src/cd_pockettunes.h b/backends/PalmOS/Src/cd_pockettunes.h deleted file mode 100644 index 81493d87ad..0000000000 --- a/backends/PalmOS/Src/cd_pockettunes.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - #ifndef CD_POCKETTUNES_H - #define CD_POCKETTUNES_H - - #include "cdaudio.h" - #include "pockettunes.h" - - class PckTunesCDPlayer : public CDAudio { - public: - PckTunesCDPlayer(OSystem *sys); - - bool init(); - void release(); - - bool poll(); - void update(); - void play(int track, int num_loops, int start_frame, int duration); - void stop(); - - void setVolume(int volume); - - private: - OSystem *_sys; - Char gameP[15]; - - PocketTunesAction *_pAction; // prevent memory fragmentation - EventType _eAction; - - UInt32 getStatus(); - void setPosition(UInt32 value); - UInt32 getDuration(); - UInt32 getPosition(UInt32 deft); - - UInt32 _volumeLimit; - UInt32 getVolumeLimit(); - - Boolean _isPlaying; - // cdrom - UInt16 _pckLoops, _pckTrack; - UInt32 _pckTrackStartFrame, _pckTrackEndFrame; - UInt32 _pckStopTime, _pckTrackDuration; - }; - - #endif - diff --git a/backends/PalmOS/Src/cdaudio.h b/backends/PalmOS/Src/cdaudio.h deleted file mode 100644 index 1c1d42e7e9..0000000000 --- a/backends/PalmOS/Src/cdaudio.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef CDAUDIO_H -#define CDAUDIO_H - -#include "common/system.h" - -// CD frames are 1/75 sec -#define CD_FPS 75 -#define TO_MSECS(frame) ((UInt32)((frame) * 1000 / CD_FPS)) - -// consider frame at 1/1000 sec -#define FROM_MIN(mins) ((UInt32)((mins) * 60 * 1000)) -#define FROM_SEC(secs) ((UInt32)((secs) * 1000)) - -class CDAudio { -public: - CDAudio() { - _isInitialized = false; - _volumeLevel = 100; - }; - - virtual bool init() = 0; - virtual void release() = 0; - - // OSystem functions - virtual bool poll() = 0; - virtual void play(int track, int num_loops, int start_frame, int duration) = 0; - virtual void stop() = 0; - virtual void update() = 0; - - // volume in percent - virtual void setVolume(int volume) { _volumeLevel = volume; } - virtual int getVolume() const { return _volumeLevel; } - - virtual void upVolume(int value) {}; - virtual void downVolume(int value) {}; - -protected: - int _volumeLevel; - bool _isInitialized; -}; - -#endif diff --git a/backends/PalmOS/Src/extend.cpp b/backends/PalmOS/Src/extend.cpp deleted file mode 100644 index 297eb28c16..0000000000 --- a/backends/PalmOS/Src/extend.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include "globals.h" - -#include "modulesrsc.h" - -const Char *SCUMMVM_SAVEPATH = "/PALM/Programs/ScummVM/Saved"; - -void PalmFatalError(const Char *err) { - WinSetDrawWindow(WinGetDisplayWindow()); - WinPalette(winPaletteSetToDefault,0,0,0); - WinSetBackColor(0); - WinEraseWindow(); - FrmCustomAlert(FrmFatalErrorAlert, err, 0,0); -} - -void DrawStatus(Boolean show) { - if (OPTIONS_TST(kOptDisableOnScrDisp)) - return; - - UInt8 x,y; - UInt32 depth, d1; - Boolean d2; - WinScreenMode(winScreenModeGet, &d1, &d1, &depth, &d2); - Int16 color = (show ? gVars->indicator.on : gVars->indicator.off); - - if (depth == 8) { - UInt8 *src = (UInt8 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow())); - src += gVars->screenPitch + 1; - for(y=0; y < 4; y++) { - for(x=0; x < 4; x++) - src[x] = color; - - src += gVars->screenPitch; - } - - } else if (depth == 16) { - Int16 *src = (Int16 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow())); - src += gVars->screenPitch + 1; - for(y=0; y < 4; y++) { - for(x=0; x < 4; x++) - src[x] = color; - - src += gVars->screenPitch; - } - } -} - -#ifndef PALMOS_ARM - -// This is now required since some classes are now very big :) -#include "MemGlue.h" -void *operator new(UInt32 size) { - void *ptr = MemGluePtrNew(size); - MemSet(ptr, 0, size); - return ptr; -} - -void *operator new [] (UInt32 size) { - void *ptr = MemGluePtrNew(size); - MemSet(ptr, 0, size); - return ptr; -} -#elif defined(COMPILE_OS5) - -__inline void *operator new(UInt32 size) { - void *ptr = malloc(size); - MemSet(ptr, 0, size); - return ptr; -} - -__inline void *operator new [] (UInt32 size) { - void *ptr = malloc(size); - MemSet(ptr, 0, size); - return ptr; -} - -__inline void operator delete(void *ptr) throw() { - if (ptr) free(ptr); -} - -__inline void operator delete[](void *ptr) throw() { - if (ptr) free(ptr); -} -#endif diff --git a/backends/PalmOS/Src/extend.h b/backends/PalmOS/Src/extend.h deleted file mode 100644 index c5c74852a2..0000000000 --- a/backends/PalmOS/Src/extend.h +++ /dev/null @@ -1,34 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef EXTEND_H -#define EXTEND_H - -extern const Char *SCUMMVM_SAVEPATH; - -int main(int argc, char **argv); -void PalmFatalError(const Char *err); -void DrawStatus(Boolean show); - -#endif diff --git a/backends/PalmOS/Src/features.h b/backends/PalmOS/Src/features.h deleted file mode 100644 index f82c7692fa..0000000000 --- a/backends/PalmOS/Src/features.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __FEATURES_H__ -#define __FEATURES_H__ - -enum { - ftrBufferOverlay = 1000, - ftrBufferBackup, - ftrBufferHotSwap -}; - -#define FREE_FTR(num) \ - { \ - UInt32 ptr; \ - FtrGet(appFileCreator, num, &ptr); \ - if (ptr) FtrPtrFree(appFileCreator, num); \ - } - -#endif diff --git a/backends/PalmOS/Src/globals.h b/backends/PalmOS/Src/globals.h deleted file mode 100644 index 07034aeb02..0000000000 --- a/backends/PalmOS/Src/globals.h +++ /dev/null @@ -1,142 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef GLOBALS_H -#define GLOBALS_H - -#include -#include "stuffs.h" - -#ifdef PALMOS_68K - -#include "scumm_globals.h" - -enum { - kMemScummOldCostGames = 0, - kMemScummNewCostGames, - kMemSimon1Games, - kMemSimon2Games, - - kMemGamesCount -}; - -#endif - -enum { - INIT_VIBRATOR = 1 << 0x00, - INIT_PA1LIB = 1 << 0x01, - INIT_ARM = 1 << 0x02, - INIT_AUTOOFF = 1 << 0x03, - INIT_GOLCD = 1 << 0x04 -}; - -enum { - FM_QUALITY_LOW = 0, - FM_QUALITY_MED, - FM_QUALITY_HI, - FM_QUALITY_INI -}; - -typedef struct { - // common parts - UInt32 _4B, _2B; - - // 4 bytes part - UInt32 startupMemory; - UInt32 slkVersion; - UInt32 options; - UInt32 screenPitch; - - struct { - FileRef logFile; - UInt32 cacheSize; - UInt16 volRefNum; - UInt16 dummy; - } VFS; - - // 2 bytes part - UInt16 HRrefNum; - UInt16 slkRefNum; - Coord screenWidth, screenHeight; // silkarea shown - Coord screenFullWidth, screenFullHeight; // silkarea hidden - Int16 autoSave; - struct { - Int16 on; - Int16 off; - Int16 showLED; - } indicator; - - // 1 byte part - Boolean vibrator; - Boolean stdPalette; - Boolean filter; - Boolean stylusClick; - Boolean arrowKeys; - UInt8 init; - UInt8 palmVolume; - UInt8 fmQuality; - UInt8 advancedMode; - -#ifdef PALMOS_68K - // 68k only part - struct { - Boolean enable; - UInt8 driver, format; - UInt16 defaultTrackLength; - UInt16 firstTrack; - UInt8 volume; - } CD; - - DmOpenRef globals[GBVARS_COUNT]; - UInt32 memory[kMemGamesCount]; -#endif - -} GlobalsDataType, *GlobalsDataPtr; - -extern GlobalsDataPtr gVars; - -#define VARS_EXPORT() gVars->_4B = 6; \ - gVars->_2B = 12; - -#define DO_VARS(z, t, o) \ - { Int8 *tmp = (Int8 *)gVars + o + 8; \ - for (Int8 cnt = 0; cnt < gVars->z; cnt++) \ - { UInt##t val = *((UInt##t *)tmp); \ - val = ByteSwap##t(val); \ - *((UInt##t *)tmp) = val; \ - tmp += (t / 8); \ - } \ - } - -#define OPTIONS_DEF() gVars->options - -#define HWR_INIT(x) (gVars->init & (x)) -#define HWR_SET(x) gVars->init |= (x) -#define HWR_RST(x) gVars->init &= ~(x) -#define HWR_RSTALL() gVars->init = 0 -#define HWR_GET() (gVars->init) - -#define ARM(x) gVars->arm[x] - -#endif diff --git a/backends/PalmOS/Src/i_zodiac.cpp b/backends/PalmOS/Src/i_zodiac.cpp deleted file mode 100644 index 20b06aa61f..0000000000 --- a/backends/PalmOS/Src/i_zodiac.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include "extend.h" - -#ifndef DISABLE_TAPWAVE - -#include "tapwave.h" -#include "i_zodiac.h" - -// _twBmpV3 = offscreen bitmap, must be set before this call -Err ZodiacInit(void **ptrP, Int32 w, Int32 h) { - Err e; - - TwGfxSurfaceInfoType surface = { - sizeof(TwGfxSurfaceInfoType), - w, h, w * 2, - twGfxLocationAcceleratorMemory, - twGfxPixelFormatRGB565_LE - }; - - e = SysSetOrientation(sysOrientationLandscape); - e = TwGfxOpen((TwGfxType **)&_twGfxLib, NULL); - e = TwGfxAllocSurface( (TwGfxType *)_twGfxLib, - (TwGfxSurfaceType **)&_twSrc, - &surface); - - e = TwGfxGetPalmDisplaySurface( (TwGfxType *)_twGfxLib, - (TwGfxSurfaceType **)&_twDst); - - return e; -} - -Err ZodiacRelease(void **ptrP) { - Err e = errNone; - - TwGfxFreeSurface((TwGfxSurfaceType *)_twSrc); - TwGfxClose((TwGfxType *)_twGfxLib); - - return e; -} - -#endif diff --git a/backends/PalmOS/Src/i_zodiac.h b/backends/PalmOS/Src/i_zodiac.h deleted file mode 100644 index 96a373a22e..0000000000 --- a/backends/PalmOS/Src/i_zodiac.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _I_ZODIAC_H_ -#define _I_ZODIAC_H_ - -#define _twGfxLib ptrP[0] -#define _twSrc ptrP[1] -#define _twDst ptrP[2] -#define _twBmpV3 ptrP[3] - -Err ZodiacInit(void **ptrP, Int32 w, Int32 h); -Err ZodiacRelease(void **ptrP); - -#endif diff --git a/backends/PalmOS/Src/init_golcd.cpp b/backends/PalmOS/Src/init_golcd.cpp deleted file mode 100644 index 63cc98e0ab..0000000000 --- a/backends/PalmOS/Src/init_golcd.cpp +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include - -#include "init_golcd.h" - -// you can use this handle directly -MemHandle gGoLcdH; - -Err GoLCDInit(MemHandle *goLcdH) { - if (!goLcdH) - return sysErrParamErr; - - Err e; - UInt16 refNum; - Boolean loaded = false; - *goLcdH = NULL; - - if (e = SysLibFind(goLcdLibName, &refNum)) - loaded = !(e = SysLibLoad(goLcdLibType, goLcdLibCreator, &refNum)); - - if (!e) - if ((e = GoLcdLibOpen(refNum))) - SysLibRemove(refNum); - - if (!e) { - MemHandle lcdH = MemHandleNew(sizeof(GoLCDType)); - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(lcdH); - MemSet(lcdP, MemHandleSize(lcdH), 0); - lcdP->refNum = refNum; - lcdP->timeout = GoLcdGetTimeout(refNum, goLcdPenTapMode); - MemPtrUnlock(lcdP); - *goLcdH = lcdH; - } - - return e; -} - -Err GoLCDRelease(MemHandle goLcdH) { - if (!goLcdH) - return sysErrParamErr; - - Err e; - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - if (lcdP->refNum != sysInvalidRefNum) - if (!(e = GoLcdLibClose(lcdP->refNum))) - e = SysLibRemove(lcdP->refNum); - - MemPtrUnlock(lcdP); - MemHandleFree(goLcdH); - - return e; -} - -Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y) { - Boolean inBounds = false; - - if (!goLcdH) - return inBounds; - - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - inBounds = (lcdP->active && RctPtInRectangle(x, y, &(lcdP->bounds))); - MemPtrUnlock(lcdP); - - return inBounds; -} - -void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP) { - if (!goLcdH) - return; - - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - MemMove(&(lcdP->ink), inkP, sizeof(RGBColorType)); - MemPtrUnlock(lcdP); -} - -void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP) { - if (!goLcdH) - return; - - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - MemMove(&(lcdP->bounds), boundsP, sizeof(RectangleType)); - MemPtrUnlock(lcdP); -} - -void GoLCDActivate(MemHandle goLcdH, Boolean active) { - if (!goLcdH) - return; - - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - - if (active) { - if (!lcdP->active) { - lcdP->active = true; - GoLcdSetInkState(lcdP->refNum, goLcdInkEnabled, goLcdColorOverride, &(lcdP->ink)); - GoLcdSetBounds(lcdP->refNum, &(lcdP->bounds)); - GoLcdSetGsiState(lcdP->refNum, goLcdGsiNormal, goLcdColorDefault, 0); - GoLcdSetTimeout(lcdP->refNum, goLcdPenTapMode, lcdP->timeout); - GoLcdSetStatus(lcdP->refNum, goLcdEnabled); - } - - } else { - lcdP->active = false; - GoLcdSetInkState(lcdP->refNum, goLcdInkDisabled, goLcdColorDefault, 0); - GoLcdSetStatus(lcdP->refNum, goLcdDisabled); - } - - MemPtrUnlock(lcdP); -} - -Boolean GoLCDToggle(MemHandle goLcdH) { - if (!goLcdH) - return; - - Boolean active; - GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); - active = lcdP->active; - MemPtrUnlock(lcdP); - - GoLCDActivate(goLcdH, !active); - return (!active); -} diff --git a/backends/PalmOS/Src/init_golcd.h b/backends/PalmOS/Src/init_golcd.h deleted file mode 100644 index 7750a13a52..0000000000 --- a/backends/PalmOS/Src/init_golcd.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef INIT_GOLCD_H -#define INIT_GOLCD_H - -typedef struct { - Boolean active; - UInt16 refNum; - RectangleType bounds; - RGBColorType ink; - UInt32 timeout; -} GoLCDType; - -extern MemHandle gGoLcdH; - -Err GoLCDInit(MemHandle *goLcdH); -Err GoLCDRelease(MemHandle goLcdH); -void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP); -void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP); -void GoLCDActivate(MemHandle goLcdH, Boolean active); -Boolean GoLCDToggle(MemHandle goLcdH); -Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y); - -#endif diff --git a/backends/PalmOS/Src/init_mathlib.cpp b/backends/PalmOS/Src/init_mathlib.cpp deleted file mode 100644 index 88cf8a21f2..0000000000 --- a/backends/PalmOS/Src/init_mathlib.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#include "globals.h" -#include "init_mathlib.h" -#include "mathlib.h" - -Err MathlibInit() { - Err e; - - if ((e = SysLibFind(MathLibName, &MathLibRef))) - if (e == sysErrLibNotFound) // couldn't find lib - e = SysLibLoad(LibType, MathLibCreator, &MathLibRef); - - if (e) return sysErrLibNotFound; - - e = MathLibOpen(MathLibRef, MathLibVersion); - return e; -} - -void MathlibRelease() { - UInt16 useCount; - - if (MathLibRef != sysInvalidRefNum) { - MathLibClose(MathLibRef, &useCount); - - if (!useCount) - SysLibRemove(MathLibRef); - } -} \ No newline at end of file diff --git a/backends/PalmOS/Src/init_mathlib.h b/backends/PalmOS/Src/init_mathlib.h deleted file mode 100644 index 1901e1330d..0000000000 --- a/backends/PalmOS/Src/init_mathlib.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef INIT_MATHLIB_H -#define INIT_MATHLIB_H - -Err MathlibInit(); -void MathlibRelease(); - -#endif diff --git a/backends/PalmOS/Src/init_pa1lib.cpp b/backends/PalmOS/Src/init_pa1lib.cpp deleted file mode 100644 index d5b0340cae..0000000000 --- a/backends/PalmOS/Src/init_pa1lib.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -#include "pa1lib.h" -#include "init_pa1lib.h" - -void *sndStateOnFuncP = NULL; -void *sndStateOffFuncP = NULL; - -#define SndStateOn(a,b,c) if (sndStateOnFuncP)((sndStateOnType)(sndStateOnFuncP))(a, b, c); -#define SndStateOff(a) if (sndStateOffFuncP)((sndStateOffType)(sndStateOffFuncP))(a); - -void Pa1libInit(UInt16 vol) { - Pa1Lib_Open(); - - // Doesn't work on T4xx and T6xx series ? - FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOnHandlerP, (UInt32*) &sndStateOnFuncP); - FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOffHandlerP, (UInt32*) &sndStateOffFuncP); - - SndStateOn(aOutSndKindSp, vol, vol); - SndStateOn(aOutSndKindHp, vol, vol); - - Pa1Lib_devHpVolume(vol, vol); - Pa1Lib_devSpVolume(vol); -} - -void Pa1libRelease() { - SndStateOff(aOutSndKindSp); - SndStateOff(aOutSndKindHp); - - Pa1Lib_Close(); -} diff --git a/backends/PalmOS/Src/init_pa1lib.h b/backends/PalmOS/Src/init_pa1lib.h deleted file mode 100644 index d5be11d278..0000000000 --- a/backends/PalmOS/Src/init_pa1lib.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef INIT_PA1LIB_H -#define INIT_PA1LIB_H - -// need to move this on a .h file -#define sonySysFileCSystem 'SsYs' /* Sony overall System */ -#define sonySysFtrCreatorSystem sonySysFileCSystem - -#define sonySysFtrNumSystemBase 10000 -#define sonySysFtrNumSystemAOutSndStateOnHandlerP (sonySysFtrNumSystemBase + 4) -#define sonySysFtrNumSystemAOutSndStateOffHandlerP (sonySysFtrNumSystemBase + 5) - -typedef void (*sndStateOnType) (UInt8 /* kind */, UInt8 /* L volume 0-31 */, UInt8 /* R volume 0-31 */); -typedef void (*sndStateOffType) (UInt8 /* kind */); - -/* kind */ -#define aOutSndKindSp (0) /* Speaker volume */ -#define aOutSndKindHp (2) /* HeadPhone volume */ - -void Pa1libInit(UInt16 vol); -void Pa1libRelease(); - -#endif diff --git a/backends/PalmOS/Src/init_palmos.cpp b/backends/PalmOS/Src/init_palmos.cpp deleted file mode 100644 index d789580e7a..0000000000 --- a/backends/PalmOS/Src/init_palmos.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#include "globals.h" -#include "init_palmos.h" - -static UInt16 autoOffDelay; - -void PalmInit(UInt8 init) { - // set screen depth - UInt32 depth = 8; - WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - - if (init & INIT_AUTOOFF) { - autoOffDelay = SysSetAutoOffTime(0); - EvtResetAutoOffTimer(); - } - -} - -void PalmRelease(UInt8 init) { - if (init & INIT_AUTOOFF) { - SysSetAutoOffTime(autoOffDelay); - EvtResetAutoOffTimer(); - } -} - -Err PalmHRInit(UInt32 depth) { - Err e; - UInt32 width = 320; - UInt32 height = 320; - Boolean color = true; - - e = WinScreenMode (winScreenModeSet, &width, &height, &depth, &color); - - if (!e) { - UInt32 attr; - WinScreenGetAttribute(winScreenDensity, &attr); - e = (attr != kDensityDouble); - } - - return e; -} - -void PalmHRRelease() { - // should i do something here ? -} - -UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) { - UInt32 ftr; - UInt8 mode = 0; - - Coord sw = 160; - Coord sh = 160; - - // Hi-Density present ? - if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &ftr)) { - if (ftr >= 4) { - sw = 320; - sh = 320; - } - } - - Coord fw = sw; - Coord fh = sh; - - // if feature set, not set on Garmin iQue3600 ??? - if (!(FtrGet(sysFtrCreator, sysFtrNumInputAreaFlags, &ftr))) { - if (ftr & grfFtrInputAreaFlagCollapsible) { - UInt16 curOrientation = SysGetOrientation(); - - if (curOrientation == sysOrientationLandscape || - curOrientation == sysOrientationReverseLandscape - ) - mode = PALM_LANDSCAPE; - else - mode = PALM_PORTRAIT; - - PINSetInputTriggerState(pinInputTriggerEnabled); - PINSetInputAreaState(pinInputAreaClosed); - StatHide(); - - WinGetDisplayExtent(&fw, &fh); - fw *= 2; - fh *= 2; - - StatShow(); - PINSetInputAreaState(pinInputAreaOpen); - PINSetInputTriggerState(pinInputTriggerDisabled); - } - } - - if (stdw) *stdw = sw; - if (stdh) *stdh = sh; - if (fullw) *fullw = fw; - if (fullh) *fullh = fh; - - return mode; -} - -void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP) { - UInt32 free, max; - - Int16 i; - Int16 nCards; - UInt16 cardNo; - UInt16 heapID; - - UInt32 storageMemory = 0; - UInt32 dynamicMemory = 0; - UInt32 storageFree = 0; - UInt32 dynamicFree = 0; - - // Iterate through each card to support devices with multiple cards. - nCards = MemNumCards(); - - for (cardNo = 0; cardNo < nCards; cardNo++) { - // Iterate through the RAM heaps on a card (excludes ROM). - for (i=0; i< MemNumRAMHeaps(cardNo); i++) { - // Obtain the ID of the heap. - heapID = MemHeapID(cardNo, i); - // Calculate the total memory and free memory of the heap. - MemHeapFreeBytes(heapID, &free, &max); - - // If the heap is dynamic, increment the dynamic memory total. - if (MemHeapDynamic(heapID)) { - dynamicMemory += MemHeapSize(heapID); - dynamicFree += free; - - // The heap is nondynamic (storage ?). - } else { - storageMemory += MemHeapSize(heapID); - storageFree += free; - } - } - } - // Reduce the stats to KB. Round the results. - dynamicMemory = dynamicMemory / 1024L; - storageMemory = storageMemory / 1024L; - - dynamicFree = dynamicFree / 1024L; - storageFree = storageFree / 1024L; - - if (dynamicMemoryP) *dynamicMemoryP = dynamicMemory; - if (storageMemoryP) *storageMemoryP = storageMemory; - if (dynamicFreeP) *dynamicFreeP = dynamicFree; - if (storageFreeP) *storageFreeP = storageFree; -} diff --git a/backends/PalmOS/Src/init_palmos.h b/backends/PalmOS/Src/init_palmos.h deleted file mode 100644 index a979f02cd3..0000000000 --- a/backends/PalmOS/Src/init_palmos.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef INIT_PALMOS_H -#define INIT_PALMOS_H - -#define PALM_PORTRAIT 1 -#define PALM_LANDSCAPE 2 - -void PalmInit(UInt8 init); -void PalmRelease(UInt8 init); - -Err PalmHRInit(UInt32 depth); -void PalmHRRelease(); - - -UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh); -void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP); - -#endif \ No newline at end of file diff --git a/backends/PalmOS/Src/init_sony.cpp b/backends/PalmOS/Src/init_sony.cpp deleted file mode 100644 index 3ba4e8b8d0..0000000000 --- a/backends/PalmOS/Src/init_sony.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include "init_sony.h" - -UInt16 SilkInit(UInt32 *retVersion) { - SonySysFtrSysInfoP sonySysFtrSysInfoP; - UInt32 version; - UInt16 slkRefNum; - Err e; - - // Sony HiRes+ - if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { - if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrSilk) { - - if ((e = SysLibFind(sonySysLibNameSilk, &slkRefNum))) - if (e == sysErrLibNotFound) - e = SysLibLoad(sonySysFileTSilkLib, sonySysFileCSilkLib, &slkRefNum); - - if (!e) { - e = FtrGet(sonySysFtrCreator, sonySysFtrNumVskVersion, &version); - if (e) { - // v1 = NR - e = SilkLibOpen(slkRefNum); - if(!e) version = vskVersionNum1; - - } else { - // v2 = NX/NZ - // v3 = UX... - e = VskOpen(slkRefNum); - } - } - } else - e = sysErrLibNotFound; - } - - if (e) { - version = 0; - slkRefNum = sysInvalidRefNum; - } - - *retVersion = version; - return slkRefNum; -} - -void SilkRelease(UInt16 slkRefNum) { - if (slkRefNum != sysInvalidRefNum) - SilkLibClose(slkRefNum); -} - -UInt16 SonyHRInit(UInt32 depth) { - SonySysFtrSysInfoP sonySysFtrSysInfoP; - Err e; - UInt16 HRrefNum; - - // test if sonyHR is present - if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { - if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrHR) { // HR available - - if ((e = SysLibFind(sonySysLibNameHR, &HRrefNum))) - if (e == sysErrLibNotFound) // can't find lib - e = SysLibLoad( 'libr', sonySysFileCHRLib, &HRrefNum); - - // Now we can use HR lib. Executes Open library. - if (!e) e = HROpen(HRrefNum); - } - } - - if (e) HRrefNum = sysInvalidRefNum; - - if (HRrefNum != sysInvalidRefNum) { - UInt32 width = hrWidth; - UInt32 height = hrHeight; - Boolean color = true; - - e = HRWinScreenMode(HRrefNum, winScreenModeSet, &width, &height, &depth, &color); - // error ? release and return an invalid reference number - if (e) { - SonyHRRelease(HRrefNum); - HRrefNum = sysInvalidRefNum; - } - } - - return HRrefNum; -} - -void SonyHRRelease(UInt16 HRrefNum) { - if (HRrefNum != sysInvalidRefNum) { - HRClose(HRrefNum); - //SysLibRemove(HRrefNum); // never call this !! - } -} - -UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) { - UInt32 version; - UInt16 slkRefNum; - UInt8 mode = 0; - - Coord sw = 160; - Coord sh = 160; - Coord fw = sw; - Coord fh = sh; - - if (HRrefNum != sysInvalidRefNum) { - sw = hrWidth; - sh = hrHeight; - fw = sw; - fh = sh; - - slkRefNum = SilkInit(&version); - - if (slkRefNum != sysInvalidRefNum) { - if (version == vskVersionNum1) { - SilkLibEnableResize(slkRefNum); - SilkLibResizeDispWin(slkRefNum, silkResizeMax); - HRWinGetWindowExtent(HRrefNum, &fw, &fh); - SilkLibResizeDispWin(slkRefNum, silkResizeNormal); - SilkLibDisableResize(slkRefNum); - mode = SONY_PORTRAIT; - - } else { - VskSetState(slkRefNum, vskStateEnable, (version == vskVersionNum2 ? vskResizeVertically : vskResizeHorizontally)); - VskSetState(slkRefNum, vskStateResize, vskResizeNone); - HRWinGetWindowExtent(HRrefNum, &fw, &fh); - VskSetState(slkRefNum, vskStateResize, vskResizeMax); - VskSetState(slkRefNum, vskStateEnable, vskResizeDisable); - mode = (version == vskVersionNum3 ? SONY_LANDSCAPE : SONY_PORTRAIT); - } - SilkRelease(slkRefNum); - } - } - - *stdw = sw; - *stdh = sh; - *fullw = fw; - *fullh = fh; - - return mode; -} diff --git a/backends/PalmOS/Src/init_sony.h b/backends/PalmOS/Src/init_sony.h deleted file mode 100644 index ed783cc9ff..0000000000 --- a/backends/PalmOS/Src/init_sony.h +++ /dev/null @@ -1,39 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef INIT_SONY_H -#define INIT_SONY_H - -#define SONY_PORTRAIT 1 -#define SONY_LANDSCAPE 2 - -UInt16 SilkInit(UInt32 *retVersion); -void SilkRelease(UInt16 slkRefNum); - -UInt16 SonyHRInit(UInt32 depth); -void SonyHRRelease(UInt16 HRrefNum); - -UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh); - -#endif \ No newline at end of file diff --git a/backends/PalmOS/Src/init_stuffs.cpp b/backends/PalmOS/Src/init_stuffs.cpp deleted file mode 100644 index 3b2ab9c869..0000000000 --- a/backends/PalmOS/Src/init_stuffs.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "globals.h" // for OPTIONS_DEF() -#include "init_stuffs.h" -#include "stuffs.h" - -#ifndef DISABLE_TAPWAVE -#define __TWKEYS_H__ // bad hack -#include "tapwave.h" -#endif - -#ifndef DISABLE_PA1LIB -#include "Pa1Lib.h" -#endif - -#ifndef DISABLE_LIGHTSPEED -#include "lightspeed_public.h" -#endif - -// TODO : check the depth to set correct value -// works only for 8bit for now -UInt32 StuffsGetPitch(Coord fullw) { - UInt32 pitch = 0; - - if (OPTIONS_TST(kOptModeHiDensity)) { - WinScreenGetAttribute(winScreenRowBytes, &pitch); - - // FIXME : hack for TT3 simulator (and real ?) return 28 on landscape mode - if (pitch < fullw) - pitch = fullw; - - } else { - pitch = fullw; - } - - return pitch; -} - -void *StuffsForceVG() { - // create an empty form to force the VG to be shown - FormType *frmP = FrmNewForm(4567, NULL, 0,0,0,0, false, 0, 0, 0); - FrmDrawForm(frmP); - return frmP; -} - -void StuffsReleaseVG(void *vg) { - FrmDeleteForm((FormPtr)vg); -} - -void StuffsGetFeatures() { - UInt32 ulProcessorType, manufacturer, version, depth; - Boolean color; - -#ifndef DISABLE_TAPWAVE - // Tapwave Zodiac libs ? - if (!FtrGet(sysFileCSystem, sysFtrNumOEMCompanyID, &manufacturer)) - if (manufacturer == twCreatorID) { - OPTIONS_SET(kOptDeviceZodiac); - OPTIONS_SET(kOpt5WayNavigatorV2); - } -#endif - - // Hi-Density present ? - if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version)) - if (version >= 4) - OPTIONS_SET(kOptModeHiDensity); - - // OS5 ? - if (!FtrGet(sysFtrCreator, sysFtrNumROMVersion, &version)) - if (version >= kOS5Version) - OPTIONS_SET(kOptDeviceOS5); - - // ARM ? - if (!FtrGet(sysFileCSystem, sysFtrNumProcessorID, &ulProcessorType)) - if (sysFtrNumProcessorIsARM(ulProcessorType)) - OPTIONS_SET(kOptDeviceARM); - else if (ulProcessorType == sysFtrNumProcessorx86) - OPTIONS_SET(kOptDeviceProcX86); - - // 5Way Navigator - if (!FtrGet(hsFtrCreator, hsFtrIDNavigationSupported, &version)) { - if (version >= 2) - OPTIONS_SET(kOpt5WayNavigatorV2); - - } else if (!FtrGet(sysFtrCreator, sysFtrNumFiveWayNavVersion, &version)) { - if (version >= 2) - OPTIONS_SET(kOpt5WayNavigatorV2); - else - OPTIONS_SET(kOpt5WayNavigatorV1); - - } else if (!FtrGet(navFtrCreator, navFtrVersion, &version)) { - if (version >= 2) - OPTIONS_SET(kOpt5WayNavigatorV2); - else - OPTIONS_SET(kOpt5WayNavigatorV1); - } - - // Palm Sound API ? - if (!FtrGet(sysFileCSoundMgr, sndFtrIDVersion, &version)) - if (version >= 1) - OPTIONS_SET(kOptPalmSoundAPI); - -#ifndef DISABLE_PA1LIB - // Sony Pa1 Sound API - if (Pa1Lib_Open()) { - OPTIONS_SET(kOptSonyPa1LibAPI); - Pa1Lib_Close(); - } -#endif - - // GoLCD - if (!FtrGet(goLcdLibCreator, goLcdLibFtrNum, &version)) - OPTIONS_SET(kOptGoLcdAPI); - -#ifndef DISABLE_LIGHTSPEED - // Lightspeed - if (LS_Installed()) - OPTIONS_SET(kOptLightspeedAPI); -#endif - - // check for 16bit mode - if (!WinScreenMode(winScreenModeGetSupportedDepths, NULL, NULL, &depth, &color)) - OPTIONS_SET(((depth & 0x8000) ? kOptMode16Bit : kOptNone)); - -} \ No newline at end of file diff --git a/backends/PalmOS/Src/init_stuffs.h b/backends/PalmOS/Src/init_stuffs.h deleted file mode 100644 index 124510eeac..0000000000 --- a/backends/PalmOS/Src/init_stuffs.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef INIT_STUFFS_H -#define INIT_STUFFS_H - -#define kOS5Version sysMakeROMVersion(5,0,0,sysROMStageRelease,0) - -void StuffsGetFeatures(); -UInt32 StuffsGetPitch(Coord fullw); -void *StuffsForceVG(); -void StuffsReleaseVG(void *vg); - -#endif diff --git a/backends/PalmOS/Src/launcher/app.cpp b/backends/PalmOS/Src/launcher/app.cpp deleted file mode 100644 index 784ad935c2..0000000000 --- a/backends/PalmOS/Src/launcher/app.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include - -#include "StarterRsc.h" -#include "palmdefs.h" -#include "start.h" -#include "globals.h" -#include "rumble.h" - -#include "mathlib.h" -#include "formCards.h" -#include "games.h" -#include "extend.h" - -#include "modules.h" -#include "init_mathlib.h" -#include "init_sony.h" -#include "init_palmos.h" -#include "init_stuffs.h" - -/*********************************************************************** - * - * FUNCTION: AppStart - * - * DESCRIPTION: Get the current application's preferences. - * - * PARAMETERS: nothing - * - * RETURNED: Err value 0 if nothing went wrong - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Err AppStartCheckHRmode() -{ - Err e = errNone; - UInt32 depth = (OPTIONS_TST(kOptMode16Bit) && OPTIONS_TST(kOptDeviceOS5)) ? 16 : 8; - - // try to init Sony HR mode then Palm HR mode - gVars->HRrefNum = SonyHRInit(depth); - - if (gVars->HRrefNum == sysInvalidRefNum) { - if (e = PalmHRInit(depth)) - FrmCustomAlert(FrmErrorAlert,"Your device doesn't seem to support Hi-Res or 256color mode.",0,0); - } else { - OPTIONS_SET(kOptDeviceClie); - } - - return e; -} - -static void AppStopHRMode() { - if (gVars->HRrefNum != sysInvalidRefNum) - SonyHRRelease(gVars->HRrefNum); - else - PalmHRRelease(); -} - -static Err AppStartCheckNotify() { - UInt32 romVersion; - Err err; - - err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion); - if (!err) { - UInt16 cardNo; - LocalID dbID; - - err = SysCurAppDatabase(&cardNo, &dbID); - if (!err) { - SysNotifyRegister(cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL); - SysNotifyRegister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL); - SysNotifyRegister(cardNo, dbID, sonySysNotifyMsaEnforceOpenEvent, NULL, sysNotifyNormalPriority, NULL); - SysNotifyRegister(cardNo, dbID, sysNotifyDisplayResizedEvent, NULL, sysNotifyNormalPriority, NULL); - } - } - - return err; -} - -static Err AppStartLoadSkin() { - Err err = errNone; - - // if skin defined, check if the db still exists - if (gPrefs->skin.dbID) { - UInt32 type, creator; - - // check if the DB still exists - DmSearchStateType state; - UInt16 cardNo; - LocalID dbID; - Boolean found = false; - err = DmGetNextDatabaseByTypeCreator(true, &state, 'skin', appFileCreator, false, &cardNo, &dbID); - while (!err && dbID && !found) { - found = (cardNo == gPrefs->skin.cardNo && dbID == gPrefs->skin.dbID); - err = DmGetNextDatabaseByTypeCreator(false, &state, 'skin', appFileCreator, false, &cardNo, &dbID); - } - - if (found) { - // remember to check version for next revision of the skin - err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0,0, &type, &creator); - if (!err) - if (type != 'skin' || creator != appFileCreator) - err = dmErrInvalidParam; - } - - if (!found || err) - MemSet(&(gPrefs->skin),sizeof(SkinInfoType),0); - } - - // No skin ? try to get the first one - if (!gPrefs->skin.dbID) { - DmSearchStateType stateInfo; - - err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &gPrefs->skin.cardNo, &gPrefs->skin.dbID); - if (!err) - err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - } - - return err; -} - -static Err AppStartCheckMathLib() { - Err e = MathlibInit(); - - switch (e) { - case errNone: - break; - case sysErrLibNotFound: - FrmCustomAlert(FrmErrorAlert,"Can't find MathLib !",0,0); - break; - default: - FrmCustomAlert(FrmErrorAlert,"Can't open MathLib !",0,0); - break; - } - - return e; -} - -static void AppStopMathLib() { - MathlibRelease(); -} - -static void AppStartCheckScreenSize() { - Coord sw, sh, fw, fh; - UInt8 mode; - - OPTIONS_RST(kOptCollapsible); - OPTIONS_RST(kOptModeWide); - OPTIONS_RST(kOptModeLandscape); - - // we are on a sony device - if (OPTIONS_TST(kOptDeviceClie)) { - mode = SonyScreenSize(gVars->HRrefNum, &sw, &sh, &fw, &fh); - if (mode) { - OPTIONS_SET(kOptModeWide); - OPTIONS_SET((mode == SONY_LANDSCAPE) ? kOptModeLandscape : kOptNone); - } - } else { - mode = PalmScreenSize(&sw, &sh, &fw, &fh); - if (mode) { - OPTIONS_SET(kOptCollapsible); - OPTIONS_SET(kOptModeWide); - OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone); - } - } - - gVars->screenWidth = sw; - gVars->screenHeight = sh; - - gVars->screenFullWidth = fw; - gVars->screenFullHeight = fh; -} - -#define max(id,value) gVars->memory[id] = (gVars->memory[id] < value ? value : gVars->memory[id]) -#define min(id,value) gVars->memory[id] = (gVars->memory[id] > value ? value : gVars->memory[id]) -#define threshold 700 - -static void AppStartSetMemory() { - UInt32 mem, def; - PalmGetMemory(0,0,0,&mem); - def = (mem > threshold) ? (mem - threshold) * 1024 : 0; - gVars->startupMemory = mem; - - // default values - gVars->memory[kMemScummOldCostGames] = (mem >= 550 + threshold) ? 550000 : def; - gVars->memory[kMemScummNewCostGames] = (mem >= 2500 + threshold) ? 2500000 : def; - gVars->memory[kMemSimon1Games] = (mem >= 1000 + threshold) ? 1000000 : def; - gVars->memory[kMemSimon2Games] = (mem >= 2000 + threshold) ? 2000000 : def; - - // set min required values - max(kMemScummOldCostGames, 450000); - max(kMemScummNewCostGames, 450000); - max(kMemSimon1Games, 500000); - max(kMemSimon2Games, 500000); - - // set max required values - min(kMemScummOldCostGames, 550000); - min(kMemScummNewCostGames, 2500000); - min(kMemSimon1Games, 1000000); - min(kMemSimon2Games, 2000000); - -} - -#undef threshold -#undef min -#undef max - -Err AppStart(void) { - UInt16 dataSize, checkSize = 0; - Err error; - -#ifndef _DEBUG_ENGINE - // delete old databases - ModDelete(); -#endif - - // allocate global variables space - dataSize = sizeof(GlobalsDataType); - gVars = (GlobalsDataType *)MemPtrNew(dataSize); - MemSet(gVars, dataSize, 0); - - gVars->indicator.on = 255; - gVars->indicator.off = 0; - gVars->HRrefNum = sysInvalidRefNum; - gVars->VFS.volRefNum = vfsInvalidVolRef; - gVars->slkRefNum = sysInvalidRefNum; - gVars->options = kOptNone; - - // set memory required by the differents engines - AppStartSetMemory(); - StuffsGetFeatures(); - - // allocate prefs space - dataSize = sizeof(GlobalsPreferenceType); - gPrefs = (GlobalsPreferenceType *)MemPtrNew(dataSize); - MemSet(gPrefs, dataSize, 0); - - // Read the saved preferences / saved-state information. - if (PrefGetAppPreferences(appFileCreator, appPrefID, NULL, &checkSize, true) == noPreferenceFound || checkSize != dataSize) { - // reset all elements - MemSet(gPrefs, dataSize, 0); - - gPrefs->card.volRefNum = vfsInvalidVolRef; - gPrefs->card.cacheSize = 4096; - gPrefs->card.useCache = true; - gPrefs->card.showLED = true; - - gPrefs->autoOff = true; - gPrefs->vibrator = RumbleExists(); - gPrefs->debug = false; - gPrefs->exitLauncher = true; - gPrefs->stdPalette = OPTIONS_TST(kOptDeviceOS5); - gPrefs->stylusClick = true; - - } else { - PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true); - } - - if (!OPTIONS_TST(kOptDeviceARM)) { - error = AppStartCheckMathLib(); - if (error) return (error); - } - - error = AppStartCheckHRmode(); - if (error) return (error); - - bDirectMode = (AppStartLoadSkin() != errNone); - - // if volref previously defined, check if it's a valid one - if (gPrefs->card.volRefNum != vfsInvalidVolRef) { - VolumeInfoType volInfo; - Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo); - if (err) - gPrefs->card.volRefNum = parseCards(); - } - else - gPrefs->card.volRefNum = parseCards(); - if (gPrefs->card.volRefNum != vfsInvalidVolRef) - CardSlotCreateDirs(); - - // open games database - error = GamOpenDatabase(); - if (error) return (error); - GamImportDatabase(); - - AppStartCheckScreenSize(); - AppStartCheckNotify(); // not fatal error if not avalaible - - return error; -} - -/*********************************************************************** - * - * FUNCTION: AppStop - * - * DESCRIPTION: Save the current state of the application. - * - * PARAMETERS: nothing - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Err AppStopCheckNotify() -{ - UInt32 romVersion; - Err err; - - err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion); - if (!err) { - UInt16 cardNo; - LocalID dbID; - - err = SysCurAppDatabase(&cardNo, &dbID); - if (!err) { - SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority); - SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority); - // sonySysNotifyMsaEnforceOpenEvent - SysNotifyUnregister(cardNo, dbID, sysNotifyDisplayResizedEvent, sysNotifyNormalPriority); - } - } - - return err; -} - -void AppStop(void) { - // Close all the open forms. - FrmCloseAllForms(); - WinEraseWindow(); - WinPalette(winPaletteSetToDefault, 0, 256, NULL); - - // Close and move Game list database - GamCloseDatabase(false); - - // Write the saved preferences / saved-state information. This data - // will saved during a HotSync backup. - SavePrefs(); - - // stop all - AppStopCheckNotify(); - if (!OPTIONS_TST(kOptDeviceARM)) - AppStopMathLib(); - AppStopHRMode(); - - if (!bLaunched) - MemPtrFree(gVars); -} diff --git a/backends/PalmOS/Src/launcher/forms/formCards.cpp b/backends/PalmOS/Src/launcher/forms/formCards.cpp deleted file mode 100644 index 1c22ea647a..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formCards.cpp +++ /dev/null @@ -1,378 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include - -#include "start.h" -#include "formTabs.h" -#include "forms.h" -#include "globals.h" - -typedef struct { - UInt16 volRefNum; - Char nameP[expCardInfoStringMaxLen+1]; - -} CardInfoType; - -static TabType *myTabP; -static UInt16 lastTab = 0; - -static void CardSlotFormExit(Boolean bSave); - -static void CardSlotFreeList() { - MemHandle cards = NULL; - MemHandle items = NULL; - - if (itemsText && itemsList) { - cards = MemPtrRecoverHandle(itemsList); - items = MemPtrRecoverHandle(itemsText); - - itemsText = NULL; - itemsList = NULL; - } - itemsType = ITEM_TYPE_UNKNOWN; - - if (items && cards) { - MemHandleUnlock(items); - MemHandleUnlock(cards); - MemHandleFree(items); - MemHandleFree(cards); - } -} - -static UInt16 CardSlotFillList(Boolean getRefNum = false) { - Err err; - UInt16 index; - UInt16 volRefNum; - UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes; - UInt8 counter = 0; - UInt32 other = 1; - - MemHandle items = NULL; - MemHandle cards = NULL; - CardInfoType *cardsInfo; - - // retreive card infos - while (volIterator != vfsIteratorStop) { - err = VFSVolumeEnumerate(&volRefNum, &volIterator); - - if (!err) { - Char labelP[expCardInfoStringMaxLen+1]; - MemSet(labelP, expCardInfoStringMaxLen+1, 0); - err = VFSVolumeGetLabel(volRefNum, labelP, expCardInfoStringMaxLen+1); - - if (err || StrLen(labelP) == 0) { // if no label try to retreive card type - VolumeInfoType volInfo; - err = VFSVolumeInfo(volRefNum, &volInfo); - - if (!err) { - ExpCardInfoType info; - err = ExpCardInfo(volInfo.slotRefNum, &info); - StrCopy(labelP, info.deviceClassStr); - } - - if (err) // if err default name - StrPrintF(labelP,"Other Card %ld", other++); - } - - if (!cards) - cards = MemHandleNew(sizeof(CardInfoType)); - else - MemHandleResize(cards, MemHandleSize(cards) + sizeof(CardInfoType)); - - cardsInfo = (CardInfoType *)MemHandleLock(cards); - cardsInfo[counter].volRefNum = volRefNum; - StrCopy(cardsInfo[counter].nameP, labelP); - MemHandleUnlock(cards); - counter++; - } - } - - if (counter > 0) { - // set the list items ... - if (!getRefNum) { - for (index = 0; index < counter; index++) { - if (!items) - items = MemHandleNew(sizeof(Char *)); - else - MemHandleResize(items, MemHandleSize(items) + sizeof(Char *)); - - itemsText = (Char **)MemHandleLock(items); - itemsText[index] = cardsInfo[index].nameP; - MemHandleUnlock(items); - } - - // save globals - itemsText = (Char **)MemHandleLock(items); - itemsList = (void *)MemHandleLock(cards); - itemsType = ITEM_TYPE_CARD; - - // ... or just return a default volRefNum - } else { - UInt16 volRefNum; - - cardsInfo = (CardInfoType *)MemHandleLock(cards); - volRefNum = cardsInfo[0].volRefNum; // return the first volref - MemHandleUnlock(cards); - MemHandleFree(cards); - - return volRefNum; - } - - // no card found ? free old list in any or return invalid volref - } else { - if (!getRefNum) - CardSlotFreeList(); - else - return vfsInvalidVolRef; - } - - return counter; -} - -static void ConfigTabInit(Boolean update = false) { - ListPtr listP; - - UInt16 index; - Int16 selected = -1; - - UInt16 counter = CardSlotFillList(); - listP = (ListType *)GetObjectPtr(TabCardConfigSlotList); - - // itemsText can be NULL if counter = 0 - LstSetListChoices (listP, itemsText, counter); - if (counter > 0) { - CardInfoType *cardsInfo = (CardInfoType *)itemsList; - - for (index = 0; index < counter; index++) { - if (cardsInfo[index].volRefNum == gPrefs->card.volRefNum) { - selected = index; - break; - } - } - - LstSetSelection(listP, selected); - } - - if (!update) { - FieldType *fld1P; - Char *cacheP; - MemHandle cacheH; - - fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField); - cacheH = MemHandleNew(FldGetMaxChars(fld1P)+1); - cacheP = (Char *)MemHandleLock(cacheH); - StrIToA(cacheP, gPrefs->card.cacheSize / 1024); - MemHandleUnlock(cacheH); - - FldSetTextHandle(fld1P, cacheH); - CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox), gPrefs->card.useCache); - CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigLedCheckbox), gPrefs->card.showLED); - // update ? redraw the list - } else { - WinScreenLock(winLockCopy); - LstDrawList(listP); - WinScreenUnlock(); - } -} - -static UInt16 ConfigTabSave() { - ControlType *cckP[2]; - FieldType *fld1P; - ListPtr listP; - FormPtr frmP; - UInt16 updateCode = frmRedrawUpdateMS; - - cckP[0] = (ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox); - cckP[1] = (ControlType *)GetObjectPtr(TabCardConfigLedCheckbox); - - gPrefs->card.useCache = CtlGetValue(cckP[0]); - gPrefs->card.showLED = CtlGetValue(cckP[1]); - - fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField); - frmP = FrmGetActiveForm(); - if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[0]) == 1) { - TabSetActive(frmP, myTabP, 0); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabCardConfigCacheSizeField)); - FrmCustomAlert(FrmWarnAlert,"You must specified a cache size.",0,0); - return 0; - } - gPrefs->card.cacheSize = StrAToI(FldGetTextPtr(fld1P)) * 1024; - - Int16 selected; - CardInfoType *cardsInfo = (CardInfoType *)itemsList; - - listP = (ListType *)GetObjectPtr(TabCardConfigSlotList); - selected = LstGetSelection(listP); - if (selected == -1) { - gPrefs->card.volRefNum = vfsInvalidVolRef; - } else if (gPrefs->card.volRefNum != cardsInfo[selected].volRefNum) { - updateCode = frmRedrawUpdateMSImport; - gPrefs->card.volRefNum = cardsInfo[selected].volRefNum; - } - - CardSlotCreateDirs(); - CardSlotFreeList(); - - return updateCode; -} - -static void GameListTabInit() { - CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox), gPrefs->card.moveDB); - CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox), gPrefs->card.deleteDB); - CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox), gPrefs->card.confirmMoveDB); -} - -static void GameListTabSave() { - ControlType *cckP[3]; - - cckP[0] = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox); - cckP[1] = (ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox); - cckP[2] = (ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox); - - gPrefs->card.moveDB = CtlGetValue(cckP[0]); - gPrefs->card.deleteDB = CtlGetValue(cckP[1]); - gPrefs->card.confirmMoveDB = CtlGetValue(cckP[2]); -} - -static void GameListTabDraw() { - ControlType *cck1P; - FormPtr frmP = FrmGetActiveForm(); - - cck1P = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox); - if (CtlGetValue(cck1P)) { - FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox)); - FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox)); - } else { - FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox)); - FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox)); - } -} - -static void CardSlotFormInit() { - TabType *tabP; - FormType *frmP = FrmGetActiveForm(); - - tabP = TabNewTabs(2); - TabAddContent(&frmP, tabP, "Cards", TabCardConfigForm); - TabAddContent(&frmP, tabP, "Game List", TabCardGameListForm, GameListTabDraw); - - ConfigTabInit(); - GameListTabInit(); - - FrmDrawForm(frmP); - TabSetActive(frmP, tabP, lastTab); - - myTabP = tabP; -} - -static void CardSlotFormSave() { - UInt16 updateCode; - updateCode = ConfigTabSave(); - if (!updateCode) return; - GameListTabSave(); - CardSlotCreateDirs(); - - TabDeleteTabs(myTabP); - FrmReturnToMain(updateCode); -} - -static void CardSlotFormCancel() { - CardSlotFreeList(); - TabDeleteTabs(myTabP); - FrmReturnToMain(); -} - -Boolean CardSlotFormHandleEvent(EventPtr eventP) { - FormPtr frmP = FrmGetActiveForm(); - Boolean handled = false; - - switch (eventP->eType) { - case frmOpenEvent: - CardSlotFormInit(); - handled = true; - break; - - case frmCloseEvent: - CardSlotFormCancel(); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case (CardSlotForm + 1) : - case (CardSlotForm + 2) : - lastTab = (eventP->data.ctlSelect.controlID - CardSlotForm - 1); - TabSetActive(frmP, myTabP, lastTab); - break; - - case CardSlotOkButton: - CardSlotFormSave(); - break; - - case CardSlotCancelButton: - CardSlotFormCancel(); - break; - - case TabCardGameListMoveCheckbox: - GameListTabDraw(); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} - -void CardSlotCreateDirs() { - if (gPrefs->card.volRefNum != vfsInvalidVolRef) { - VFSDirCreate(gPrefs->card.volRefNum, "/PALM"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Games"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Saved"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Audio"); - VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Mods"); - } -} - -void CardSlotFormUpdate() { - if (itemsType == ITEM_TYPE_CARD) { - CardSlotFreeList(); - ConfigTabInit(true); - } -} - -UInt16 parseCards() { - UInt16 volRefNum = CardSlotFillList(true); - CardSlotFreeList(); - return volRefNum; -} diff --git a/backends/PalmOS/Src/launcher/forms/formCards.h b/backends/PalmOS/Src/launcher/forms/formCards.h deleted file mode 100644 index 956ef86340..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formCards.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __FORMCARDS_H__ -#define __FORMCARDS_H__ - -UInt16 parseCards(); -void CardSlotFormUpdate(); -void CardSlotCreateDirs(); - -#endif diff --git a/backends/PalmOS/Src/launcher/forms/formEditGame.cpp b/backends/PalmOS/Src/launcher/forms/formEditGame.cpp deleted file mode 100644 index 42953ad15e..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formEditGame.cpp +++ /dev/null @@ -1,611 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include - -#include "formTabs.h" -#include "forms.h" - -#include "start.h" -#include "games.h" -#include "skin.h" - -#define errBadParam 0x1000 - -static TabType *myTabP; -static UInt16 lastTab = 0; - -UInt8 gFormEditMode; - -static void GameTabInit(GameInfoType *gameInfoP) { - FieldType *fld1P, *fld2P, *fld3P; - Char *nameP, *pathP, *gameP; - MemHandle nameH, pathH, gameH; - ListType *list1P; - - list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList); - - itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *)); - for (int i = 0; i < ENGINE_COUNT; i++) - itemsText[i] = (Char *)engines[i].nameP; - LstSetListChoices(list1P, itemsText, ENGINE_COUNT); - - fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); - fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); - fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField); - - nameH = MemHandleNew(FldGetMaxChars(fld1P)+1); - pathH = MemHandleNew(FldGetMaxChars(fld2P)+1); - gameH = MemHandleNew(FldGetMaxChars(fld3P)+1); - - nameP = (Char *)MemHandleLock(nameH); - pathP = (Char *)MemHandleLock(pathH); - gameP = (Char *)MemHandleLock(gameH); - - if (gameInfoP) { - LstSetSelection(list1P, gameInfoP->engine); - LstSetTopItem(list1P, gameInfoP->engine); - StrCopy(nameP, gameInfoP->nameP); - StrCopy(pathP, gameInfoP->pathP); - StrCopy(gameP, gameInfoP->gameP); - } else { - LstSetSelection(list1P, 0); - MemSet(nameP,MemHandleSize(nameH),0); - MemSet(pathP,MemHandleSize(pathH),0); - MemSet(gameP,MemHandleSize(gameH),0); - } - - CtlSetLabel((ControlType *)GetObjectPtr(TabGameInfoEnginePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - - MemHandleUnlock(nameH); - MemHandleUnlock(pathH); - MemHandleUnlock(gameH); - - FldSetTextHandle(fld1P, nameH); - FldSetTextHandle(fld2P, pathH); - FldSetTextHandle(fld3P, gameH); -} - -static Err GameTabSave(GameInfoType *gameInfoP) { - FieldType *fld1P, *fld2P, *fld3P; - ListType *list1P; - - FormType *frmP = FrmGetActiveForm(); - list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList); - - fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); - fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); - fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField); - - FldTrimText(fld1P); - FldTrimText(fld2P); - FldTrimText(fld3P); - - // test case - if (!gameInfoP) { - if (FldGetTextLength(fld1P) == 0) { - FrmCustomAlert(FrmWarnAlert,"You must specify an entry name.",0,0); - TabSetActive(frmP, myTabP, 0); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField)); - return errBadParam; - - } else if (FldGetTextLength(fld2P) == 0) { - FrmCustomAlert(FrmWarnAlert,"You must specify a path.",0,0); - TabSetActive(frmP, myTabP, 0); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoPathField)); - return errBadParam; - - } else if (FldGetTextLength(fld3P) == 0) { - FrmCustomAlert(FrmWarnAlert,"You must specify a game.",0,0); - TabSetActive(frmP, myTabP, 0); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoGameField)); - return errBadParam; - } - - } else { - gameInfoP->engine = LstGetSelection(list1P); - StrCopy(gameInfoP->nameP, FldGetTextPtr(fld1P)); - StrCopy(gameInfoP->pathP, FldGetTextPtr(fld2P)); - StrCopy(gameInfoP->gameP, FldGetTextPtr(fld3P)); - - if (gameInfoP->pathP[StrLen(gameInfoP->pathP)-1] != '/') - StrCat(gameInfoP->pathP, "/"); - - MemPtrFree(itemsText); - itemsText = NULL; - } - - return errNone; -} - -static void DisplayInit(GameInfoType *gameInfoP) { - ListType *list1P, *list2P; - - list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList); - list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList); - - if (gameInfoP) { - LstSetSelection(list1P, gameInfoP->gfxMode); - LstSetSelection(list2P, gameInfoP->renderMode); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), gameInfoP->filter); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), gameInfoP->fullscreen); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), gameInfoP->aspectRatio); - - } else { - LstSetSelection(list1P, 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), 0); - } - - CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayRenderPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); -} - -static Err DisplaySave(GameInfoType *gameInfoP) { - ListType *list1P, *list2P; - ControlType *cck6P, *cck7P, *cck8P; - - FormType *frmP = FrmGetActiveForm(); - - list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList); - list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList); - cck6P = (ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox); - cck7P = (ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox); - cck8P = (ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox); - - if (!gameInfoP) { - } else { - gameInfoP->gfxMode = LstGetSelection(list1P); - gameInfoP->renderMode = LstGetSelection(list2P); - gameInfoP->filter = CtlGetValue(cck6P); - gameInfoP->fullscreen = CtlGetValue(cck7P); - gameInfoP->aspectRatio = CtlGetValue(cck8P); - } - - return errNone; -} - -static void OptionsInit(GameInfoType *gameInfoP) { - ListType *list2P, *list3P; - FieldType *fld4P, *fld5P, *fld6P; - Char *loadP, *roomP, *talkP; - MemHandle loadH, roomH, talkH; - - list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList); - list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList); - - fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField); - fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField); - fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField); - - loadH = MemHandleNew(FldGetMaxChars(fld4P)+1); - roomH = MemHandleNew(FldGetMaxChars(fld5P)+1); - talkH = MemHandleNew(FldGetMaxChars(fld6P)+1); - - loadP = (Char *)MemHandleLock(loadH); - roomP = (Char *)MemHandleLock(roomH); - talkP = (Char *)MemHandleLock(talkH); - - if (gameInfoP) { - LstSetSelection(list2P, gameInfoP->language); - LstSetTopItem(list2P, gameInfoP->language); - LstSetSelection(list3P, gameInfoP->platform); - LstSetTopItem(list3P, gameInfoP->platform); - - StrIToA(loadP, gameInfoP->loadSlot); - StrIToA(roomP, gameInfoP->bootValue); - StrIToA(talkP, gameInfoP->talkValue); - - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), gameInfoP->autoLoad); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), gameInfoP->bootParam); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), gameInfoP->setPlatform); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), gameInfoP->subtitles); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), gameInfoP->talkSpeed); - - } else { - LstSetSelection(list2P, 0); - LstSetSelection(list3P, 0); - - StrIToA(loadP, 0); - StrIToA(roomP, 0); - StrIToA(talkP, 60); - - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), 0); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), 1); - CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), 0); - } - - MemHandleUnlock(loadH); - MemHandleUnlock(roomH); - MemHandleUnlock(talkH); - - FldSetTextHandle(fld4P, loadH); - FldSetTextHandle(fld5P, roomH); - FldSetTextHandle(fld6P, talkH); - - CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); - CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsPlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P))); -} - -static Err OptionsSave(GameInfoType *gameInfoP) { - FieldType *fld4P, *fld5P, *fld6P; - ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P; - ListType *list2P, *list3P; - - FormType *frmP = FrmGetActiveForm(); - - list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList); - list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList); - - fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField); - fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField); - fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField); - - cck1P = (ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox); - cck2P = (ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox); - cck3P = (ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox); - cck4P = (ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox); - cck5P = (ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox); - - if (!gameInfoP) { - if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) { - FrmCustomAlert(FrmWarnAlert,"You must specify a room number.",0,0); - TabSetActive(frmP, myTabP, 2); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsStartRoomField)); - return errBadParam; - - } else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) { - FrmCustomAlert(FrmWarnAlert,"You must specify a talk speed.",0,0); - TabSetActive(frmP, myTabP, 2); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsTalkSpeedField)); - return errBadParam; - } - } else { - gameInfoP->language = LstGetSelection(list2P); - gameInfoP->platform = LstGetSelection(list3P); - - gameInfoP->autoLoad = CtlGetValue(cck1P); - gameInfoP->bootParam = CtlGetValue(cck2P); - gameInfoP->setPlatform = CtlGetValue(cck3P); - gameInfoP->subtitles = (CtlGetValue(cck4P)); - gameInfoP->talkSpeed = CtlGetValue(cck5P); - - gameInfoP->loadSlot = StrAToI(FldGetTextPtr(fld4P)); - gameInfoP->bootValue = StrAToI(FldGetTextPtr(fld5P)); - gameInfoP->talkValue = StrAToI(FldGetTextPtr(fld6P)); - } - - return errNone; -} - -static void GameManInit(UInt16 index) { - TabType *tabP; - FormType *frmP = FrmGetActiveForm(); - UInt16 active = lastTab; - - tabP = TabNewTabs(3); - TabAddContent(&frmP, tabP, "Game", TabGameInfoForm); - TabAddContent(&frmP, tabP, "Display", TabGameDisplayForm); - TabAddContent(&frmP, tabP, "Options", TabGameOptionsForm); - - UInt16 refNum; - if (SysLibFind(kFileBrowserLibName, &refNum)) - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabGameInfoBrowsePushButton)); - - if (index != dmMaxRecordIndex) { - MemHandle recordH = NULL; - GameInfoType *gameInfoP; - - recordH = DmQueryRecord(gameDB, index); - gameInfoP = (GameInfoType *)MemHandleLock(recordH); - - GameTabInit(gameInfoP); - DisplayInit(gameInfoP); - OptionsInit(gameInfoP); - - MemHandleUnlock(recordH); - CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),true); - } else { - active = 0; // new game ? start with first tab - GameTabInit(0); - DisplayInit(0); - OptionsInit(0); - CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),false); - } - - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField)); - FrmDrawForm(frmP); - TabSetActive(frmP, tabP, active); - - myTabP = tabP; -} - -static void GameManSave(UInt16 index) { - MemHandle recordH; - GameInfoType *gameInfoP, newGameInfo; - - if (GameTabSave(0) == errBadParam) return; - if (DisplaySave(0) == errBadParam) return; - if (OptionsSave(0) == errBadParam) return; - - if (index != dmMaxRecordIndex) { - recordH = DmGetRecord(gameDB, index); - gameInfoP = (GameInfoType *)MemHandleLock(recordH); - MemMove(&newGameInfo, gameInfoP, sizeof(GameInfoType)); - - } else { - index = dmMaxRecordIndex; - GamUnselect(); - recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType)); - gameInfoP = (GameInfoType *)MemHandleLock(recordH); - - MemSet(&newGameInfo, sizeof(GameInfoType), 0); - newGameInfo.version = curItemVersion; - newGameInfo.icnID = 0xFFFF; - newGameInfo.selected = true; - - // default sound data - newGameInfo.musicInfo.volume.palm = 50; - newGameInfo.musicInfo.volume.music = 192; - newGameInfo.musicInfo.volume.sfx = 192; - newGameInfo.musicInfo.volume.speech = 192; - newGameInfo.musicInfo.volume.audiocd = 50; - - newGameInfo.musicInfo.sound.tempo = 100; - newGameInfo.musicInfo.sound.defaultTrackLength = 10; - newGameInfo.musicInfo.sound.firstTrack = 1; - } - - GameTabSave(&newGameInfo); - DisplaySave(&newGameInfo); - OptionsSave(&newGameInfo); - - DmWrite(gameInfoP, 0, &newGameInfo, sizeof(GameInfoType)); - - MemHandleUnlock(recordH); - DmReleaseRecord (gameDB, index, 0); - GamSortList(); - // update list position - { - RectangleType rArea; - UInt16 posIndex, maxView; - - // get the sorted index - index = GamGetSelected(); - // if new item is out of the list bounds, change current list pos - SknGetListBounds(&rArea, NULL); - maxView = rArea.extent.y / sknInfoListItemSize; - posIndex = gPrefs->listPosition; - - // if out of the current list position - if (!(index >= posIndex && index < (posIndex + maxView))) - gPrefs->listPosition = index; // this value is corrected in SknUpdateList if needed - } - - TabDeleteTabs(myTabP); - FrmReturnToMain(); - SknUpdateList(); -} - -/*********************************************************************** - * - * FUNCTION: EditGameFormSave - * FUNCTION: EditGameFormInit - * FUNCTION: EditGameFormHandleEvent - * - * DESCRIPTION: - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -void EditGameFormDelete(Boolean direct) { - UInt16 index = GamGetSelected(); - - if (index == dmMaxRecordIndex) { - FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); - return; - - } else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) { - DmRemoveRecord(gameDB, index); - if (!direct) { - TabDeleteTabs(myTabP); - FrmReturnToMain(); - } - GamSortList(); - SknUpdateList(); - } -} - -static void EditGameCancel() { - if (itemsText) { - MemPtrFree(itemsText); - itemsText = NULL; - } - TabDeleteTabs(myTabP); - FrmReturnToMain(); -} - -static void EditGameBowser() { - UInt16 refNum; - Err e; - - ControlPtr butP = (ControlType *)GetObjectPtr(TabGameInfoBrowsePushButton); - CtlSetValue(butP, 0); - - e = SysLibFind (kFileBrowserLibName, &refNum); - if (!e) { - e = FileBrowserLibOpen (refNum); - if (!e) { - UInt16 volRefNum = gPrefs->card.volRefNum; - Char *textP, *pathP = (Char *)MemPtrNew(kFileBrowserLibPathBufferSize); - pathP[0] = chrNull; - - if (FileBrowserLibShowOpenDialog(refNum, &volRefNum, pathP, 0, 0, 0, "Game Data Path", kFileBrowserLibFlagNoFiles)) { - FieldPtr fldP; - MemHandle textH; - Int16 offset, copySize, maxSize; - - fldP = (FieldType *)GetObjectPtr(TabGameInfoPathField); - maxSize = FldGetMaxChars(fldP); - textH = FldGetTextHandle(fldP); - - FldSetTextHandle(fldP, NULL); - textP = (Char *)MemHandleLock(textH); - offset = 0; - copySize = StrLen(pathP); - - if (StrNCaselessCompare(pathP, "/Palm/Programs/ScummVM/Games/", 29) == 0) { - if (StrLen(pathP) == 29) { - copySize = 1; - pathP[0] = '.'; - } else { - copySize -= 29; - offset = 29; - } - } - - if (copySize > maxSize) - copySize = maxSize; - StrNCopy(textP, pathP + offset, copySize); - - MemHandleUnlock(textH); - FldSetTextHandle(fldP, textH); - FldDrawField(fldP); - FldGrabFocus(fldP); - } - - MemPtrFree(pathP); - FileBrowserLibClose(refNum); - } - } -} - -Boolean EditGameFormHandleEvent(EventPtr eventP) { - FormPtr frmP = FrmGetActiveForm(); - Boolean handled = false; - - switch (eventP->eType) { - case frmCloseEvent: - EditGameCancel(); - handled = true; - break; - - case frmOpenEvent: - switch (gFormEditMode) { - case edtModeAdd: - GameManInit(dmMaxRecordIndex); - break; - case edtModeEdit: - case edtModeParams: - default : - GameManInit(GamGetSelected()); - break; - } - handled = true; - break; - - case keyDownEvent: - switch (eventP->data.keyDown.chr) { - case chrLineFeed: - case chrCarriageReturn: - return true; - } - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case (GameEditForm + 1) : - case (GameEditForm + 2) : - case (GameEditForm + 3) : - lastTab = (eventP->data.ctlSelect.controlID - GameEditForm - 1); - TabSetActive(frmP, myTabP, lastTab); - break; - - case GameEditOKButton: - switch (gFormEditMode) { - case edtModeAdd: - GameManSave(dmMaxRecordIndex); - break; - case edtModeEdit: - case edtModeParams: - default : - GameManSave(GamGetSelected()); - break; - } - break; - - case GameEditCancelButton: - EditGameCancel(); - break; - - case GameEditDeleteButton: - EditGameFormDelete(false); - break; - - case TabGameInfoBrowsePushButton: - EditGameBowser(); - break; - - case TabGameInfoEnginePopTrigger: - FrmList(eventP, TabGameInfoEngineList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameInfoEngineList)); - break; - - case TabGameDisplayGfxPopupPopTrigger: - FrmList(eventP, TabGameDisplayGfxListList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayGfxListList)); - break; - - case TabGameDisplayRenderPopTrigger: - FrmList(eventP, TabGameDisplayRenderList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayRenderList)); - break; - - case TabGameOptionsLanguagePopTrigger: - FrmList(eventP, TabGameOptionsLanguageList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsLanguageList)); - break; - - case TabGameOptionsPlatformPopTrigger: - FrmList(eventP, TabGameOptionsPlatformList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsPlatformList)); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/formEditGame.h b/backends/PalmOS/Src/launcher/forms/formEditGame.h deleted file mode 100644 index 2e76e7ebb5..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formEditGame.h +++ /dev/null @@ -1,38 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __FORMEDITGAME_H__ -#define __FORMEDITGAME_H__ - -// edit game mode -enum { - edtModeAdd, - edtModeEdit, - edtModeParams -}; - -extern UInt8 gFormEditMode; -void EditGameFormDelete(Boolean direct); - -#endif diff --git a/backends/PalmOS/Src/launcher/forms/formMisc.cpp b/backends/PalmOS/Src/launcher/forms/formMisc.cpp deleted file mode 100644 index 9b4009294c..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formMisc.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#include "start.h" -#include "formTabs.h" -#include "forms.h" -#include "globals.h" - -static TabType *myTabP; -static UInt16 lastTab = 0; - -static Boolean ScummVMTabSave() { - FieldType *fld1P, *fld2P; - ControlType *cckP[11]; - FormPtr frmP; - - fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField); - fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField); - - cckP[0] = (ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox); - cckP[3] = (ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox); - cckP[6] = (ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox); - cckP[9] = (ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox); - cckP[10]= (ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox); - - frmP = FrmGetActiveForm(); - if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[3]) == 1) { - TabSetActive(frmP, myTabP, 1); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMDebugLevelField)); - FrmCustomAlert(FrmWarnAlert,"You must specify a debug level.",0,0); - return false; - - } else if (FldGetTextLength(fld2P) == 0 && CtlGetValue(cckP[0]) == 1) { - TabSetActive(frmP, myTabP, 1); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMAutosaveField)); - FrmCustomAlert(FrmWarnAlert,"You must specify a period.",0,0); - return false; - } - - gPrefs->autoSave = CtlGetValue(cckP[0]); - gPrefs->debug = CtlGetValue(cckP[3]); - gPrefs->demoMode = CtlGetValue(cckP[6]); - gPrefs->copyProtection = CtlGetValue(cckP[9]); - gPrefs->altIntro = CtlGetValue(cckP[10]); - - gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P)); - gPrefs->autoSavePeriod = StrAToI(FldGetTextPtr(fld2P)); - - return true; -} - -static void PalmOSTabSave() { - ControlType *cckP[11]; - - if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac)) { - cckP[3]= (ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox); - gPrefs->advancedMode = CtlGetValue(cckP[3]); - } - - if (!OPTIONS_TST(kOptDeviceARM)) { - cckP[2] = (ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox); - gPrefs->stdPalette = CtlGetValue(cckP[2]); - } - - cckP[0] = (ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox); - cckP[1] = (ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox); - cckP[4] = (ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox); - cckP[5] = (ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox); - cckP[6] = (ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox); - cckP[7] = (ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox); - - gPrefs->vibrator = CtlGetValue(cckP[0]); - gPrefs->autoOff = !CtlGetValue(cckP[1]); - gPrefs->setStack = CtlGetValue(cckP[4]); - gPrefs->exitLauncher = CtlGetValue(cckP[5]); - gPrefs->stylusClick = !CtlGetValue(cckP[6]); - gPrefs->arrowKeys = CtlGetValue(cckP[7]); -} - -static void ExtsTabSave() { - ControlType *cckP[2]; - - if (OPTIONS_TST(kOptLightspeedAPI)) { - ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList); - cckP[0] = (ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox); - - gPrefs->lightspeed.enable = CtlGetValue(cckP[0]); - gPrefs->lightspeed.mode = LstGetSelection(list1P); - } - if (OPTIONS_TST(kOptGoLcdAPI)) { - cckP[1] = (ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox); - gPrefs->goLCD = CtlGetValue(cckP[1]); - } -} - -static void ScummVMTabInit() { - FieldType *fld1P, *fld2P; - Char *levelP, *periodP; - MemHandle levelH, periodH; - - CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox), gPrefs->autoSave); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox), gPrefs->debug); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox), gPrefs->demoMode); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox), gPrefs->copyProtection); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox), gPrefs->altIntro); - - fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField); - fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField); - - levelH = MemHandleNew(FldGetMaxChars(fld1P)+1); - levelP = (Char *)MemHandleLock(levelH); - StrIToA(levelP, gPrefs->debugLevel); - MemHandleUnlock(levelH); - - periodH = MemHandleNew(FldGetMaxChars(fld2P)+1); - periodP = (Char *)MemHandleLock(periodH); - StrIToA(periodP, gPrefs->autoSavePeriod); - MemHandleUnlock(periodH); - - FldSetTextHandle(fld1P, levelH); - FldSetTextHandle(fld2P, periodH); -} - -static void PalmOSTabInit() { - if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac)) - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox), gPrefs->advancedMode); - - if (!OPTIONS_TST(kOptDeviceARM)) - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox), gPrefs->stdPalette); - - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox), gPrefs->exitLauncher); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox), gPrefs->setStack); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox), gPrefs->vibrator); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox), !gPrefs->autoOff); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox), !gPrefs->stylusClick); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox), gPrefs->arrowKeys); -} - -static void ExtsTabInit() { - if (OPTIONS_TST(kOptLightspeedAPI)) { - ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList); - LstSetSelection(list1P, gPrefs->lightspeed.mode); - CtlSetLabel((ControlType *)GetObjectPtr(TabMiscExtsLightspeedPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox), gPrefs->lightspeed.enable); - } - - if (OPTIONS_TST(kOptGoLcdAPI)) - CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox), gPrefs->goLCD); -} - -static void MiscFormSave() { - if (!ScummVMTabSave()) return; - PalmOSTabSave(); - ExtsTabSave(); - - TabDeleteTabs(myTabP); - FrmReturnToMain(); -} - -static void MiscFormInit() { - TabType *tabP; - FormType *frmP = FrmGetActiveForm(); - UInt8 extsCnt = 2; - - tabP = TabNewTabs(3); - TabAddContent(&frmP, tabP, "PalmOS", TabMiscPalmOSForm); - TabAddContent(&frmP, tabP, "ScummVM", TabMiscScummVMForm); - TabAddContent(&frmP, tabP, "More ...", TabMiscExtsForm); - - if (!OPTIONS_TST(kOptDeviceARM) || OPTIONS_TST(kOptDeviceZodiac)) - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSAdvancedCheckbox)); - - if (OPTIONS_TST(kOptDeviceARM)) - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSStdPaletteCheckbox)); - - if (!OPTIONS_TST(kOptGoLcdAPI)) { - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsGolcdCheckbox)); - // move lightspeed - TabMoveUpObject(frmP, TabMiscExtsLightspeedCheckbox, 12); - TabMoveUpObject(frmP, TabMiscExtsLightspeedPopTrigger, 12); - TabMoveUpObject(frmP, TabMiscExtsLightspeedList, 12); - TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12); - extsCnt--; - } - - if (!OPTIONS_TST(kOptLightspeedAPI)) { - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedCheckbox)); -// FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList)); // cannot remove this ? - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedPopTrigger)); - TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12); - extsCnt--; - } - - if (extsCnt) - FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsNothingLabel)); - - PalmOSTabInit(); - ScummVMTabInit(); - ExtsTabInit(); - - FrmDrawForm(frmP); - TabSetActive(frmP, tabP, lastTab); - - myTabP = tabP; -} - -Boolean MiscFormHandleEvent(EventPtr eventP) { - FormPtr frmP = FrmGetActiveForm(); - Boolean handled = false; - - switch (eventP->eType) { - case frmOpenEvent: - MiscFormInit(); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case (MiscForm + 1) : - case (MiscForm + 2) : - case (MiscForm + 3) : - lastTab = (eventP->data.ctlSelect.controlID - MiscForm - 1); - TabSetActive(frmP, myTabP, lastTab); - break; - - case TabMiscExtsLightspeedPopTrigger: - FrmList(eventP, TabMiscExtsLightspeedList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList)); - break; - - case MiscOKButton: - MiscFormSave(); - break; - - case MiscCancelButton: - TabDeleteTabs(myTabP); - FrmReturnToMain(); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/formSkins.cpp b/backends/PalmOS/Src/launcher/forms/formSkins.cpp deleted file mode 100644 index b4c1e222d0..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formSkins.cpp +++ /dev/null @@ -1,267 +0,0 @@ -#include - -#include "palmdefs.h" -#include "start.h" -#include "forms.h" -#include "skin.h" -#include "globals.h" - -static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) { - return StrCompare(a->nameP, b->nameP); -} - -static void SkinsFormInit(Boolean bDraw) { - MemHandle skins = NULL; - SkinInfoType *skinsInfo; - UInt16 numSkins = 0; - - FormPtr frmP; - ListType *listP; - MemHandle items = NULL; - ControlType *cck1P; - DmSearchStateType stateInfo; - UInt16 cardNo; - LocalID dbID; - - Err errInfo; - Char nameP[32]; - - itemsText = NULL; - - // parse and save skins - Err err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID); - while (!err && dbID) { - errInfo = DmDatabaseInfo (cardNo, dbID, nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - if (!errInfo) - { - if (!skins) - skins = MemHandleNew(sizeof(SkinInfoType)); - else - MemHandleResize(skins, MemHandleSize(skins) + sizeof(SkinInfoType)); - - skinsInfo = (SkinInfoType *)MemHandleLock(skins); - StrCopy(skinsInfo[numSkins].nameP, nameP); - skinsInfo[numSkins].cardNo = cardNo; - skinsInfo[numSkins].dbID = dbID; - MemHandleUnlock(skins); - numSkins++; - } - err = DmGetNextDatabaseByTypeCreator(false, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID); - } - - Int16 selected = -1; - - cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox); - CtlSetValue(cck1P, gPrefs->soundClick); - - listP = (ListType *)GetObjectPtr(SkinsSkinList); - skinsInfo = (SkinInfoType *)MemHandleLock(skins); - SysQSort(skinsInfo, numSkins, sizeof(SkinInfoType), (CmpFuncPtr)SkinsFormCompare, 0); - - // create itemsText (TODO: create a custom draw function) - for (UInt16 index=0; index < numSkins; index++) - { - if (!items) - items = MemHandleNew(sizeof(Char *)); - else - MemHandleResize(items, MemHandleSize(items) + sizeof(Char *)); - - itemsText = (Char **)MemHandleLock(items); - itemsText[index] = skinsInfo[index].nameP; - MemHandleUnlock(items); - - if ( gPrefs->skin.cardNo == skinsInfo[index].cardNo && - gPrefs->skin.dbID == skinsInfo[index].dbID && - StrCompare(gPrefs->skin.nameP, skinsInfo[index].nameP) == 0) - selected = index; - } - // save globals and set list - itemsText = (Char **)MemHandleLock(items); - itemsList = (void *)skinsInfo; - itemsType = ITEM_TYPE_SKIN; - - LstSetListChoices (listP, itemsText, numSkins); - LstSetSelection(listP, selected); - - // bDraw = true -> draw whole from - // bDraw = false -> redraw list - if (bDraw) { - frmP = FrmGetActiveForm(); - FrmDrawForm(frmP); - } else { - WinScreenLock(winLockCopy); - LstDrawList(listP); - WinScreenUnlock(); -// LstSetSelection(listP, 0); - } -} - -static void SkinsFormExit(Boolean bSave) { - MemHandle skins; - MemHandle items; - SkinInfoType *skinsInfo; - - ListType *listP; - Int16 selected; - - listP = (ListType *)GetObjectPtr(SkinsSkinList); - selected = LstGetSelection(listP); - - if (bSave && selected == -1) { // may never occured... - FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0); - return; - } - - skinsInfo = (SkinInfoType *)itemsList; - skins = MemPtrRecoverHandle(skinsInfo); - items = MemPtrRecoverHandle(itemsText); - - itemsText = NULL; - itemsList = NULL; - itemsType = ITEM_TYPE_UNKNOWN; - - if (bSave) { - ControlType *cck1P; - - StrCopy(gPrefs->skin.nameP, skinsInfo[selected].nameP); - gPrefs->skin.cardNo = skinsInfo[selected].cardNo; - gPrefs->skin.dbID = skinsInfo[selected].dbID; - -/* DmOpenRef skinDB = SknOpenSkin(); - UInt32 depth = SknGetDepth(skinDB); - SknCloseSkin(skinDB); - - if (depth != 8 && depth != 16) depth = 8; - - if (depth == 16 && !OPTIONS_TST(kOptMode16Bit)) { - FrmCustomAlert(FrmInfoAlert, "You can only use 8bit skin on your device.", 0, 0); - gPrefs->skin.cardNo = cardNo; - gPrefs->skin.dbID = dbID; - } -*/ - cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox); - gPrefs->soundClick = CtlGetValue(cck1P); - } - - FrmReturnToMain(); - - MemHandleUnlock(items); - MemHandleUnlock(skins); - MemHandleFree(items); - MemHandleFree(skins); - - if (bSave) - SknApplySkin(); -} - -static void SkinsFormBeam() { - SkinInfoType *skinsInfo; - - ListType *listP; - Int16 selected; - Err err; - - listP = (ListType *)GetObjectPtr(SkinsSkinList); - selected = LstGetSelection(listP); - - if (selected == -1) { // may never occured... - FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0); - return; - } - - skinsInfo = (SkinInfoType *)itemsList; - err = SendDatabase(0, skinsInfo[selected].dbID, "skin.pdb", "\nScummVM Skin"); - -// if (err) -// FrmCustomAlert(FrmErrorAlert, "Unable to beam this skin.",0,0); -} - -static void SkinsFormDelete() { - MemHandle skins; - MemHandle items; - SkinInfoType *skinsInfo; - - ListType *listP; - Int16 selected; - - listP = (ListType *)GetObjectPtr(SkinsSkinList); - selected = LstGetSelection(listP); - - if (selected == -1) { // may never occured... - FrmCustomAlert(FrmInfoAlert, "You didn't select a skin.", 0, 0); - return; - } - - skinsInfo = (SkinInfoType *)itemsList; - skins = MemPtrRecoverHandle(skinsInfo); - items = MemPtrRecoverHandle(itemsText); - - if ( gPrefs->skin.cardNo == skinsInfo[selected].cardNo && - gPrefs->skin.dbID == skinsInfo[selected].dbID && - StrCompare(gPrefs->skin.nameP, skinsInfo[selected].nameP) == 0) { - FrmCustomAlert(FrmInfoAlert, "You cannot delete the active skin.",0,0); - return; - - } else { - Err err = DmDeleteDatabase(0, skinsInfo[selected].dbID); - if (!err) { - - itemsText = NULL; - itemsList = NULL; - itemsType = ITEM_TYPE_UNKNOWN; - - MemHandleUnlock(items); - MemHandleUnlock(skins); - MemHandleFree(items); - MemHandleFree(skins); - - SkinsFormInit(false); - } else { - FrmCustomAlert(FrmErrorAlert, "Skin deletion failed.",0,0); - } - } - -} -Boolean SkinsFormHandleEvent(EventPtr eventP) { - Boolean handled = false; - - switch (eventP->eType) { - - case frmOpenEvent: - SkinsFormInit(true); - handled = true; - break; - - case frmCloseEvent: - SkinsFormExit(false); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case SkinsOKButton: - SkinsFormExit(true); - break; - - case SkinsCancelButton: - SkinsFormExit(false); - break; - - case SkinsBeamButton: - SkinsFormBeam(); - break; - - case SkinsDeleteButton: - SkinsFormDelete(); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/formUtil.cpp b/backends/PalmOS/Src/launcher/forms/formUtil.cpp deleted file mode 100644 index 6d1d55e6e2..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formUtil.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include - -#include "forms.h" - -Char **itemsText = NULL; -void *itemsList = NULL; -Char itemsType = ITEM_TYPE_UNKNOWN; - -void FrmReturnToMain(UInt16 updateCode) { - // if there is a form loaded, prevent crash on OS5 - if (FrmGetFirstForm()) { - FrmUpdateForm(MainForm, updateCode); - FrmReturnToForm(MainForm); - } -} - -void FldTrimText(FieldPtr fldP) { - MemHandle tmpH; - Char *tmpP; - - tmpH = FldGetTextHandle(fldP); - FldSetTextHandle(fldP, NULL); - tmpP = (Char *)MemHandleLock(tmpH); - TxtGlueStripSpaces(tmpP, true, true); - MemHandleUnlock(tmpH); - FldSetTextHandle(fldP, tmpH); -} - -/*********************************************************************** - * - * FUNCTION: GetObjectPtr - * - * DESCRIPTION: This routine returns a pointer to an object in the current - * form. - * - * PARAMETERS: formId - id of the form to display - * - * RETURNED: void * - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -void * GetObjectPtr(UInt16 objectID) { - FormPtr frmP; - - frmP = FrmGetActiveForm(); - return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)); -} - -void FrmList(EventPtr eventP, UInt16 objectID) { - ListType *listP; - UInt16 listItem; - - listP = (ListType *)GetObjectPtr(objectID); - listItem = LstPopupList(listP); - CtlSetLabel(eventP->data.ctlSelect.pControl, LstGetSelectionText(listP, LstGetSelection(listP))); -} - diff --git a/backends/PalmOS/Src/launcher/forms/formUtil.h b/backends/PalmOS/Src/launcher/forms/formUtil.h deleted file mode 100644 index 90cf1ff37a..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formUtil.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __FORMUTIL_H__ -#define __FORMUTIL_H__ - -#define frmRedrawUpdateMS (frmRedrawUpdateCode + 1) -#define frmRedrawUpdateMSImport (frmRedrawUpdateCode + 2) - -// form list draw -#define ITEM_TYPE_UNKNOWN 'U' -#define ITEM_TYPE_CARD 'C' -#define ITEM_TYPE_SKIN 'S' - -extern Char **itemsText; -extern void *itemsList; -extern Char itemsType; - -void FrmReturnToMain(UInt16 updateCode = frmRedrawUpdateMS); -void * GetObjectPtr(UInt16 objectID); -void FldTrimText(FieldPtr fldP); -void FrmList(EventPtr eventP, UInt16 objectID); - -#endif diff --git a/backends/PalmOS/Src/launcher/forms/forminfo.cpp b/backends/PalmOS/Src/launcher/forms/forminfo.cpp deleted file mode 100644 index 74622d8f14..0000000000 --- a/backends/PalmOS/Src/launcher/forms/forminfo.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include - -#include "start.h" -#include "formTabs.h" -#include "forms.h" - -#include "base/version.h" -#include "globals.h" -#include "init_palmos.h" - -/*********************************************************************** - * - * FUNCTION: MiscOptionsFormSave - * FUNCTION: MiscOptionsFormInit - * FUNCTION: MiscOptionsFormHandleEvent - * - * DESCRIPTION: Misc. Options form functions - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static TabType *myTabP; -static UInt16 lastTab = 0; - -static UInt32 GetStackSize() { - MemPtr startPP, endPP; - SysGetStackInfo(&startPP, &endPP); - - return ((Char *)endPP - (Char *)startPP) / 1024L; -} - -static void VersionTabDraw() { - WinDrawChars(gScummVMVersion, StrLen(gScummVMVersion), 47, 12 + 30); - WinDrawChars(gScummVMBuildDate, StrLen(gScummVMBuildDate), 47, 24 + 30); -} - -static void SystemTabDraw() { - Coord x; - UInt32 dm, sm, df, sf, stack; - Char num[10]; - - PalmGetMemory(&sm, &dm, &sf, 0); - stack = GetStackSize(); - df = gVars->startupMemory; - - WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground)); - FntSetFont(stdFont); - - StrIToA(num, dm); - x = 147 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 12 + 30); - - StrIToA(num, sm); - x = 147 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 24 + 30); - - StrIToA(num, stack); - x = 147 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 36 + 30); - - StrIToA(num, df); - x = 107 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 12 + 30); - - StrIToA(num, sf); - x = 107 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 24 + 30); - - StrCopy(num,"-"); - x = 107 - FntCharsWidth(num, StrLen(num)) + 5; - WinDrawChars(num, StrLen(num), x, 36 + 30); -} - -static void InfoFormSave() { - TabDeleteTabs(myTabP); - FrmReturnToMain(); -} - -static void AboutTabDraw() { - MemHandle hTemp; - BitmapPtr bmpTemp; - - hTemp = DmGetResource (bitmapRsc, 1200); - if (hTemp) { - bmpTemp = (BitmapType *)MemHandleLock(hTemp); - WinDrawBitmap(bmpTemp,3,44); - MemPtrUnlock(bmpTemp); - DmReleaseResource(hTemp); - } -} - -static void InfoFormInit() { - TabType *tabP; - FormType *frmP = FrmGetActiveForm(); - - tabP = TabNewTabs(3); - TabAddContent(&frmP, tabP, "About", TabInfoAboutForm, AboutTabDraw); - TabAddContent(&frmP, tabP, "Version", TabInfoVersionForm, VersionTabDraw); - TabAddContent(&frmP, tabP, "Memory", TabInfoSystemForm, SystemTabDraw); - - lastTab = 0; - FrmDrawForm(frmP); - TabSetActive(frmP, tabP, lastTab); - - myTabP = tabP; -} - -Boolean InfoFormHandleEvent(EventPtr eventP) { - FormPtr frmP = FrmGetActiveForm(); - Boolean handled = false; - - switch (eventP->eType) { - case frmOpenEvent: - InfoFormInit(); - handled = true; - break; - - case frmCloseEvent: - InfoFormSave(); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case (InfoForm + 1) : - case (InfoForm + 2) : - case (InfoForm + 3) : - lastTab = (eventP->data.ctlSelect.controlID - InfoForm - 1); - TabSetActive(frmP, myTabP, lastTab); - break; - - case InfoOKButton: - InfoFormSave(); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/formmain.cpp b/backends/PalmOS/Src/launcher/forms/formmain.cpp deleted file mode 100644 index 1709b4c7a2..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formmain.cpp +++ /dev/null @@ -1,363 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#include "StarterRsc.h" -#include "start.h" -#include "skin.h" -#include "games.h" -#include "scumm_globals.h" -#include "globals.h" - -#include "common/stdafx.h" -#include "base/version.h" - -#include "formEditGame.h" -#include "formUtil.h" - -static UInt16 sknLastOn = skinButtonNone; - -static Err BeamMe() { - UInt16 cardNo; - LocalID dbID; - Err err; - - err = SysCurAppDatabase(&cardNo, &dbID); - if (dbID) - err = SendDatabase(0, dbID, "ScummVM.prc", "\nPlay your favorite LucasArts games"); - else - err = DmGetLastErr(); - - return err; -} - -/*********************************************************************** - * - * FUNCTION: MainFormInit - * - * DESCRIPTION: This routine initializes the MainForm form. - * - * PARAMETERS: frm - pointer to the MainForm form. - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void MainFormInit() -{ - SknApplySkin(); -} - -/*********************************************************************** - * - * FUNCTION: MainFormDoCommand - * - * DESCRIPTION: This routine performs the menu command specified. - * - * PARAMETERS: command - menu item id - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ - -static Boolean MainFormDoCommand(UInt16 command) -{ - Boolean handled = false; - - switch (command) { - case MainGamesMemoryCard: - FrmPopupForm(CardSlotForm); - handled = true; - break; - - case MainGamesNew: - gFormEditMode = edtModeAdd; - FrmPopupForm(GameEditForm); - handled = true; - break; - - case MainGamesEdit: - gFormEditMode = edtModeEdit; - FrmPopupForm(GameEditForm); - handled = true; - break; - - case MainGamesDelete: - EditGameFormDelete(true); - handled = true; - break; - - case MainOptionsBeam: - BeamMe(); - //if (BeamMe()) - //FrmCustomAlert(FrmErrorAlert,"Unable to beam ScummVM for PalmOS.",0,0); - handled = true; - break; - - case MainOptionsAbout: - FrmPopupForm(InfoForm); - handled = true; - break; - - case MainGamesMusicSound: - FrmPopupForm(MusicForm); - handled = true; - break; - - case MainOptionsSkins: - FrmPopupForm(SkinsForm); - handled = true; - break; - - case MainOptionsMisc: - FrmPopupForm(MiscForm); - handled = true; - break; - } - - MenuEraseStatus(0); - return handled; -} - -/*********************************************************************** - * - * FUNCTION: MainFormHandleEvent - * - * DESCRIPTION: This routine is the event handler for the - * "MainForm" of this application. - * - * PARAMETERS: eventP - a pointer to an EventType structure - * - * RETURNED: true if the event has handle and should not be passed - * to a higher level handler. - * - * REVISION HISTORY: - * - * - ***********************************************************************/ - -static Boolean PenDownRepeat() { - Coord x,y; - Boolean penDown, handled = false; - EvtGetPen(&x, &y, &penDown); - - if (penDown && sknLastOn) { - RectangleType r; - DmOpenRef skinDBP; - - skinDBP = SknOpenSkin(); - SknGetObjectBounds(skinDBP, sknLastOn, &r); - - if (RctPtInRectangle(x*2, y*2, &r)) { - if (SknGetState(skinDBP, sknLastOn) != sknStateSelected) { - SknSetState(skinDBP, sknLastOn, sknStateSelected); - SknShowObject(skinDBP, sknLastOn); - } - - switch (sknLastOn) { - case skinSliderUpArrow: - case skinSliderDownArrow: - handled = SknProcessArrowAction(sknLastOn); - break; - } - - } else { - if (SknGetState(skinDBP, sknLastOn) != sknStateNormal) { - SknSetState(skinDBP, sknLastOn, sknStateNormal); - SknShowObject(skinDBP, sknLastOn); - } - } - - SknCloseSkin(skinDBP); - } - - return handled; -} - - -Boolean MainFormHandleEvent(EventPtr eventP) -{ - Boolean handled = false; - FormPtr frmP; - Coord x,y; - DmOpenRef skinDBP; - - switch (eventP->eType) { - case frmUpdateEvent: - { - RectangleType r; - UInt16 idx; - IndexedColorType bgColor = UIColorGetTableEntryIndex(UIFormFill); - frmP = FrmGetFormPtr(MainForm); - - if (gPrefs->card.volRefNum != vfsInvalidVolRef) - idx = FrmGetObjectIndex (frmP, MainMSBitMap); - else - idx = FrmGetObjectIndex (frmP, MainMSNoneBitMap); - - WinSetDrawMode(winPaint); - WinSetBackColor(bgColor); - FrmGetObjectBounds(frmP, idx, &r); - WinEraseRectangle(&r, 0); - FrmShowObject(frmP, idx); - - if (eventP->data.frmUpdate.updateCode == frmRedrawUpdateMSImport) { - GamImportDatabase(); - SknUpdateList(); - } - handled = true; - break; - } - case menuEvent: - handled = MainFormDoCommand(eventP->data.menu.itemID); - break; - - case frmOpenEvent: - MainFormInit(); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case MainCardsButton: - //gPrefs->card.volRefNum = parseCards(true); - FrmPopupForm(CardSlotForm); - break; - - case MainAboutButton: - FrmPopupForm(InfoForm); - break; - -// case MainListTypeSelTrigger: -// FrmList(eventP, MainListTypeList); -// break; - } - handled = true; - break; - - case penUpEvent: - x = eventP->screenX; - y = eventP->screenY; - lastIndex = dmMaxRecordIndex; // enable select/unselect list item - - if (sknLastOn != skinButtonNone) { - RectangleType r; - skinDBP = SknOpenSkin(); - SknGetObjectBounds(skinDBP, sknLastOn, &r); - SknSetState(skinDBP, sknLastOn, sknStateNormal); - SknShowObject(skinDBP, sknLastOn); - SknCloseSkin(skinDBP); - - if (RctPtInRectangle(x*2, y*2, &r)) { - switch (sknLastOn) { - case skinButtonGameAdd: - gFormEditMode = edtModeAdd; - FrmPopupForm(GameEditForm); - handled = true; - break; - - case skinButtonGameAudio: - FrmPopupForm(MusicForm); - handled = true; - break; - - case skinButtonGameEdit: - case skinButtonGameParams: - gFormEditMode = edtModeParams; - FrmPopupForm(GameEditForm); - handled = true; - break; - - case skinButtonGameStart: - if (gPrefs->card.volRefNum == vfsInvalidVolRef) - FrmCustomAlert(FrmWarnAlert,"Please select/insert a memory card.", 0, 0); - else - bStartScumm = true; - handled = true; - break; - - case skinButtonGameDelete: - EditGameFormDelete(true); - break; - } - } - sknLastOn = skinButtonNone; - } - break; - - case penDownEvent: - case penMoveEvent: - if (sknLastOn == skinButtonNone) { - x = eventP->screenX; - y = eventP->screenY; - skinDBP = SknOpenSkin(); - - switch (sknLastOn = SknCheckClick(skinDBP, x,y)) { - case skinButtonNone: - break; - case skinSliderUpArrow: - case skinSliderDownArrow: - case skinButtonGameAdd: - case skinButtonGameEdit: - case skinButtonGameParams: - case skinButtonGameStart: - case skinButtonGameDelete: - case skinButtonGameAudio: - SknSetState(skinDBP, sknLastOn, sknStateSelected); - SknShowObject(skinDBP, sknLastOn); - if (gPrefs->soundClick) - SndPlaySystemSound(sndClick); - handled = true; - break; - default: - FrmCustomAlert(FrmWarnAlert,"Unknown button !",0,0); - } - SknCloseSkin(skinDBP); - SknSelect(x, y); - } - break; - - case keyDownEvent: - if ( (eventP->data.keyDown.chr >= 'a' && eventP->data.keyDown.chr <= 'z') || - (eventP->data.keyDown.chr >= 'A' && eventP->data.keyDown.chr <= 'Z')) { - if (GamJumpTo(eventP->data.keyDown.chr)) { - SknUpdateList(); - handled = true; - } - } - break; - - default: - handled = PenDownRepeat(); - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/formmusic.cpp b/backends/PalmOS/Src/launcher/forms/formmusic.cpp deleted file mode 100644 index 9b4b5355a7..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formmusic.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#include "start.h" -#include "formTabs.h" -#include "forms.h" -#include "games.h" - -#include "globals.h" - -static TabType *myTabP; -static UInt16 lastTab = 0; - -static GameInfoType *gameInfoP = NULL; - -// Music -static Boolean MusicTabSave() { - ControlType *cck1P, *cck2P; - ListType *list1P, *list2P, *list3P; - FieldType *fld1P; - UInt16 tempo; - FormPtr frmP; - - frmP = FrmGetActiveForm(); - - cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox); - cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox); - - list1P = (ListType *)GetObjectPtr(TabMusicDriverList); - list2P = (ListType *)GetObjectPtr(TabMusicRateList); - list3P = (ListType *)GetObjectPtr(TabMusicQualityList); - - fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField); - - tempo = StrAToI(FldGetTextPtr(fld1P)); - if (tempo < 50 || tempo > 200) { - TabSetActive(frmP, myTabP, 0); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMusicTempoField)); - FrmCustomAlert(FrmErrorAlert, "Invalid tempo value (50...200)", 0, 0); - return false; - } - - gameInfoP->musicInfo.sound.music = CtlGetValue(cck1P); - gameInfoP->musicInfo.sound.multiMidi = CtlGetValue(cck2P); - - gameInfoP->musicInfo.sound.drvMusic = LstGetSelection(list1P); - gameInfoP->musicInfo.sound.rate = LstGetSelection(list2P); - gameInfoP->fmQuality = LstGetSelection(list3P); - gameInfoP->musicInfo.sound.tempo = tempo; - - return true; -} - -static void MusicTabInit() { - ControlType *cck1P, *cck2P; - ListType *list1P, *list2P, *list3P; - FieldType *fld1P; - MemHandle tempoH; - Char *tempoP; - - cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox); - cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox); - - list1P = (ListType *)GetObjectPtr(TabMusicDriverList); - list2P = (ListType *)GetObjectPtr(TabMusicRateList); - list3P = (ListType *)GetObjectPtr(TabMusicQualityList); - - fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField); - - CtlSetValue(cck1P, gameInfoP->musicInfo.sound.music); - CtlSetValue(cck2P, gameInfoP->musicInfo.sound.multiMidi); - - if (gameInfoP->musicInfo.sound.drvMusic > 5) - gameInfoP->musicInfo.sound.drvMusic = 0; - - - LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvMusic); - LstSetTopItem(list1P, gameInfoP->musicInfo.sound.drvMusic); - CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - - LstSetSelection(list2P, gameInfoP->musicInfo.sound.rate); - LstSetTopItem(list2P, gameInfoP->musicInfo.sound.rate); - CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); - - LstSetSelection(list3P, gameInfoP->fmQuality); - CtlSetLabel((ControlType *)GetObjectPtr(TabMusicQualityPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P))); - - tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1); - tempoP = (Char *)MemHandleLock(tempoH); - StrIToA(tempoP, gameInfoP->musicInfo.sound.tempo); - MemHandleUnlock(tempoH); - FldSetTextHandle(fld1P, tempoH); -} - -// Audio CD -static Boolean AudioCDTabSave() { - ControlType *cck3P; - FieldType *fld2P, *fld3P; - ListType *list1P, *list2P; - UInt16 firstTrack; - FormPtr frmP; - - frmP = FrmGetActiveForm(); - - cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox); - fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField); - fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField); - list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList); - list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList); - - firstTrack = StrAToI(FldGetTextPtr(fld3P)); - if (firstTrack < 1 || firstTrack > 999) { - TabSetActive(frmP, myTabP, 2); - FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabAudioCDFirstTrackField)); - FrmCustomAlert(FrmErrorAlert, "Invalid track value (1...999)", 0, 0); - return false; - } - - gameInfoP->musicInfo.sound.CD = CtlGetValue(cck3P); - - gameInfoP->musicInfo.sound.drvCD = LstGetSelection(list1P); - gameInfoP->musicInfo.sound.frtCD = LstGetSelection(list2P); - - gameInfoP->musicInfo.sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P)); - gameInfoP->musicInfo.sound.firstTrack = firstTrack; - - return true; -} - -static void AudioCDTabInit() { - ControlType *cck3P; - FieldType *fld2P, *fld3P; - ListType *list1P, *list2P; - MemHandle lengthH, firstTrackH; - Char *lengthP, *firstTrackP; - - cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox); - fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField); - fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField); - list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList); - list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList); - - LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvCD); - CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - - LstSetSelection(list2P, gameInfoP->musicInfo.sound.frtCD); - CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); - - CtlSetValue(cck3P, gameInfoP->musicInfo.sound.CD); - - lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1); - lengthP = (Char *)MemHandleLock(lengthH); - StrIToA(lengthP, gameInfoP->musicInfo.sound.defaultTrackLength); - MemHandleUnlock(lengthH); - FldSetTextHandle(fld2P, lengthH); - - firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1); - firstTrackP = (Char *)MemHandleLock(firstTrackH); - StrIToA(firstTrackP, gameInfoP->musicInfo.sound.firstTrack); - MemHandleUnlock(firstTrackH); - FldSetTextHandle(fld3P, firstTrackH); -} - -// Volume -static void VolumeTabSave() { - SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P; - - slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl); - slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl); - slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl); - slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl); - slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl); - - CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &gameInfoP->musicInfo.volume.palm); - CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &gameInfoP->musicInfo.volume.music); - CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &gameInfoP->musicInfo.volume.sfx); - CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gameInfoP->musicInfo.volume.speech); - CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gameInfoP->musicInfo.volume.audiocd); -} - -static void VolumeTabInit() { - SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P; - UInt16 value; - - slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl); - slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl); - slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl); - slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl); - slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl); - - value = gameInfoP->musicInfo.volume.palm; - CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value); - value = gameInfoP->musicInfo.volume.music; - CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value); - value = gameInfoP->musicInfo.volume.sfx; - CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value); - value = gameInfoP->musicInfo.volume.speech; - CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value); - value = gameInfoP->musicInfo.volume.audiocd; - CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value); -} - -static void MusicFormSave(UInt16 index) { - if (index != dmMaxRecordIndex) { - MemHandle recordH; - GameInfoType *ogameInfoP; - - if (!MusicTabSave()) return; - if (!AudioCDTabSave()) return; - VolumeTabSave(); - - recordH = DmGetRecord(gameDB, index); - ogameInfoP = (GameInfoType *)MemHandleLock(recordH); - DmWrite(ogameInfoP, 0, gameInfoP, sizeof(GameInfoType)); - MemHandleUnlock(recordH); - DmReleaseRecord (gameDB, index, 0); - } - - MemPtrFree(gameInfoP); - gameInfoP = NULL; - - TabDeleteTabs(myTabP); - FrmReturnToMain(); -} -static void MusicFormInit(UInt16 index) { - TabType *tabP; - FormType *frmP = FrmGetActiveForm(); - - if (index != dmMaxRecordIndex) { - MemHandle recordH = NULL; - GameInfoType *ogameInfoP; - - recordH = DmQueryRecord(gameDB, index); - ogameInfoP = (GameInfoType *)MemHandleLock(recordH); - - if (!ogameInfoP) { - FrmCustomAlert(FrmErrorAlert, "An error occured.",0,0); - return; - } - - gameInfoP = (GameInfoType *)MemPtrNew(sizeof(GameInfoType)); - MemMove(gameInfoP, ogameInfoP, sizeof(GameInfoType)); - MemHandleUnlock(recordH); - - } else { - FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); - FrmReturnToMain(); - return; - } - - tabP = TabNewTabs(3); - TabAddContent(&frmP, tabP, "Sound", TabMusicForm); - TabAddContent(&frmP, tabP, "Volume", TabVolumeForm); - TabAddContent(&frmP, tabP, "Audio CD", TabAudioCDForm); - - MusicTabInit(); - AudioCDTabInit(); - VolumeTabInit(); - - FrmDrawForm(frmP); - TabSetActive(frmP, tabP, lastTab); - - myTabP = tabP; -} - -Boolean MusicFormHandleEvent(EventPtr eventP) { - FormPtr frmP = FrmGetActiveForm(); - Boolean handled = false; - - switch (eventP->eType) { - case frmOpenEvent: - MusicFormInit(GamGetSelected()); - handled = true; - break; - - case frmCloseEvent: - MusicFormSave(dmMaxRecordIndex); - handled = true; - break; - - case ctlSelectEvent: - switch (eventP->data.ctlSelect.controlID) - { - case (MusicForm + 1) : - case (MusicForm + 2) : - case (MusicForm + 3) : - lastTab = (eventP->data.ctlSelect.controlID - MusicForm - 1); - TabSetActive(frmP, myTabP, lastTab); - break; - - case TabMusicDriverPopTrigger: - FrmList(eventP, TabMusicDriverList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicDriverList)); - - if (!OPTIONS_TST(kOptDeviceZodiac) && !OPTIONS_TST(kOptSonyPa1LibAPI)) { - ListType *list1P = (ListType *)GetObjectPtr(TabMusicDriverList); - - if (LstGetSelection(list1P) == 4) { - FrmCustomAlert(FrmInfoAlert, "There is no built-in MIDI support on your device.", 0, 0); - LstSetSelection(list1P, 0); - CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - } - } - break; - - case TabMusicQualityPopTrigger: - FrmList(eventP, TabMusicQualityList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicQualityList)); - break; - - case TabMusicRatePopTrigger: - FrmList(eventP, TabMusicRateList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicRateList)); - - if (!OPTIONS_TST(kOptPalmSoundAPI)) { - ListType *list1P = (ListType *)GetObjectPtr(TabMusicRateList); - - if (LstGetSelection(list1P) != 0) { - FrmCustomAlert(FrmInfoAlert, "You cannot use this rate on your device.", 0, 0); - LstSetSelection(list1P, 0); - CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - } - } - break; - - case TabAudioCDFormatPopTrigger: - FrmList(eventP, TabAudioCDFormatList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDFormatList)); - - if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) { - ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList); - LstSetSelection(list1P, 0); - CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - } - break; - - case TabAudioCDDriverPopTrigger: - FrmList(eventP, TabAudioCDDriverList); - FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDDriverList)); - - if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) { - ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList); - LstSetSelection(list1P, 0); - CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); - } - break; - - case MusicOKButton: - MusicFormSave(GamGetSelected()); - break; - - case MusicCancelButton: - MusicFormSave(dmMaxRecordIndex); - break; - } - handled = true; - break; - - default: - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/forms/forms.h b/backends/PalmOS/Src/launcher/forms/forms.h deleted file mode 100644 index 0bdfd356c7..0000000000 --- a/backends/PalmOS/Src/launcher/forms/forms.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __FORMS_H__ -#define __FORMS_H__ - -#include "StarterRsc.h" -#include "formUtil.h" - -#include "formEditGame.h" -#include "formCards.h" - - -#define HANDLER(x) Boolean x##FormHandleEvent(EventPtr eventP); - -HANDLER(Main) -HANDLER(EditGame) -HANDLER(SystemInfo) -HANDLER(Misc) -HANDLER(CardSlot) -HANDLER(Skins) -HANDLER(Music) -HANDLER(Info) - -#endif diff --git a/backends/PalmOS/Src/launcher/forms/formtabs.cpp b/backends/PalmOS/Src/launcher/forms/formtabs.cpp deleted file mode 100644 index 0dd3427c1a..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formtabs.cpp +++ /dev/null @@ -1,242 +0,0 @@ -#include -#include -#include -#include - -#include "globals.h" -#include "formTabs.h" - -TabType *TabNewTabs(UInt16 cnt) { - TabType *newP = new TabType; - - newP->count = 0; - newP->width = 0; - newP->tabs = new TabDataType[cnt]; - - return newP; -} - -void TabMoveUpObject(FormType *frmP, UInt16 objID, Coord amount) { - Coord x, y; - FrmGetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), &x, &y); - FrmSetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), x, y - amount); -} - -void TabDeleteTabs(TabType *tabP) { - UInt16 cnt, num; - num = MemPtrSize(tabP->tabs) / sizeof(TabDataType); - - for (cnt = 0; cnt < num; cnt++) - FrmDeleteForm(tabP->tabs[cnt].srcP); - - delete tabP->tabs; - delete tabP; -} - -Err TabAddContent(FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc) { - FormType *srcP; - UInt16 cnt; - void *objP, **dstP; - UInt16 objNum; - Coord x, y, w, h; - UInt16 id; - RectangleType r; - - dstP = (void **)frmP; - srcP = FrmInitForm(rscID); - - objNum = FrmGetNumberOfObjects(srcP); - - // save tab data - - // it's required to keep to source forms active - // while the tab form is not close for list data ptr (items text) - // TODO : fix this ! - tabP->tabs[tabP->count].srcP = srcP; - tabP->tabs[tabP->count].first = FrmGetObjectId(srcP, 0); - tabP->tabs[tabP->count].last = FrmGetObjectId(srcP, objNum - 1); - tabP->tabs[tabP->count].drawFunc= drawFunc; - tabP->count++; - tabP->active = tabP->count; - - // create tab - FntSetFont(stdFont); - x = 4 + tabP->width; - y = 16; - w = FntCharsWidth(nameP, StrLen(nameP)) + 6; - h = 12; - ControlType *addP = CtlNewControl(dstP, (FrmGetFormId(*frmP) + tabP->count), buttonCtl, nameP, x, y, w, h, stdFont, 0, true); - CtlGlueSetFrameStyle(addP, noButtonFrame); - tabP->width += w + 3; - - // create tab content - for (cnt = 0; cnt < objNum; cnt++) { - objP = FrmGetObjectPtr(srcP, cnt); - id = FrmGetObjectId(srcP, cnt); - FrmGetObjectBounds(srcP, cnt, &r); - x = r.topLeft.x - 2; - y = r.topLeft.y + 30; - w = r.extent.x; - h = r.extent.y; - - FrmSetObjectPosition(srcP, cnt, x, y); - - switch (FrmGetObjectType(srcP, cnt)) { - case frmListObj: { - // HOWTO : to auto link the list to a popup trigger the listID must be popupID + 1 if popup id - // desn't exist the triggerID will be 0 and the list will be shown, but take care to not define - // ListID - 1 object if you want to show the list. - ListType *newP; - Char **itemsP = LstGlueGetItemsText((ListType *)objP); - FontID font = LstGlueGetFont((ListType *)objP); - UInt16 visible = LstGetVisibleItems((ListType *)objP); - UInt16 items = LstGetNumberOfItems((ListType *)objP); - UInt16 trigger = id - 1; - trigger = (FrmGetObjectIndex((FormType *)*dstP, trigger) != frmInvalidObjectId) ? trigger : 0; - - LstNewList(dstP, id, x, y, w, h, font, visible, trigger); - newP = (ListType *)FrmGetObjectPtr((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); - LstSetListChoices(newP, itemsP, items); - FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); - break; - } - case frmFieldObj: { - FieldAttrType attr; - FontID font = FldGetFont((FieldType *)objP); - UInt16 maxChars = FldGetMaxChars((FieldType *)objP); - FldGetAttributes((FieldType *)objP, &attr); - FldNewField(dstP, id, x, y, w, h, font, maxChars, attr.editable, attr.underlined, attr.singleLine, attr.dynamicSize, (JustificationType)attr.justification, attr.autoShift, attr.hasScrollBar, attr.numeric); - FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); - break; - } - case frmControlObj: { - const Char *textP = CtlGetLabel((ControlType *)objP); - ControlStyleType style = CtlGlueGetControlStyle((ControlType *)objP); - FontID font = CtlGlueGetFont((ControlType *)objP); - ControlType *newP = CtlNewControl(dstP, id, style, textP, x, y, w, h, font, 0, true); - FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); - switch (style) { - case sliderCtl: - { - UInt16 min, max, page, val; - CtlGetSliderValues((ControlType *)objP, &min, &max, &page, &val); - CtlSetSliderValues(newP, &min, &max, &page, &val); - break; - } - } - break; - } - case frmLabelObj: { - const Char *textP = FrmGetLabel(srcP, id); - FontID font = FrmGlueGetLabelFont(srcP, id); - FrmNewLabel((FormType **)dstP, id, textP, x, y, font); - FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); - break; - } - - case frmBitmapObj: { -/* UInt16 family = id + 1; - FrmNewBitmap((FormType **)dstP, id, id, x, y); - //FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); -*/ break; - } - } - } - - frmP = (FormType **)dstP; // save new form ptr - return errNone; -} - -void TabSetActive(FormType *frmP, TabType *tabP, UInt16 num) { - UInt16 cnt, idx; - RectangleType r; - TabDataPtr dataP; - - if (tabP->active == num) - return; - - dataP = &tabP->tabs[tabP->active]; - - // hide active tab objects - if (tabP->active != tabP->count) { - for (cnt = dataP->first; cnt <= dataP->last; cnt++) { - if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) - FrmHideObject(frmP, idx); - } - } - - // save active tab - tabP->active = num; - dataP = &tabP->tabs[num]; - - // draw tab limit - WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill)); - WinDrawLine(1, 14, 154,14); - WinDrawLine(1, 15, 154,15); - RctSetRectangle(&r, 1, 30, 154, 100); - WinDrawRectangle(&r, 0); - WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); - WinDrawLine(1, 28, 154,28); - - // set tabs size - for (cnt = 0; cnt < tabP->count; cnt++) { - idx = FrmGetObjectIndex (frmP, (FrmGetFormId(frmP) + cnt + 1)); - - if (idx != frmInvalidObjectId) { - FrmGetObjectBounds(frmP, idx, &r); - r.topLeft.y = (num == cnt) ? 17 : 17; - r.extent.y = (num == cnt) ? 12 : 11; - FrmSetObjectBounds(frmP, idx, &r); - - if (num == cnt) { - RGBColorType yellow = {0,255,192,0}; - - UInt8 line = /*(UIColorGetTableEntryIndex(UIFormFill) == UIColorGetTableEntryIndex(UIFieldTextHighlightBackground)) ? - WinRGBToIndex(&yellow) :*/ - UIColorGetTableEntryIndex(UIFieldTextHighlightBackground); - - r.topLeft.y -= 1; - WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); - WinDrawRectangleFrame(simpleFrame, &r); - WinSetForeColor(line); - WinDrawLine(r.topLeft.x, r.topLeft.y, r.topLeft.x + r.extent.x - 1, r.topLeft.y); - FrmShowObject(frmP, idx); - - } else { - UInt8 frame = UIColorGetTableEntryIndex(UIObjectFrame); - RGBColorType light; - WinIndexToRGB(frame, &light); - light.r = (255 - light.r) > 72 ? light.r + 72 : 255; - light.g = (255 - light.g) > 72 ? light.g + 72 : 255; - light.b = (255 - light.b) > 72 ? light.b + 72 : 255; - - WinSetForeColor(WinRGBToIndex(&light)); - WinDrawRectangleFrame(simpleFrame, &r); - WinSetForeColor(frame); - WinDrawLine(r.topLeft.x - 1, r.topLeft.y + r.extent.y, r.topLeft.x + r.extent.x, r.topLeft.y + r.extent.y); - } - - // round corner - WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill)); - if (OPTIONS_TST(kOptModeHiDensity)) { - WinSetCoordinateSystem(kCoordinatesNative); - WinDrawPixel((r.topLeft.x - 1) * 2, (r.topLeft.y - 1) * 2); - WinDrawPixel((r.topLeft.x + r.extent.x) * 2 + 1, (r.topLeft.y - 1) * 2); - WinSetCoordinateSystem(kCoordinatesStandard); - - } else { - // TODO - } - } - } - - // show objects - for (cnt = dataP->first; cnt <= dataP->last; cnt++) { - if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) - FrmShowObject(frmP, idx); - } - - // post draw function - if (dataP->drawFunc) - (dataP->drawFunc)(); -} diff --git a/backends/PalmOS/Src/launcher/forms/formtabs.h b/backends/PalmOS/Src/launcher/forms/formtabs.h deleted file mode 100644 index 5371485bf1..0000000000 --- a/backends/PalmOS/Src/launcher/forms/formtabs.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __FORMTABS_H__ -#define __FORMTABS_H__ - -typedef void (TabProc)(); - -typedef struct { - FormPtr srcP; - UInt16 first; - UInt16 last; - TabProc *drawFunc; -} TabDataType, *TabDataPtr; - -typedef struct { - UInt16 count, active; - Coord width; - TabDataPtr tabs; -} TabType, *TabPtr; - -TabType *TabNewTabs (UInt16 cnt); -void TabDeleteTabs (TabType *tabP); -Err TabAddContent (FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc = 0); -void TabSetActive (FormType *frmP, TabType *tabP, UInt16 num); -void TabMoveUpObject (FormType *frmP, UInt16 objID, Coord amount); -#endif diff --git a/backends/PalmOS/Src/launcher/games.cpp b/backends/PalmOS/Src/launcher/games.cpp deleted file mode 100644 index 166aae6aa4..0000000000 --- a/backends/PalmOS/Src/launcher/games.cpp +++ /dev/null @@ -1,530 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include - -#include "globals.h" -#include "palmdefs.h" -#include "start.h" -#include "games.h" -#include "skin.h" - -#include "extend.h" -#include "StarterRsc.h" - -DmOpenRef gameDB = NULL; - -static Err GamUpdateList() { - if (gameDB) { - UInt16 numRecs = DmNumRecords(gameDB); - - if (numRecs > 0) { - MemHandle tmpH; - UInt32 version, size; - UInt32 *versionP; - - // get record size and version - tmpH = DmQueryRecord(gameDB, 0); - size = MemHandleSize(tmpH); - versionP = (UInt32 *)MemHandleLock(tmpH); - version = *versionP; - MemHandleUnlock(tmpH); - - // check record - if (version != curItemVersion || size != sizeof(GameInfoType)) { - UInt16 index; - GameInfoType gitCur; - void *tmpP; - FormPtr ofmP, frmP; - - // show dialog - ofmP = FrmGetActiveForm(); - frmP = FrmInitForm(ConvertForm); - FrmSetActiveForm(frmP); - FrmDrawForm(frmP); - SysTaskDelay(1 * SysTicksPerSecond()); - - MemSet(&gitCur, sizeof(GameInfoType), 0); - - if (version == itemVersion_354 || - version == itemVersion_353 || - version == itemVersion_352 || - version == itemVersion_351 || - version == itemVersion_350 || - version == itemVersion_340 || - version == itemVersion_330 || - version == itemVersion_320 || - version == itemVersion_310 || - version == itemVersion_300 || - version == itemVersion_270 || - version == itemVersion_260 || - version == itemVersion_250) { - for (index = 0; index < numRecs; index++) { - // get old data - tmpH = DmQueryRecord(gameDB, index); - tmpP = MemHandleLock(tmpH); - MemMove(&gitCur, tmpP, MemHandleSize(tmpH)); - MemHandleUnlock(tmpH); - - // new format - gitCur.version = curItemVersion; - - if (version < itemVersion_300) { - gitCur.musicInfo.volume.palm = 50; - gitCur.musicInfo.volume.music = 192; - gitCur.musicInfo.volume.sfx = 192; - gitCur.musicInfo.volume.speech = 192; - gitCur.musicInfo.volume.audiocd = 50; - - gitCur.musicInfo.sound.tempo = 100; - gitCur.musicInfo.sound.defaultTrackLength = 10; - gitCur.musicInfo.sound.firstTrack = 1; - } - - if (version < itemVersion_310) - gitCur.engine = 0; - - if (version < itemVersion_320) - gitCur.renderMode = 0; - - if (version <= itemVersion_330) { - gitCur.fmQuality = 0; - gitCur.gfxMode = (gitCur.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes - - if (gitCur.engine == 0) gitCur.engine = 8; - else if (gitCur.engine == 1) gitCur.engine = 7; - else if (gitCur.engine == 2) gitCur.engine = 3; - else if (gitCur.engine == 3) gitCur.engine = 1; - else if (gitCur.engine == 4) gitCur.engine = 0; - else if (gitCur.engine == 5) gitCur.engine = 6; - else if (gitCur.engine == 6) gitCur.engine = 4; - else if (gitCur.engine == 7) gitCur.engine = 5; - else if (gitCur.engine == 8) gitCur.engine = 2; - - if (gitCur.renderMode == 1) gitCur.renderMode = 4; - else if (gitCur.renderMode == 2) gitCur.renderMode = 5; - else if (gitCur.renderMode == 3) gitCur.renderMode = 2; - else if (gitCur.renderMode == 4) gitCur.renderMode = 3; - else if (gitCur.renderMode == 5) gitCur.renderMode = 1; - - if (gitCur.platform == 2) gitCur.platform = 6; - else if (gitCur.platform == 5) gitCur.platform = 8; - else if (gitCur.platform == 6) gitCur.platform = 2; - - if (gitCur.language == 1) gitCur.language = 4; - else if (gitCur.language == 2) gitCur.language = 6; - else if (gitCur.language == 3) gitCur.language = 5; - else if (gitCur.language == 4) gitCur.language = 8; - else if (gitCur.language == 5) gitCur.language = 11; - else if (gitCur.language == 6) gitCur.language = 13; - else if (gitCur.language == 7) gitCur.language = 9; - else if (gitCur.language == 8) gitCur.language = 1; - else if (gitCur.language == 9) gitCur.language = 10; - else if (gitCur.language == 10) gitCur.language = 7; - else if (gitCur.language == 11) gitCur.language = 12; - else if (gitCur.language == 12) gitCur.language = 2; - else if (gitCur.language == 13) gitCur.language = 3; - - if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4; - else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5; - else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2; - else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1; - } - - if (version <= itemVersion_340) { - gitCur.platform++; - - if (gitCur.language == 3) - gitCur.language = 0; - else if (gitCur.language >= 11) - gitCur.language++; - } - - if (version <= itemVersion_350) - if (gitCur.platform >= 9) - gitCur.platform++; - - if (version <= itemVersion_351) { - if (gitCur.engine >= ENGINE_LURE) // newly added engine - gitCur.engine++; - - if (gitCur.engine == ENGINE_SCUMM) // reorder - gitCur.engine = ENGINE_SIMON; - else if (gitCur.engine == ENGINE_SIMON) - gitCur.engine = ENGINE_SCUMM; - } - - if (version <= itemVersion_352) { - if (gitCur.engine >= ENGINE_CINE) // newly added engine - gitCur.engine++; - - gitCur.platform++; - } - - if (version <= itemVersion_353) - gitCur.musicInfo.sound.drvMusic++; - - if (version <= itemVersion_354) - if (gitCur.engine >= ENGINE_AGI) // newly added engine - gitCur.engine++; - - if (gitCur.musicInfo.volume.palm > 100) - gitCur.musicInfo.volume.palm = 50; - - // simply resize the old record - tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL - tmpP = MemHandleLock(tmpH); - DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); - MemPtrUnlock(tmpP); - } - - } else if (version == itemVersion_200) { - // need conversion from V2 -> V3.5.2 - GameInfoTypeV2 git0; - - for (index = 0; index < numRecs; index++) { - - // get old data - tmpH = DmQueryRecord(gameDB, index); - tmpP = MemHandleLock(tmpH); - MemMove(&git0, tmpP, sizeof(GameInfoTypeV2)); - MemHandleUnlock(tmpH); - - // convert to new format - gitCur.version = curItemVersion; - gitCur.icnID = 0xFFFF; - gitCur.selected = git0.selected; - StrCopy(gitCur.nameP, git0.nameP); - StrCopy(gitCur.pathP, git0.pathP); - StrCopy(gitCur.gameP, git0.gameP); - gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes - - gitCur.autoLoad = git0.autoLoad; - gitCur.bootParam = git0.bootParam; - gitCur.setPlatform = git0.setPlatform; - gitCur.subtitles = git0.subtitles; - gitCur.talkSpeed = git0.talkSpeed; - - gitCur.loadSlot = git0.loadSlot; - gitCur.bootValue = git0.bootValue; - gitCur.talkValue = git0.talkValue; - gitCur.platform = git0.platform; - gitCur.language = git0.language; - - gitCur.musicInfo.volume.palm = 50; - gitCur.musicInfo.volume.music = 192; - gitCur.musicInfo.volume.sfx = 192; - gitCur.musicInfo.volume.speech = 192; - gitCur.musicInfo.volume.audiocd = 50; - - gitCur.musicInfo.sound.tempo = 100; - gitCur.musicInfo.sound.defaultTrackLength = 10; - gitCur.musicInfo.sound.firstTrack = 1; - - // to V3.4 - if (gitCur.platform == 2) gitCur.platform = 6; - else if (gitCur.platform == 5) gitCur.platform = 8; - else if (gitCur.platform == 6) gitCur.platform = 2; - - if (gitCur.language == 1) gitCur.language = 4; - else if (gitCur.language == 2) gitCur.language = 6; - else if (gitCur.language == 3) gitCur.language = 5; - else if (gitCur.language == 4) gitCur.language = 8; - else if (gitCur.language == 5) gitCur.language = 11; - else if (gitCur.language == 6) gitCur.language = 13; - else if (gitCur.language == 7) gitCur.language = 9; - else if (gitCur.language == 8) gitCur.language = 1; - else if (gitCur.language == 9) gitCur.language = 10; - else if (gitCur.language == 10) gitCur.language = 7; - else if (gitCur.language == 11) gitCur.language = 12; - else if (gitCur.language == 12) gitCur.language = 2; - else if (gitCur.language == 13) gitCur.language = 3; - - if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4; - else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5; - else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2; - else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1; - - // to V3.5 - gitCur.platform++; - - if (gitCur.language == 3) - gitCur.language = 0; - else if (gitCur.language >= 11) - gitCur.language++; - - // to V3.5.1 - if (gitCur.platform >= 9) - gitCur.platform++; - - //to V3.5.3 - gitCur.musicInfo.sound.drvMusic++; - - // ----- - gitCur.engine = ENGINE_SCUMM; - - tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL - tmpP = MemHandleLock(tmpH); - DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); - MemPtrUnlock(tmpP); - } - } else { - // need conversion from V0 -> V3.5.2 - GameInfoTypeV0 git0; - - for (index = 0; index < numRecs; index++) { - - // get old data - tmpH = DmQueryRecord(gameDB, index); - tmpP = MemHandleLock(tmpH); - MemMove(&git0, tmpP, sizeof(GameInfoTypeV0)); - MemHandleUnlock(tmpH); - - // convert to new format - gitCur.version = curItemVersion; - gitCur.icnID = 0xFFFF; - gitCur.selected = git0.selected; - StrCopy(gitCur.nameP, git0.nameP); - StrCopy(gitCur.pathP, git0.pathP); - StrCopy(gitCur.gameP, git0.gameP); - gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes - - gitCur.autoLoad = git0.autoLoad; - gitCur.bootParam = git0.bootParam; - gitCur.setPlatform = git0.amiga; // amiga become platform amiga/atari-st/machintosh - gitCur.platform = 1; - gitCur.subtitles = git0.subtitles; - gitCur.talkSpeed = git0.talkSpeed; - - gitCur.loadSlot = git0.loadSlot; - gitCur.bootValue = git0.bootValue; - gitCur.talkValue = git0.talkValue; - gitCur.platform = 2; // default to amiga - gitCur.language = git0.language; - - gitCur.musicInfo.volume.palm = 50; - gitCur.musicInfo.volume.music = 192; - gitCur.musicInfo.volume.sfx = 192; - gitCur.musicInfo.volume.speech = 192; - gitCur.musicInfo.volume.audiocd = 50; - - gitCur.musicInfo.sound.tempo = 100; - gitCur.musicInfo.sound.defaultTrackLength = 10; - gitCur.musicInfo.sound.firstTrack = 1; - - gitCur.engine = ENGINE_SCUMM; - - tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL - tmpP = MemHandleLock(tmpH); - DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); - MemPtrUnlock(tmpP); - } - } - - FrmEraseForm(frmP); - FrmDeleteForm(frmP); - if (ofmP) - FrmSetActiveForm(ofmP); - } - } - } - - return errNone; -} - -Err GamOpenDatabase() { - Err err = errNone; - - gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite); - - if (!gameDB) { - err = DmCreateDatabase(0, "ScummVM-Data", appFileCreator, 'DATA', false); - if (!err) { - gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite); - - if (!gameDB) - err = DmGetLastErr(); - } - } - - if (err) - FrmCustomAlert(FrmErrorAlert,"Cannot open/create games list DB !",0,0); - else - err = GamUpdateList(); - - return err; -} - -void GamImportDatabase() { - if (gPrefs->card.volRefNum != vfsInvalidVolRef && gPrefs->card.moveDB) { - FileRef file; - Err e; - - e = VFSFileOpen(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", vfsModeRead, &file); - if (!e) { - UInt16 oCardNo, nCardNo; - LocalID oDbID, nDbID; - - VFSFileClose(file); - if (gPrefs->card.confirmMoveDB) - if (FrmCustomAlert(FrmConfirmAlert, "Do you want to import games database from memory card ?", 0, 0) == FrmConfirmNo) { - // prevent to replace the file on memory card - gPrefs->card.moveDB = false; - return; - } - - // get current db info and rename it - DmOpenDatabaseInfo(gameDB, &oDbID, 0, 0, &oCardNo, 0); - GamCloseDatabase(true); - e = DmDeleteDatabase(oCardNo, oDbID); - - if (!e) - if (e = VFSImportDatabaseFromFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", &nCardNo, &nDbID)) - FrmCustomAlert(FrmErrorAlert, "Failed to import games database from memory card.", 0, 0); - - GamOpenDatabase(); - } - } -} - -void GamCloseDatabase(Boolean ignoreCardParams) { - if (gameDB) { - LocalID dbID; - UInt16 cardNo; - - DmOpenDatabaseInfo(gameDB, &dbID, 0, 0, &cardNo, 0); - DmCloseDatabase(gameDB); - - if (!ignoreCardParams) { - if (gPrefs->card.moveDB && gPrefs->card.volRefNum != vfsInvalidVolRef) { - VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", "listdata-old.pdb"); - Err e = VFSExportDatabaseToFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", cardNo, dbID); - if (!e) { - VFSFileDelete(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb"); - if (gPrefs->card.deleteDB) - DmDeleteDatabase(cardNo, dbID); - } else { - VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb", "listdata.pdb"); - } - } - } - } - gameDB = NULL; -} - -static Int16 GamCompare(GameInfoType *a, GameInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) { - return StrCaselessCompare(a->nameP, b->nameP); -} - -Err GamSortList() { - return DmQuickSort (gameDB, (DmComparF *)GamCompare, 0); -} - -void GamUnselect() { - GameInfoType *game; - - MemHandle recordH; - UInt16 index; - - index = GamGetSelected(); - - if (index != dmMaxRecordIndex) { - Boolean newValue; - - recordH = DmGetRecord(gameDB, index); - game = (GameInfoType *)MemHandleLock(recordH); - - newValue = false; - DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); - - MemHandleUnlock(recordH); - DmReleaseRecord (gameDB, index, 0); - } -} - -UInt16 GamGetSelected() { - MemHandle record; - GameInfoType *game; - Boolean selected; - UInt16 index = DmNumRecords(gameDB)-1; - - while (index != (UInt16)-1) { - record = DmQueryRecord(gameDB, index); - game = (GameInfoType *)MemHandleLock(record); - selected = game->selected; - MemHandleUnlock(record); - - if (selected) - return index; - - index--; - } - - return dmMaxRecordIndex; -} - -Boolean GamJumpTo(Char letter) { - MemHandle record; - GameInfoType *game; - Boolean found = false; - UInt16 index = 0; - UInt16 maxIndex = DmNumRecords(gameDB); - UInt16 active = GamGetSelected(); - - while (index < maxIndex) { - record = DmGetRecord(gameDB, index); - game = (GameInfoType *)MemHandleLock(record); - - if (tolower(game->nameP[0]) == tolower(letter)) { - found = true; - - if (index != active) { - RectangleType rArea; - UInt16 maxView; - Boolean newValue = true; - - SknGetListBounds(&rArea, NULL); - maxView = rArea.extent.y / sknInfoListItemSize; - - GamUnselect(); - DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); - - if (index < gPrefs->listPosition || index >= (gPrefs->listPosition + maxView)) - gPrefs->listPosition = index; - } - } - - MemHandleUnlock(record); - DmReleaseRecord (gameDB, index, 0); - - index++; - - if (found) - return found; - } - - return found; -} diff --git a/backends/PalmOS/Src/launcher/games.h b/backends/PalmOS/Src/launcher/games.h deleted file mode 100644 index bb005e66fb..0000000000 --- a/backends/PalmOS/Src/launcher/games.h +++ /dev/null @@ -1,201 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GAMES_H__ -#define __GAMES_H__ - -#define curItemVersion sysMakeROMVersion(3,5,5,0,0) // Added : AGI engine - - -#define itemVersion_354 sysMakeROMVersion(3,5,4,0,0) // Added : Default/Auto music driver -#define itemVersion_353 sysMakeROMVersion(3,5,3,0,0) // Added : CinE engine and 3DO platform -#define itemVersion_352 sysMakeROMVersion(3,5,2,0,0) // Added : Lure engine -#define itemVersion_351 sysMakeROMVersion(3,5,1,0,0) // Added : Sega CD platform -#define itemVersion_350 sysMakeROMVersion(3,5,0,0,0) -#define itemVersion_340 sysMakeROMVersion(3,4,0,0,0) -#define itemVersion_330 sysMakeROMVersion(3,3,0,0,0) -#define itemVersion_320 sysMakeROMVersion(3,2,0,0,0) -#define itemVersion_310 sysMakeROMVersion(3,1,0,0,0) -#define itemVersion_300 sysMakeROMVersion(3,0,0,0,0) -#define itemVersion_270 sysMakeROMVersion(2,7,0,0,0) -#define itemVersion_260 sysMakeROMVersion(2,6,0,0,0) -#define itemVersion_250 sysMakeROMVersion(2,5,0,0,0) -#define itemVersion_200 sysMakeROMVersion(2,0,0,0,0) - -// old config structs -typedef struct { - UInt32 version; - UInt16 icnID; // icon to display on the list - Boolean selected; - - Char nameP[50]; // game name to display in list - Char pathP[150]; // path to the game files - Char gameP[10]; // scumm name of the game - UInt16 gfxMode; - - Boolean autoLoad; - UInt16 loadSlot; - Boolean bootParam; - UInt16 bootValue; - Boolean amiga; - Boolean subtitles; - Boolean talkSpeed; - UInt16 talkValue; - UInt8 language; - -} GameInfoTypeV0; - -typedef struct { - UInt32 version; - UInt16 icnID; // icon to display on the list - Boolean selected; - - Char nameP[50]; // game name to display in list - Char pathP[150]; // path to the game files - Char gameP[10]; // scumm name of the game - UInt16 gfxMode; - - Boolean autoLoad; - Boolean bootParam; - Boolean setPlatform; - Boolean subtitles; - Boolean talkSpeed; - - UInt16 loadSlot; - UInt16 bootValue; - UInt16 talkValue; - UInt8 platform; - UInt8 language; - -} GameInfoTypeV2; - - -// Current config -typedef struct { - struct { - UInt16 palm; - UInt16 music; - UInt16 sfx; // TODO : remove - UInt16 speech; - UInt16 audiocd; - } volume; - - struct { - // midi - Boolean multiMidi; - Boolean music; // TODO : rename this, it is enable audio option - UInt8 drvMusic; - UInt8 tempo; - // sound FX - Boolean sfx; // TODO : remove this - UInt8 rate; - // CD audio - Boolean CD; - UInt8 drvCD, frtCD; - UInt16 defaultTrackLength; - UInt16 firstTrack; - } sound; -} MusicInfoType; - -typedef struct { - UInt32 version; - UInt16 icnID; // icon to display on the list - Boolean selected; - - Char nameP[50]; // game name to display in list - Char pathP[150]; // path to the game files - Char gameP[15]; // scumm name of the game - UInt16 gfxMode; - - Boolean autoLoad; - Boolean bootParam; - Boolean setPlatform; - Boolean subtitles; - Boolean talkSpeed; - - UInt16 loadSlot; - UInt16 bootValue; - UInt16 talkValue; - UInt8 platform; - UInt8 language; // |- v2.5 - - Boolean filter; // v2.6 - Boolean fullscreen; // | - Boolean aspectRatio; // |- v2.7 - - MusicInfoType musicInfo;// v3.0 - - UInt8 engine; // |- v3.1 - UInt8 renderMode; // |- v3.2 -// Boolean use16Bit; // |- v3.3 // removed - UInt8 fmQuality; // |- v3.4 // replace use16Bit -} GameInfoType; - -enum { - ENGINE_SKY = 0, - ENGINE_SWORD1, - ENGINE_SWORD2, - ENGINE_CINE, - ENGINE_QUEEN, - ENGINE_LURE, - ENGINE_GOB, - ENGINE_KYRA, - ENGINE_SAGA, - ENGINE_SCUMM, - ENGINE_AGI, - ENGINE_SIMON, - ENGINE_COUNT -}; - -static const struct { - const char *fileP; - const char *nameP; -} engines[] = { - { "sky", "Beneath a Steel Sky" }, - { "sword1", "Broken Sword 1" }, - { "sword2", "Broken Sword 2" }, - { "cine", "Delphine Cinematique v1.0" }, - { "queen", "Flight of the Amazon Queen" }, - { "lure", "Lure of the Tempress" }, - { "gob", "Gobliiins" }, - { "kyra", "Kyrandia" }, - { "saga", "SAGA Engine" }, - { "scumm", "Scumm Games" }, - { "agi", "Sierra AGI" }, - { "simon", "Simon the Sorcerer" }, -}; - - -// protos -Err GamOpenDatabase (); -void GamImportDatabase (); -void GamCloseDatabase (Boolean ignoreCardParams); -Err GamSortList (); -UInt16 GamGetSelected (); -void GamUnselect (); -Boolean GamJumpTo (Char letter); - -extern DmOpenRef gameDB; - -#endif diff --git a/backends/PalmOS/Src/launcher/launch.cpp b/backends/PalmOS/Src/launcher/launch.cpp deleted file mode 100644 index c57738bb5f..0000000000 --- a/backends/PalmOS/Src/launcher/launch.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include "StarterRsc.h" - -#include "games.h" -#include "start.h" -#include "rumble.h" -#include "extend.h" -#include "globals.h" -#include "features.h" -#include "formUtil.h" -#include "formCards.h" -#include "palmdefs.h" - -#include "init_palmos.h" -#include "init_stuffs.h" - -#include "modules.h" -#include "args.h" - - -#define BUILD_ERROR(m) \ - { StrCopy(msg, m); \ - StrCat(msg, "\n\nPlease check that all required files are installed on your card, and you have enough free storage memory."); \ - goto onError; } - -#define BUILD_FILE(h,m) \ - StrCopy(filename, "/Palm/Programs/ScummVM/Mods/"); \ - StrCat(filename, h); \ - StrCat(filename, m); - -#define CHECK_FILE(m) \ - e = VFSFileOpen(volRefNum, filename, vfsModeRead, &file); \ - if (e) \ - BUILD_ERROR(m) \ - else \ - VFSFileClose(file); - -#define IMPRT_FILE(m) \ - e = VFSImportDatabaseFromFile(volRefNum, filename, &cardNo, &dbID); \ - if (e) \ - BUILD_ERROR(m) - -#define DELET_FILE(f) \ - del_dbID = DmFindDatabase(0, f); \ - if (del_dbID) \ - DmDeleteDatabase(0, del_dbID); - -void ModDelete() { - LocalID del_dbID; - - DELET_FILE("Glbs::Common"); - DELET_FILE("Glbs::Engine"); - DELET_FILE("ScummVM-Engine"); -} - -static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) { - DmOpenRef dbRef = DmOpenDatabase(cardNo, dbID, dmModeReadWrite); - - if (dbRef) { - MemHandle pref = DmGetResource('pref',0); - UInt32 size = 0; - - if (pref) { - SysAppPrefsType *data = (SysAppPrefsType *)MemHandleLock(pref); - size = data->stackSize; - - if (newSize) { - SysAppPrefsType newData; - MemMove(&newData, data, sizeof(SysAppPrefsType)); - newData.stackSize = newSize; - DmWrite(data, 0, &newData, sizeof(SysAppPrefsType)); - } - - MemPtrUnlock(data); - DmReleaseResource(pref); - } - - DmCloseDatabase(dbRef); - } -} - -static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) { -#ifndef _DEBUG_ENGINE - char filename[256]; - UInt16 cardNo; - LocalID dbID; - UInt32 result; - FileRef file; -#endif - char msg[256]; - FormPtr ofmP, frmP; - Err e = errNone; - - ofmP = FrmGetActiveForm(); - frmP = FrmInitForm(ImportForm); - FrmSetActiveForm(frmP); - FrmDrawForm(frmP); - - // In debug mode, the engine files are directly uploaded to the simulator -#ifndef _DEBUG_ENGINE - // engine file ? - BUILD_FILE(engines[engine].fileP, ".engine"); - CHECK_FILE("ScummVM engine file was not found !"); - IMPRT_FILE("Cannot import engine file !"); - - // need more files ? - dbID = DmFindDatabase(0, "ScummVM-Engine"); // be sure to have the correct dbID - e = SysAppLaunch(cardNo, dbID, 0, sysAppLaunchCustomEngineGetInfo, 0, &result); - *armP = ((result & GET_MODEARM) == GET_MODEARM); - - // common file ? - if (!e && (result & GET_DATACOMMON)) { - BUILD_FILE("common", ".data"); - CHECK_FILE("Common data file was not found !"); - IMPRT_FILE("Cannot import common data file !"); - } - // data file ? - if (!e && (result & GET_DATAENGINE)) { - BUILD_FILE(engines[engine].fileP, ".data"); - CHECK_FILE("Engine data file was not found !"); - IMPRT_FILE("Cannot import engine data file !"); - } -#endif - // if error, cleanup - if (e) ModDelete(); - -onError: - FrmEraseForm(frmP); - FrmDeleteForm(frmP); - if (e) { - if (ofmP) FrmSetActiveForm(ofmP); - FrmCustomAlert(FrmErrorAlert, msg, 0, 0); - } - - return e; -} - -#undef DELET_FILE -#undef CHECK_FILE -#undef BUILD_FILE - -Boolean StartScummVM() { - Char **argvP; - UInt8 lightspeed, argc = 0; - UInt32 stackSize; - Boolean toLauncher, direct, isARM; - UInt8 engine; - Char num[6]; - - UInt16 index = GamGetSelected(); - - argvP = ArgsInit(); - direct = false; - - // start command line (exec name) - ArgsAdd(&argvP[argc], "-", NULL, &argc); - - // no game selected - if (index == dmMaxRecordIndex) { - ListPtr listP; - UInt16 whichButton; - - // init form - FormPtr frmP = FrmInitForm(EngineForm); - listP = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EngineListList)); - itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *)); - - for (int i = 0; i < ENGINE_COUNT; i++) - itemsText[i] = (Char *)engines[i].nameP; - - LstSetListChoices (listP, itemsText, ENGINE_COUNT); - LstSetSelection(listP, 0); - - whichButton = FrmDoDialog(frmP); - engine = LstGetSelection(listP); - - FrmDeleteForm(frmP); - MemPtrFree(itemsText); - itemsText = NULL; - - if (whichButton == EngineCancelButton) { - if (bDirectMode) { - // and force exit if nothing selected - EventType event; - event.eType = keyDownEvent; - event.data.keyDown.chr = vchrLaunch; - event.data.keyDown.modifiers = commandKeyMask; - EvtAddUniqueEventToQueue(&event, 0, true); - } - // free args - ArgsFree(argvP); - return false; - } - - // default values - if (bDirectMode) - gPrefs->card.volRefNum = parseCards(); // always use the first removable card available (?) - gVars->filter = true; - gVars->palmVolume = 50; - gVars->fmQuality = FM_QUALITY_INI; - direct = true; - - // somthing selected - } else { - Char pathP[256]; - MemHandle recordH; - GameInfoType *gameInfoP; - - recordH = DmQueryRecord(gameDB,index); - gameInfoP = (GameInfoType *)MemHandleLock(recordH); - engine = gameInfoP->engine; - - // build path - StrCopy(pathP,"/Palm/Programs/ScummVM/Games/"); - if (gameInfoP->pathP[0] == '/') - StrCopy(pathP, gameInfoP->pathP); - else if (!(gameInfoP->pathP[0] == '.' && StrLen(gameInfoP->pathP) == 1)) - StrCat(pathP, gameInfoP->pathP); - - // path - ArgsAdd(&argvP[argc], "-p", pathP, &argc); - - // language - if (gameInfoP->language > 0) { - const Char *lang = "zh\0cz\0gb\0en\0fr\0de\0hb\0it\0jp\0kr\0pl\0pt\0ru\0es\0se\0"; - ArgsAdd(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc); - } - - // fullscreen ? - if (gameInfoP->fullscreen) - ArgsAdd(&argvP[argc], "-f", NULL, &argc); - - // aspect-ratio ? - ArgsAdd(&argvP[argc], (gameInfoP->aspectRatio ? "--aspect-ratio" : "--no-aspect-ratio"), NULL, &argc); - - // gfx mode - gVars->filter = gameInfoP->filter; - - switch (gameInfoP->renderMode) { - case 1: - ArgsAdd(&argvP[argc], "--render-mode=", "amiga", &argc); - break; - case 2: - ArgsAdd(&argvP[argc], "--render-mode=", "cga", &argc); - break; - case 3: - ArgsAdd(&argvP[argc], "--render-mode=", "ega", &argc); - break; - case 4: - ArgsAdd(&argvP[argc], "--render-mode=", "hercAmber", &argc); - break; - case 5: - ArgsAdd(&argvP[argc], "--render-mode=", "hercGreen", &argc); - break; - } - - switch (gameInfoP->gfxMode) { - case 1: - ArgsAdd(&argvP[argc], "-g", "wide", &argc); - break; - default: - ArgsAdd(&argvP[argc], "-g", "1x", &argc); - break; - } - - // load state - if (gameInfoP->autoLoad) { - StrIToA(num, gameInfoP->loadSlot); - ArgsAdd(&argvP[argc], "-x", num, &argc); - } - // boot script parameter - if (gameInfoP->bootParam) { - StrIToA(num, gameInfoP->bootValue); - ArgsAdd(&argvP[argc], "-b", num, &argc); - } - // not a PC version - if (gameInfoP->setPlatform) { - static const char *platform[] = { - "3do", - "acorn", - "amiga", - "atari", - "c64", - "pc", - "fmtowns", - "linux", - "mac", - "nes", - "segacd", - "windows" - }; - ArgsAdd(&argvP[argc], "--platform=", platform[gameInfoP->platform], &argc); - } - - // subtitles - if (gameInfoP->subtitles) - ArgsAdd(&argvP[argc], "-n", NULL, &argc); - - // multi midi ? - if (gameInfoP->musicInfo.sound.multiMidi) - ArgsAdd(&argvP[argc], "--multi-midi", NULL, &argc); - - if (engine == ENGINE_SCUMM) { - // music tempo - StrIToA(num, gameInfoP->musicInfo.sound.tempo); - ArgsAdd(&argvP[argc], "--tempo=", num, &argc); - } - - // talk speed - if (gameInfoP->talkSpeed) { - StrIToA(num, gameInfoP->talkValue); - ArgsAdd(&argvP[argc], "--talkspeed=", num, &argc); - } - - // music driver - if (gameInfoP->musicInfo.sound.music) { - static char *drv[] = { - "auto", - "null", - "adlib", - "towns", - "pcjr", - "native", - "pcspk" - }; - - if (StrCompare(drv[gameInfoP->musicInfo.sound.drvMusic], "native") == 0) { - if (OPTIONS_TST(kOptDeviceZodiac)) - ArgsAdd(&argvP[argc], "-e", "zodiac", &argc); // Tapwave Zodiac - else if (OPTIONS_TST(kOptSonyPa1LibAPI)) - ArgsAdd(&argvP[argc], "-e", "ypa1", &argc); // Pa1Lib devices - else - ArgsAdd(&argvP[argc], "-e", "auto", &argc); // no driver, switch to auto - } else { - ArgsAdd(&argvP[argc], "-e", drv[gameInfoP->musicInfo.sound.drvMusic], &argc); - } - - // output rate - UInt32 rates[] = {4000, 8000, 11025, 22050, 44100}; - StrIToA(num, rates[gameInfoP->musicInfo.sound.rate]); - ArgsAdd(&argvP[argc], "--output-rate=", num, &argc); - - // FM quality - gVars->fmQuality = gameInfoP->fmQuality; - - } else { - ArgsAdd(&argvP[argc], "-e", "null", &argc); - } - - // volume control - StrIToA(num, gameInfoP->musicInfo.volume.sfx); - ArgsAdd(&argvP[argc], "-s", num, &argc); - StrIToA(num, gameInfoP->musicInfo.volume.music); - ArgsAdd(&argvP[argc], "-m", num, &argc); - StrIToA(num, gameInfoP->musicInfo.volume.speech); - ArgsAdd(&argvP[argc], "-r", num, &argc); - - // game name - ArgsAdd(&argvP[argc], gameInfoP->gameP, NULL, &argc); - - // others globals data - gVars->CD.enable = gameInfoP->musicInfo.sound.CD; - gVars->CD.driver = gameInfoP->musicInfo.sound.drvCD; - gVars->CD.format = gameInfoP->musicInfo.sound.frtCD; - gVars->CD.volume = gameInfoP->musicInfo.volume.audiocd; - gVars->CD.defaultTrackLength = gameInfoP->musicInfo.sound.defaultTrackLength; - gVars->CD.firstTrack = gameInfoP->musicInfo.sound.firstTrack; - gVars->palmVolume = gameInfoP->musicInfo.sound.music ? gameInfoP->musicInfo.volume.palm : 0; - - MemHandleUnlock(recordH); - } // end no game / game selected - - // common command line options - - // debug level - if (gPrefs->debug) { - StrIToA(num, gPrefs->debugLevel); - ArgsAdd(&argvP[argc], "-d", num, &argc); - } - - if (engine == ENGINE_QUEEN || engine == ENGINE_SKY) { - // alternative intro ? - if (gPrefs->altIntro) - ArgsAdd(&argvP[argc], "--alt-intro", NULL, &argc); - } - - if (engine == ENGINE_SCUMM) { - // demo mode ? - if (gPrefs->demoMode) - ArgsAdd(&argvP[argc], "--demo-mode", NULL, &argc); - } - - // copy protection ? - if (gPrefs->copyProtection) - ArgsAdd(&argvP[argc], "--copy-protection", NULL, &argc); - - // exceed max args ? - if (argc > MAX_ARG) - FrmCustomAlert(FrmErrorAlert, "Too many parameters.",0,0); - - // set some common options - stackSize = (gPrefs->setStack ? STACK_LARGER : STACK_DEFAULT); - lightspeed= (gPrefs->lightspeed.enable ? gPrefs->lightspeed.mode : 255); - toLauncher= (gPrefs->exitLauncher); - - // gVars values - // (gVars->HRrefNum defined in checkHRmode on Clié) - gVars->VFS.volRefNum = gPrefs->card.volRefNum; - gVars->vibrator = gPrefs->vibrator; - gVars->stdPalette = gPrefs->stdPalette; - gVars->VFS.cacheSize = (gPrefs->card.useCache ? gPrefs->card.cacheSize : 0); - gVars->indicator.showLED= gPrefs->card.showLED; - gVars->stylusClick = gPrefs->stylusClick; - gVars->autoSave = (gPrefs->autoSave ? gPrefs->autoSavePeriod : -1); - gVars->advancedMode = gPrefs->advancedMode; - gVars->arrowKeys = gPrefs->arrowKeys; - - // user params - HWR_RSTALL(); - - if (gPrefs->goLCD) - HWR_SET(INIT_GOLCD); - else - OPTIONS_RST(kOptGoLcdAPI); - - if (!gPrefs->autoOff) - HWR_SET(INIT_AUTOOFF); - - if (gVars->vibrator) - HWR_SET(INIT_VIBRATOR); -/* ???? - if ( musicDriver == 1 || - musicDriver == 3 || - musicDriver == 4 || - musicDriver == sysInvalidRefNum) { - HWR_SET(INIT_PA1LIB); - } -*/ - if (ModImport(gVars->VFS.volRefNum, engine, &isARM) != errNone) { - if (bDirectMode) { - // and force exit if nothing selected - EventType event; - event.eType = keyDownEvent; - event.data.keyDown.chr = vchrLaunch; - event.data.keyDown.modifiers = commandKeyMask; - EvtAddUniqueEventToQueue(&event, 0, true); - } - ArgsFree(argvP); - return false; - } - - // reset mode if screen rotation occured (DIA only) - if (!direct && OPTIONS_TST(kOptCollapsible)) { - UInt8 mode = PalmScreenSize(0,0, &(gVars->screenFullWidth), &(gVars->screenFullHeight)); - OPTIONS_RST(kOptModeLandscape); - OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone); - } - - // free and save globals pref memory - GamCloseDatabase(false); - FrmCloseAllForms(); - SavePrefs(); - - { - UInt16 cardNo; - UInt32 dbID; - - LaunchParamType *cmdPBP = (LaunchParamType *)MemPtrNew(sizeof(LaunchParamType)); - - MemPtrSetOwner(cmdPBP, 0); - MemPtrSetOwner(gVars, 0); - ArgsSetOwner(argvP, 0); - - cardNo = 0; - dbID = DmFindDatabase(0, "ScummVM-Engine"); - - if (isARM) - FtrSet(appFileCreator, ftrStack , (stackSize * 4)); - else - ModSetStack(stackSize, cardNo, dbID); - - cmdPBP->args.argc = argc; - cmdPBP->args.argv = argvP; - cmdPBP->gVars = gVars; - cmdPBP->lightspeed = lightspeed; - cmdPBP->exitLauncher = toLauncher; - - SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch, cmdPBP); - bLaunched = true; - } - - return false; -} diff --git a/backends/PalmOS/Src/launcher/skin.cpp b/backends/PalmOS/Src/launcher/skin.cpp deleted file mode 100644 index f38fe88d46..0000000000 --- a/backends/PalmOS/Src/launcher/skin.cpp +++ /dev/null @@ -1,611 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include - -#include "start.h" -#include "games.h" -#include "globals.h" -#include "skin.h" -#include "StarterRsc.h" - -UInt16 lastIndex = dmMaxRecordIndex; // last select index in the list to prevent flash -static WinHandle winLockH = NULL; - -MemPtr SknScreenLock(WinLockInitType initMode) { - Err e; - RectangleType r; - - WinGetBounds(WinGetDisplayWindow(), &r); - winLockH = WinCreateOffscreenWindow(r.extent.x, r.extent.y, nativeFormat, &e); - WinSetDrawWindow(winLockH); - - if (initMode == winLockCopy) - WinCopyRectangle(WinGetDisplayWindow(), winLockH, &r, 0, 0, winPaint); - - return BmpGetBits(WinGetBitmap(winLockH)); -} - -void SknScreenUnlock() { - RectangleType r; - - WinGetBounds(winLockH, &r); - WinCopyRectangle(winLockH, WinGetDisplayWindow(), &r, 0, 0, winPaint); - WinSetDrawWindow(WinGetDisplayWindow()); - WinDeleteWindow(winLockH, false); - winLockH = NULL; -} - -static void SknGetListColors(DmOpenRef skinDBP, UInt8 *text, UInt8 *selected, UInt8 *background) { - UInt16 colIndex; - MemHandle colH; - UInt8 *colTemp; - - // default - *text = UIColorGetTableEntryIndex (UIMenuForeground); - *selected = UIColorGetTableEntryIndex (UIMenuSelectedForeground); - *background = UIColorGetTableEntryIndex (UIMenuSelectedFill); - - if (skinDBP) { - colIndex = DmFindResource (skinDBP, sknColorsRsc, skinColors, NULL); - - if (colIndex != (UInt16)-1) { - colH = DmGetResourceIndex(skinDBP, colIndex); - - if (colH) { - colTemp = (UInt8 *)MemHandleLock(colH); - - *text = colTemp[0]; - *selected = colTemp[1]; - *background = colTemp[2]; - - MemPtrUnlock(colTemp); - DmReleaseResource(colH); - } - } - } -} - -static void SknCopyBits(DmOpenRef skinDBP, DmResID bitmapID, const RectangleType *srcRect, Coord destX, Coord destY) { - MemHandle hTemp; - BitmapPtr bmpTemp; - UInt16 index; - - Coord cx, cy, cw, ch, bw, bh; - RectangleType copy, old; - - if (skinDBP) { - // find the bitmap - index = DmFindResource (skinDBP, bitmapRsc, bitmapID, NULL); - - if (index != (UInt16)-1) { - hTemp = DmGetResourceIndex(skinDBP,index); - - if (hTemp) { - bmpTemp = (BitmapType *)MemHandleLock(hTemp); - BmpGlueGetDimensions(bmpTemp, &bw, &bh, 0); - - if (!srcRect) { - cx = 0; - cy = 0; - cw = bw; - ch = bh; - } else { - cx = srcRect->topLeft.x; - cy = srcRect->topLeft.y; - cw = srcRect->extent.x; - ch = srcRect->extent.y; - } - - if (ch) { - WinGetClip(&old); - if (OPTIONS_TST(kOptModeHiDensity)) { - Err e; - BitmapTypeV3 *bmp2P; - - // create an uncompressed version of the bitmap - WinHandle win = WinCreateOffscreenWindow(bw, bh, screenFormat, &e); - WinHandle old = WinGetDrawWindow(); - WinSetDrawWindow(win); - WinDrawBitmap(bmpTemp, 0, 0); - WinSetDrawWindow(old); - - bmp2P = BmpCreateBitmapV3(WinGetBitmap(win), kDensityDouble, BmpGetBits(WinGetBitmap(win)), NULL); - - copy.topLeft.x = destX / 2; - copy.topLeft.y = destY / 2; - copy.extent.x = cw / 2; - copy.extent.y = ch / 2; - - WinSetClip(©); - WinDrawBitmap((BitmapPtr)bmp2P, (destX - cx) / 2, (destY - cy) / 2); - BmpDelete((BitmapPtr)bmp2P); - WinDeleteWindow(win, false); - - } else { - copy.topLeft.x = destX; - copy.topLeft.y = destY; - copy.extent.x = cw; - copy.extent.y = ch; - - HRWinSetClip(gVars->HRrefNum, ©); - HRWinDrawBitmap(gVars->HRrefNum, bmpTemp, destX - cx, destY - cy); - } - WinSetClip(&old); - } - - MemPtrUnlock(bmpTemp); - DmReleaseResource(hTemp); - } - } - } -} - -void SknApplySkin() { - DmOpenRef skinDBP; - RectangleType r; - FormPtr frmP = FrmGetActiveForm(); - - // draw skin - FrmDrawForm(frmP); - SknScreenLock(winLockCopy); - - skinDBP = SknOpenSkin(); - - if (gPrefs->card.volRefNum != vfsInvalidVolRef) - FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap)); - else - FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap)); - - WinSetForeColor(255); - WinSetDrawMode(winPaint); - WinDrawLine (0, 14, 159, 14); - WinDrawLine (0, 13, 159, 13); - - SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &r); - SknCopyBits(skinDBP, skinBackgroundImageTop, 0, r.topLeft.x, r.topLeft.y); - SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &r); - SknCopyBits(skinDBP, skinBackgroundImageBottom, 0, r.topLeft.x, r.topLeft.y); - - for (UInt16 resID = 1100; resID <= 7000; resID += 100) { - SknSetState(skinDBP, resID, sknStateNormal); - SknShowObject(skinDBP, resID); - } - - SknCloseSkin(skinDBP); - SknScreenUnlock(); - SknUpdateList(); -} - -void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP) { - - UInt16 bmpIndex, strIndex; - MemHandle hBmp, hStr; - BitmapType *bmpTemp; - UInt8 *strTemp; - - RctSetRectangle(rP, 0, 0, 0, 0); - - if (skinDBP) { - bmpIndex = DmFindResource (skinDBP, bitmapRsc, resID, NULL); - - if (bmpIndex != (UInt16)-1) { // if bmp exists - strIndex = DmFindResource (skinDBP, sknPosRsc, resID, NULL); - - if (strIndex != (UInt16)-1) { // if params exist - hBmp = DmGetResourceIndex(skinDBP,bmpIndex); - - if (hBmp) { - hStr = DmGetResourceIndex(skinDBP,strIndex); - - if (hStr) { - // buttons : state|x|y|w/h slider|draw mode|x1/y1 keep|x2/y2 keep slider - // list (160mode) : state|x|y|w|h| - bmpTemp = (BitmapType *)MemHandleLock(hBmp); - strTemp = (UInt8 *)MemHandleLock(hStr); - - BmpGlueGetDimensions(bmpTemp, &(rP->extent.x), &(rP->extent.y), 0); - rP->topLeft.x = strTemp[sknInfoPosX] * 2; - rP->topLeft.y = strTemp[sknInfoPosY] * 2; - - MemPtrUnlock(strTemp); - DmReleaseResource(hStr); - } - - MemPtrUnlock(bmpTemp); - DmReleaseResource(hBmp); - } - } - } - } -} - -DmOpenRef SknOpenSkin() { - return DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly); -} - -void SknCloseSkin(DmOpenRef skinDBP) { - if (skinDBP) - DmCloseDatabase(skinDBP); -} - -UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState) { - - UInt16 index; - MemHandle hStr; - UInt8 *strTemp; - UInt8 oldState = 0; - - if (skinDBP) { - index = DmFindResource (skinDBP, sknPosRsc, resID, NULL); - - if (index != (UInt16)-1) { - hStr = DmGetResourceIndex(skinDBP, index); - - if (hStr) { - strTemp = (UInt8 *)MemHandleLock(hStr); - oldState = strTemp[sknInfoState]; - - if (oldState != newState) { - DmWrite(strTemp, 0, &newState, 1); - } - - MemPtrUnlock(strTemp); - DmReleaseResource(hStr); - } - } - } - - return oldState; -} - -UInt8 SknGetDepth(DmOpenRef skinDBP) { - UInt16 index; - MemHandle hStr; - UInt8 *strTemp; - UInt8 depth = 8; - - if (skinDBP) { - index = DmFindResource (skinDBP, sknDepthRsc, skinDepth, NULL); - - if (index != (UInt16)-1) { - hStr = DmGetResourceIndex(skinDBP, index); - - if (hStr) { - strTemp = (UInt8 *)MemHandleLock(hStr); - depth = *strTemp; - MemPtrUnlock(strTemp); - DmReleaseResource(hStr); - } - } - } - - return depth; -} - -UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID) { - UInt16 index; - MemHandle hStr; - UInt8 *strTemp; - UInt8 oldState = sknStateDisabled; - - if (skinDBP) { - index = DmFindResource (skinDBP, sknPosRsc, resID, NULL); - - if (index != (UInt16)-1) { - hStr = DmGetResourceIndex(skinDBP, index); - - if (hStr) { - strTemp = (UInt8 *)MemHandleLock(hStr); - oldState = strTemp[sknInfoState]; - MemPtrUnlock(strTemp); - DmReleaseResource(hStr); - } - } - } - - return oldState; -} - -void SknShowObject(DmOpenRef skinDBP, DmResID resID) { - RectangleType r; - UInt8 state = SknGetState(skinDBP, resID); - SknGetObjectBounds(skinDBP, resID, &r); - SknCopyBits(skinDBP, resID + state, NULL, r.topLeft.x, r.topLeft.y); -} - -void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP) { - DmOpenRef skinDBP; - UInt16 strIndex; - MemHandle hStr; - UInt8 *strTemp; - UInt16 x,y,w,h; - - skinDBP = DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly); - if (skinDBP) { - strIndex = DmFindResource (skinDBP, sknPosRsc, skinList, NULL); - - if (strIndex != 0xFFFF) { // if params exist - hStr = DmGetResourceIndex(skinDBP,strIndex); - if (hStr) { - strTemp = (UInt8 *)MemHandleLock(hStr); - - x = strTemp[sknInfoPosX]; - y = strTemp[sknInfoPosY]; - w = strTemp[sknInfoListWidth]; - h = strTemp[sknInfoListSize] * sknInfoListItemSize; - - if (rAreaP) - RctSetRectangle(rAreaP ,x, y, w, h); - if (rArea2xP) - RctSetRectangle(rArea2xP, x+x, y+y, w+w, h+h); - - MemHandleUnlock(hStr); - DmReleaseResource(hStr); - } - } - - DmCloseDatabase(skinDBP); - } -} - -static void SknRedrawTools(DmOpenRef skinDBP) { - if (GamGetSelected() == dmMaxRecordIndex) { - if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateNormal) { - SknSetState(skinDBP, skinButtonGameDelete,sknStateDisabled); - SknShowObject(skinDBP, skinButtonGameDelete); - } - if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateNormal) { - SknSetState(skinDBP, skinButtonGameEdit,sknStateDisabled); - SknShowObject(skinDBP, skinButtonGameEdit); - } - if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateNormal) { - SknSetState(skinDBP, skinButtonGameAudio,sknStateDisabled); - SknShowObject(skinDBP, skinButtonGameAudio); - } - - } else { - if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateDisabled) { - SknSetState(skinDBP, skinButtonGameDelete,sknStateNormal); - SknShowObject(skinDBP, skinButtonGameDelete); - } - if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateDisabled) { - SknSetState(skinDBP, skinButtonGameEdit,sknStateNormal); - SknShowObject(skinDBP, skinButtonGameEdit); - } - if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateDisabled) { - SknSetState(skinDBP, skinButtonGameAudio,sknStateNormal); - SknShowObject(skinDBP, skinButtonGameAudio); - } - } -} - -static void SknRedrawSlider(DmOpenRef skinDBP, UInt16 index, UInt16 maxIndex, UInt16 perPage) { - if (maxIndex <= perPage) { - if (SknGetState(skinDBP,skinSliderUpArrow) != sknStateDisabled) { - SknSetState(skinDBP,skinSliderUpArrow,sknStateDisabled); - SknShowObject(skinDBP,skinSliderUpArrow); - } - if (SknGetState(skinDBP,skinSliderDownArrow) != sknStateDisabled) { - SknSetState(skinDBP,skinSliderDownArrow,sknStateDisabled); - SknShowObject(skinDBP,skinSliderDownArrow); - } - - } else { - if (SknGetState(skinDBP,skinSliderUpArrow) == sknStateDisabled) { - SknSetState(skinDBP,skinSliderUpArrow,sknStateNormal); - SknShowObject(skinDBP,skinSliderUpArrow); - } - if (SknGetState(skinDBP,skinSliderDownArrow) == sknStateDisabled) { - SknSetState(skinDBP,skinSliderDownArrow,sknStateNormal); - SknShowObject(skinDBP,skinSliderDownArrow); - } - } -} - -void SknUpdateList() { - MemHandle record; - Int32 index, maxIndex, maxView; - GameInfoType *game; - RectangleType rArea, rField, rCopy, rArea2x; - DmOpenRef skinDBP; - - UInt8 txtColor, norColor, selColor, bkgColor; - UInt16 x,y; - - SknScreenLock(winLockCopy); - - SknGetListBounds(&rArea, &rArea2x); - skinDBP = SknOpenSkin(); - // set default bg - WinSetForeColor(UIColorGetTableEntryIndex (UIFormFill)); - WinDrawRectangle(&rArea,0); - // copy top bg - SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &rField); - RctGetIntersection(&rArea2x, &rField, &rCopy); - x = rCopy.topLeft.x; - y = rCopy.topLeft.y; - rCopy.topLeft.x -= rField.topLeft.x; - rCopy.topLeft.y -= rField.topLeft.y; - SknCopyBits(skinDBP, skinBackgroundImageTop, &rCopy, x, y); - // copy bottom bg - SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &rField); - RctGetIntersection(&rArea2x, &rField, &rCopy); - x = rCopy.topLeft.x; - y = rCopy.topLeft.y; - rCopy.topLeft.x -= rField.topLeft.x; - rCopy.topLeft.y -= rField.topLeft.y; - SknCopyBits(skinDBP, skinBackgroundImageBottom, &rCopy, x, y); - - FntSetFont(stdFont); - - index = gPrefs->listPosition; - maxIndex = DmNumRecords(gameDB); - maxView = rArea.extent.y / sknInfoListItemSize; - - if (index > 0 && (index + maxView) > maxIndex) - index -= (index + maxView) - maxIndex; - - if (index < 0) - index = 0; - - gPrefs->listPosition = index; - - SknRedrawSlider(skinDBP, index, maxIndex, maxView); - SknRedrawTools(skinDBP); - SknGetListColors(skinDBP, &norColor, &selColor, &bkgColor); - - SknCloseSkin(skinDBP); - - while (index < (gPrefs->listPosition + maxView) && index < maxIndex) { - record = DmQueryRecord(gameDB, index); - game = (GameInfoType *)MemHandleLock(record); - - // text box - RctSetRectangle(&rField, rArea.topLeft.x, (rArea.topLeft.y + sknInfoListItemSize * (index - gPrefs->listPosition)), rArea.extent.x, sknInfoListItemSize); - WinSetClip(&rField); - - if (game->selected) { - WinSetDrawMode(winPaint); - WinSetForeColor(bkgColor); - WinDrawRectangle(&rField,0); - txtColor = selColor; - } - else - txtColor = norColor; - - // clipping - rField.topLeft.x += 2; - rField.extent.x -= 4; - WinSetClip(&rField); - // draw text mask - WinSetTextColor(255); - WinSetDrawMode(winMask); - WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y); - // draw text - if (txtColor) { - WinSetTextColor(txtColor); - WinSetDrawMode(winOverlay); - WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y); - } - - MemHandleUnlock(record); - index++; - } - - RctSetRectangle(&rArea,0,0,160,160); - WinSetClip(&rArea); - SknScreenUnlock(); -} - -UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my) { - UInt16 resID; - RectangleType r; - - mx *= 2; - my *= 2; - - if (skinDBP) { - for (resID = 1100; resID <= 7000; resID += 100) { - if (SknGetState(skinDBP, resID) != sknStateDisabled) { - SknGetObjectBounds(skinDBP, resID, &r); - if (RctPtInRectangle(mx, my, &r)) { - return resID; - } - } - } - } - - return 0; -} - -void SknSelect(Coord x, Coord y) { - RectangleType rArea; - SknGetListBounds(&rArea,0); - - if (RctPtInRectangle(x, y, &rArea)) { - UInt16 index; - MemHandle record; - GameInfoType *game; - UInt16 oldIndex; - - index = (y - rArea.topLeft.y) / sknInfoListItemSize + gPrefs->listPosition; - - if (index == lastIndex) - return; - - if (index < DmNumRecords(gameDB)) { - Boolean newValue; - - oldIndex = GamGetSelected(); - - if (oldIndex != index && oldIndex != dmMaxRecordIndex) - GamUnselect(); - - record = DmGetRecord(gameDB, index); - game = (GameInfoType *)MemHandleLock(record); - - newValue = !game->selected; - DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); - - MemHandleUnlock(record); - DmReleaseRecord (gameDB, index, 0); - - lastIndex = index; - SknUpdateList(); - } - } -} - -Boolean SknProcessArrowAction(UInt16 button) { - Boolean handled = false; - - switch (button) { - case skinSliderUpArrow: - if (gPrefs->listPosition > 0) { - gPrefs->listPosition--; - SknUpdateList(); - } - handled = true; - break; - - case skinSliderDownArrow: - RectangleType rArea; - UInt16 maxView; - - SknGetListBounds(&rArea, 0); - maxView = rArea.extent.y / sknInfoListItemSize; - - if (gPrefs->listPosition < DmNumRecords(gameDB)-maxView) { - gPrefs->listPosition++; - SknUpdateList(); - } - handled = true; - break; - } - - return handled; -} diff --git a/backends/PalmOS/Src/launcher/skin.h b/backends/PalmOS/Src/launcher/skin.h deleted file mode 100644 index 2047532fd8..0000000000 --- a/backends/PalmOS/Src/launcher/skin.h +++ /dev/null @@ -1,130 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __SKIN_H__ -#define __SKIN_H__ - -// skin -#define sknInfoState 0 -#define sknInfoPosX 1 -#define sknInfoPosY 2 - -#define sknInfoMaxWOrH 3 -#define sknInfoDrawMode 4 -#define sknInfoKeepXOrY1 5 -#define sknInfoKeepXOrY2 7 - -#define sknInfoListWidth sknInfoMaxWOrH -#define sknInfoListHeight sknInfoDrawMode -#define sknInfoListSize sknInfoListHeight -#define sknInfoListItemSize 12 - -#define sknPosRsc 'sPos' -#define sknColorsRsc 'sCol' -#define sknDepthRsc 'sDep' - -#define sknStateNormal 0 -#define sknStateSelected 10 -#define sknStateDisabled 20 - -#define sknSelectedState(bmp) (bmp + sknStateSelected) -#define sknDisabledState(bmp) (bmp + sknStateDisabled) - -// skin elements -#define skinList 500 -#define skinColors 600 -#define skinDepth 700 - -#define skinButtonNone 0 - -#define skinSliderUpArrow 2000 -#define skinSliderDownArrow 2100 - -#define skinButtonGameParams 3000 -#define skinButtonGameAdd 3100 -#define skinButtonGameEdit 3200 -#define skinButtonGameAudio 3300 -#define skinButtonGameDelete 4000 -#define skinButtonGameStart 7000 - -#define skinBackgroundImageTop 1000 -#define skinBackgroundImageBottom 1010 -/// - - -#define skinToolsBackground 1100 - -#define skinListUpArrowNormal 1500 -#define skinListUpArrowOver 1510 -#define skinListUpArrowDisabled 1540 - -#define skinListDownArrowNormal 1800 -#define skinListDownArrowOver 1810 -#define skinListDownArrowDisabled 1840 - -#define skinButtonGameInfoNormal 2000 -#define skinButtonGameInfoOver 2010 -#define skinButtonGameInfoDisabled 2040 - -#define skinButtonGameParamNormal 3000 -#define skinButtonGameParamOver 3010 - -#define skinButtonGameDeleteNormal 4000 -#define skinButtonGameDeleteOver 4010 -#define skinButtonGameDeleteDisabled 4040 - -#define skinButtonVibratorNormal 5000 -#define skinButtonVibratorOver 5010 -#define skinButtonVibratorSelected 5020 -#define skinButtonVibratorSelectedOver 5030 -#define skinButtonVibratorDisabled 5040 - - -#define skinButtonSleepNormal 6000 -#define skinButtonSleepOver 6010 -#define skinButtonSleepSelected 6020 -#define skinButtonSleepSelectedOver 9030 - -#define skinButtonPlayNormal 7000 -#define skinButtonPlayOver 7010 -#define skinButtonPlayDisabled 7040 - -// protos -void SknApplySkin(); -void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP); -DmOpenRef SknOpenSkin(); -void SknCloseSkin(DmOpenRef skinDBP); -UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState); -void SknShowObject(DmOpenRef skinDBP, DmResID resID); -UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID); -void SknUpdateList(); -void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP); -UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my); -void SknSelect(Coord x, Coord y); -Boolean SknProcessArrowAction(UInt16 button); -UInt8 SknGetDepth(DmOpenRef skinDBP); - -extern UInt16 lastIndex; - -#endif diff --git a/backends/PalmOS/Src/launcher/start.cpp b/backends/PalmOS/Src/launcher/start.cpp deleted file mode 100644 index 076c24d6c2..0000000000 --- a/backends/PalmOS/Src/launcher/start.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include - -#include "palmdefs.h" -#include "start.h" -#include "games.h" -#include "globals.h" -#include "modules.h" -#include "skin.h" - -#include "forms.h" - -/*********************************************************************** - * - * Global variables - * - ***********************************************************************/ -GlobalsPreferencePtr gPrefs; -GlobalsDataPtr gVars; - -Boolean bDirectMode = false; -Boolean bStartScumm = false; -Boolean bLaunched = false; - -/*********************************************************************** - * - * Internal Constants - * - ***********************************************************************/ - -// Define the minimum OS version we support (3.5 for now). -#define kOurMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0) -#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) - -/*********************************************************************** - * - * Internal Functions - * - ***********************************************************************/ - -// Callback for ExgDBWrite to send data with Exchange Manager -static Err WriteDBData(const void* dataP, UInt32* sizeP, void* userDataP) { - Err err; - *sizeP = ExgSend((ExgSocketPtr)userDataP, (void*)dataP, *sizeP, &err); - return err; -} - -Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP) { - ExgSocketType exgSocket; - Err err; - - // Create exgSocket structure - MemSet(&exgSocket, sizeof(exgSocket), 0); - exgSocket.description = descriptionP; - exgSocket.name = nameP; - - // Start an exchange put operation - err = ExgPut(&exgSocket); - if (!err) { - err = ExgDBWrite(WriteDBData, &exgSocket, NULL, dbID, cardNo); - err = ExgDisconnect(&exgSocket, err); - } - - return err; -} - - -/*********************************************************************** - * - * FUNCTION: RomVersionCompatible - * - * DESCRIPTION: This routine checks that a ROM version is meet your - * minimum requirement. - * - * PARAMETERS: requiredVersion - minimum rom version required - * (see sysFtrNumROMVersion in SystemMgr.h - * for format) - * launchFlags - flags that indicate if the application - * UI is initialized. - * - * RETURNED: error code or zero if rom is compatible - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) { - UInt32 romVersion; - - // See if we're on in minimum required version of the ROM or later. - FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); - if (romVersion < requiredVersion) { - if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == - (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) { - - FrmAlert (RomIncompatibleAlert); - - // Palm OS 1.0 will continuously relaunch this app unless we switch to - // another safe one. - if (romVersion <= kPalmOS10Version) - AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); - - } - return sysErrRomIncompatible; - } - - return errNone; -} - -/////////////////////////////////////////////////////////////////////// - - -void SavePrefs() { - if (gPrefs) { - PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, gPrefs, sizeof (GlobalsPreferenceType), true); - MemPtrFree(gPrefs); - gPrefs = NULL; - } -} - -/*********************************************************************** - * - * FUNCTION: AppHandleEvent - * - * DESCRIPTION: This routine loads form resources and set the event - * handler for the form loaded. - * - * PARAMETERS: event - a pointer to an EventType structure - * - * RETURNED: true if the event has handle and should not be passed - * to a higher level handler. - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static Boolean AppHandleEvent(EventPtr eventP) { - UInt16 formId; - FormPtr frmP; - - if (eventP->eType == frmLoadEvent) { - // Load the form resource. - formId = eventP->data.frmLoad.formID; - frmP = FrmInitForm(formId); - FrmSetActiveForm(frmP); - - // Set the event handler for the form. The handler of the currently - // active form is called by FrmHandleEvent each time is receives an - // event. - switch (formId) { - case MainForm: - FrmSetEventHandler(frmP, MainFormHandleEvent); - break; - - case SkinsForm: - FrmSetEventHandler(frmP, SkinsFormHandleEvent); - break; - - case GameEditForm: - FrmSetEventHandler(frmP, EditGameFormHandleEvent); - break; - - case MiscForm: - FrmSetEventHandler(frmP, MiscFormHandleEvent); - break; - - case CardSlotForm: - FrmSetEventHandler(frmP, CardSlotFormHandleEvent); - break; - - case MusicForm: - FrmSetEventHandler(frmP, MusicFormHandleEvent); - break; - - case InfoForm: - FrmSetEventHandler(frmP, InfoFormHandleEvent); - break; - - default: -// ErrFatalDisplay("Invalid Form Load Event"); - break; - } - return true; - } - - return false; -} - -/*********************************************************************** - * - * FUNCTION: AppEventLoop - * - * DESCRIPTION: This routine is the event loop for the application. - * - * PARAMETERS: nothing - * - * RETURNED: nothing - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void AppEventLoop(void) { - UInt16 error; - EventType event; - - do { - EvtGetEvent(&event, evtNoWait); - - if(bStartScumm) - bStartScumm = StartScummVM(); - - if (! SysHandleEvent(&event)) - if (! MenuHandleEvent(0, &event, &error)) - if (! AppHandleEvent(&event)) - FrmDispatchEvent(&event); - - } while (event.eType != appStopEvent); -} - -/*********************************************************************** - * - * FUNCTION: ScummVMPalmMain - * - * DESCRIPTION: This is the main entry point for the application. - * - * PARAMETERS: cmd - word value specifying the launch code. - * cmdPB - pointer to a structure that is associated with the launch code. - * launchFlags - word value providing extra information about the launch. - * - * RETURNED: Result of launch - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData) { - switch (pData->notifyType) { - case sysNotifyVolumeMountedEvent: - pData->handled = true; // don't switch - - if (gPrefs) { // gPrefs exists ? so we are in the palm selector - CardSlotFormUpdate(); // redraw card list if needed - - if (gPrefs->card.volRefNum == vfsInvalidVolRef) { - VFSAnyMountParamType *notifyDetailsP = (VFSAnyMountParamType *)pData->notifyDetailsP; - gPrefs->card.volRefNum = notifyDetailsP->volRefNum; - - if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) - if (gPrefs->card.volRefNum != vfsInvalidVolRef) { - CardSlotCreateDirs(); - FrmUpdateForm(MainForm, frmRedrawUpdateMSImport); - } - } - } - break; - - case sysNotifyVolumeUnmountedEvent: - if (gPrefs) { - CardSlotFormUpdate(); - - if (gPrefs->card.volRefNum == (UInt16)pData->notifyDetailsP) { - gPrefs->card.volRefNum = vfsInvalidVolRef; - - if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) - FrmUpdateForm(MainForm, frmRedrawUpdateMS); - } - } - break; - - case sysNotifyDisplayResizedEvent: - if (gVars) - if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) - SknApplySkin(); - break; - - case sonySysNotifyMsaEnforceOpenEvent: - // what am i supposed to do here ??? - break; - } -} - -static UInt32 ScummVMPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { - Err error; - - error = RomVersionCompatible (kOurMinVersion, launchFlags); - if (error) return (error); - - switch (cmd) { - case sysAppLaunchCmdNotify: - AppLaunchCmdNotify(launchFlags, (SysNotifyParamType *) cmdPBP); - break; - - case sysAppLaunchCustomEngineDelete: -#ifndef _DEBUG_ENGINE - ModDelete(); -#endif - break; - - case sysAppLaunchCmdNormalLaunch: - error = AppStart(); - if (error) - goto end; - - if (!bDirectMode) { - FrmGotoForm(MainForm); - }else { - GamUnselect(); - bStartScumm = true; - } - - AppEventLoop(); -end: - AppStop(); - break; - - default: - break; - - } - return error; -} - -/*********************************************************************** - * - * FUNCTION: PilotMain - * - * DESCRIPTION: This is the main entry point for the application. - * - * PARAMETERS: cmd - word value specifying the launch code. - * cmdPB - pointer to a structure that is associated with the launch code. - * launchFlags - word value providing extra information about the launch. - * RETURNED: Result of launch - * - * REVISION HISTORY: - * - * - ***********************************************************************/ - -UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { - return ScummVMPalmMain(cmd, cmdPBP, launchFlags); -} diff --git a/backends/PalmOS/Src/launcher/start.h b/backends/PalmOS/Src/launcher/start.h deleted file mode 100644 index a30414a54f..0000000000 --- a/backends/PalmOS/Src/launcher/start.h +++ /dev/null @@ -1,97 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __START_H__ -#define __START_H__ - -typedef struct { - Char nameP[32]; - UInt16 cardNo; - LocalID dbID; -} SkinInfoType, *SkinInfoPtr; - -typedef struct { - - //skin params - SkinInfoType skin; // card where is located the skin - Boolean soundClick; - - Boolean vibrator; - Boolean autoOff; - Boolean setStack; - Boolean exitLauncher; - Boolean goLCD; - Boolean stylusClick; - Boolean arrowKeys; - - UInt16 listPosition; - UInt16 autoSavePeriod; - - struct { - UInt16 volRefNum; - UInt32 cacheSize; - Boolean useCache; - Boolean showLED; - Boolean moveDB; - Boolean deleteDB; - Boolean confirmMoveDB; - } card; - - Boolean debug; - UInt16 debugLevel; - Boolean stdPalette; - Boolean demoMode; - Boolean copyProtection; - Boolean oldarm;// TODO : free slot... - Boolean altIntro; - Boolean autoSave; - Boolean advancedMode; - - struct { - Boolean enable; - UInt8 mode; - } lightspeed; - -} GlobalsPreferenceType, *GlobalsPreferencePtr; - -extern GlobalsPreferencePtr gPrefs; - -extern Boolean bDirectMode; -extern Boolean bStartScumm; -extern Boolean bLaunched; - -#define appPrefID 0x00 -#define appVersionNum 0x01 -#define appPrefVersionNum 0x02 - -#define STACK_DEFAULT 8192 -#define STACK_LARGER 16384 -#define STACK_GET 0 - -Err AppStart(void); -void AppStop(void); -Boolean StartScummVM(); -void SavePrefs(); -Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP); -#endif diff --git a/backends/PalmOS/Src/missing/assert.h b/backends/PalmOS/Src/missing/assert.h deleted file mode 100644 index 7bc571ec15..0000000000 --- a/backends/PalmOS/Src/missing/assert.h +++ /dev/null @@ -1,34 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __ASSERT_H__ -#define __ASSERT_H__ - -#ifdef _DEBUG -#define assert(a) ErrFatalDisplayIf(!(a), "Assertion failed: " #a) -#else -#define assert(a) (void)0 -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/ext_stdio.c b/backends/PalmOS/Src/missing/ext_stdio.c deleted file mode 100644 index f7d37a9140..0000000000 --- a/backends/PalmOS/Src/missing/ext_stdio.c +++ /dev/null @@ -1,650 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include - -#define CACHE_SIZE 1024 -enum { - MODE_BUFREAD = 1, - MODE_BUFWRITE, - MODE_BUFNONE -}; - -FILE gStdioOutput = {0,0,0,0,0,0}; -static void dummy(Boolean) {}; - -static LedProc gStdioLedProc = dummy; -static UInt16 gStdioVolRefNum = vfsInvalidVolRef; -static UInt32 gCacheSize = CACHE_SIZE; - -// TODO : implement "errno" - -void StdioInit(UInt16 volRefNum, const Char *output) { // DONE - gStdioVolRefNum = volRefNum; - gStdioOutput.mode = MODE_BUFWRITE; - - VFSFileDelete(gStdioVolRefNum, output); - VFSFileCreate(gStdioVolRefNum, output); - VFSFileOpen (gStdioVolRefNum, output,vfsModeWrite, &gStdioOutput.fileRef); -} - -void StdioSetLedProc(LedProc ledProc) { // DONE - if (ledProc) - gStdioLedProc = ledProc; - else - gStdioLedProc = dummy; -} - -void StdioSetCacheSize(UInt32 s) { // DONE - gCacheSize = s; -} - -void StdioRelease() { // DONE - // there is no cache on stdout/stderr - VFSFileClose(gStdioOutput.fileRef); -} - -UInt16 fclose(FILE *stream) { // DONE - UInt32 numBytesWritten; - Err e; - - if (stream->cacheSize) { - if (stream->bufSize > 0 && stream->mode == MODE_BUFWRITE) - VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); - - MemPtrFree(stream->cache); - } - - e = VFSFileClose(stream->fileRef); - e = MemPtrFree(stream); - - return e; -} - -UInt16 feof(FILE *stream) { // DONE - Err e; - - if (stream->cacheSize) { - switch (stream->mode) { - case MODE_BUFWRITE: - return 0; // never set in this mode - case MODE_BUFREAD: - if (stream->bufSize > 0) - return 0; - break; - } - } - - e = VFSFileEOF(stream->fileRef); - return e; -} - -UInt16 ferror(FILE *stream) { - return (stream->err); -} - -Int16 fgetc(FILE *stream) { - UInt32 numBytesRead; - Char c; - - numBytesRead = fread(&c, 1, 1, stream); - return (int)(numBytesRead == 1 ? c : EOF); -} - -Char *fgets(Char *s, UInt32 n, FILE *stream) { - UInt32 numBytesRead; - - numBytesRead = fread(s, n, 1, stream); - if (numBytesRead) { - UInt32 reset = 0; - Char *endLine = StrChr(s, '\n'); - - if (endLine >= s) { - reset = (endLine - s); - s[reset] = 0; - reset = numBytesRead - (reset + 1); - fseek(stream, -reset, SEEK_CUR); - } - - return s; - } - - return NULL; -} - -FILE *fopen(const Char *filename, const Char *type) { // DONE - Err err; - UInt16 openMode; - Boolean cache = true; - FILE *fileP = (FILE *)MemPtrNew(sizeof(FILE)); - - if (!fileP) - return NULL; - - MemSet(fileP, sizeof(FILE), 0); - - if (StrCompare(type,"r")==0 || StrCompare(type,"rb")==0) { - fileP->mode = MODE_BUFREAD; - openMode = vfsModeRead; - - } else if (StrCompare(type,"w")==0 || StrCompare(type,"wb")==0) { - fileP->mode = MODE_BUFWRITE; - openMode = vfsModeCreate|vfsModeWrite; - - } else { - cache = false; - fileP->mode = MODE_BUFNONE; - openMode = vfsModeReadWrite; - } - - if (cache) { - fileP->cacheSize = gCacheSize; - if (gCacheSize) fileP->cache = (UInt8 *)malloc(gCacheSize); // was MemGluePtrNew - if (!fileP->cache) fileP->cacheSize = 0; - } - - if (openMode & vfsModeRead) { - // if read file : - // first try to load from the specfied card - err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef); - //if err (not found ?) parse each avalaible card for the specified file - if (err) { - UInt16 volRefNum; - UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes; - while (volIterator != vfsIteratorStop) { - err = VFSVolumeEnumerate(&volRefNum, &volIterator); - - if (!err) { - err = VFSFileOpen (volRefNum, filename, openMode, &fileP->fileRef); - if (!err) - return fileP; - } - } - } else { - return fileP; - } - } else { - // if write file : - // use only the specified card - err = VFSFileDelete(gStdioVolRefNum, filename); // delete it if exists - err = VFSFileCreate(gStdioVolRefNum, filename); - openMode = vfsModeWrite; - if (!err) { - err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef); - if (!err) - return fileP; - } - } - - if (fileP->cacheSize) - MemPtrFree(fileP->cache); - - MemPtrFree(fileP); // prevent memory leak - return NULL; -} - -UInt32 fread(void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE - Err e = errNone; - UInt32 numBytesRead, rsize = (size * nitems); - - // try to read on a write only stream ? - if (stream->mode == MODE_BUFWRITE || !rsize) - return 0; - - // cached ? - if (stream->cacheSize) { - // empty buffer ? fill it if required - if (stream->bufSize == 0 && rsize < stream->cacheSize) { - gStdioLedProc(true); - e = VFSFileRead(stream->fileRef, stream->cacheSize, stream->cache, &numBytesRead); - gStdioLedProc(false); - stream->bufSize = numBytesRead; - stream->bufPos = 0; - } - - // we have the data in the cache - if (stream->bufSize >= rsize) { - MemMove(ptr, (stream->cache + stream->bufPos), rsize); - stream->bufPos += rsize; - stream->bufSize -= rsize; - numBytesRead = rsize; - - // not enough but something ? - } else if (stream->bufSize > 0) { - UInt8 *next = (UInt8 *)ptr; - MemMove(ptr, (stream->cache + stream->bufPos), stream->bufSize); - rsize -= stream->bufSize; - gStdioLedProc(true); - e = VFSFileRead(stream->fileRef, rsize, (next + stream->bufSize), &numBytesRead); - gStdioLedProc(false); - numBytesRead += stream->bufSize; - stream->bufSize = 0; - stream->bufPos = 0; - - // nothing in the cache ? - } else { - gStdioLedProc(true); - e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead); - gStdioLedProc(false); - } - - // no ? direct read - } else { - gStdioLedProc(true); - e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead); - gStdioLedProc(false); - } - - if (e == errNone || e == vfsErrFileEOF) - return (UInt32)(numBytesRead / size); - - return 0; -} - -UInt32 fwrite(const void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE - Err e = errNone; - UInt32 numBytesWritten = (size * nitems); - - // try to write on a read only stream ? - if (stream->mode == MODE_BUFREAD || !numBytesWritten) - return 0; - - // cached ? - if (stream->cacheSize) { - // can cache it ? - if ((stream->bufSize + numBytesWritten) <= stream->cacheSize) { - MemMove((stream->cache + stream->bufSize), ptr, numBytesWritten); - stream->bufSize += numBytesWritten; - - // not enough room ? write cached data and new data - } else { - gStdioLedProc(true); - e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); - e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten); - gStdioLedProc(false); - stream->bufSize = 0; - } - - // no ? direct write - } else { - gStdioLedProc(true); - e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten); - gStdioLedProc(false); - } - - if ((e == errNone || e == vfsErrFileEOF)) { - return (UInt32)(numBytesWritten / size); - } - - return 0; -} - -Int16 fseek(FILE *stream, Int32 offset, Int32 whence) { // DONE - UInt32 numBytesWritten; - Err e; - - if (stream->cacheSize) { - switch (stream->mode) { - case MODE_BUFWRITE: - e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); - stream->bufSize = 0; - break; - - case MODE_BUFREAD: - // reposition file postion if needed - if (whence == SEEK_CUR) - e = VFSFileSeek(stream->fileRef, vfsOriginCurrent, -stream->bufSize); - stream->bufSize = 0; - stream->bufPos = 0; - break; - } - } - - e = VFSFileSeek(stream->fileRef, whence, offset); - return (e ? -1 : 0); -} - -Int32 ftell(FILE *stream) { // DONE - Err e; - UInt32 filePos; - - e = VFSFileTell(stream->fileRef ,&filePos); - - if (stream->cacheSize) { - switch (stream->mode) { - case MODE_BUFWRITE: - filePos += stream->bufSize; - break; - - case MODE_BUFREAD: - filePos -= stream->bufSize; - break; - } - } - - if (e) return -1; // errno = ? - return filePos; -} - -Int32 fprintf(FILE *stream, const Char *formatStr, ...) { // DONE - UInt32 numBytesWritten; - Char buf[256]; - va_list va; - - if (!stream->fileRef) - return 0; - - va_start(va, formatStr); - vsprintf(buf, formatStr, va); - va_end(va); - - numBytesWritten = fwrite(buf, StrLen(buf), 1, stream); - return numBytesWritten; -} - -Int32 printf(const Char *format, ...) { // DONE - UInt32 numBytesWritten; - Char buf[256]; - va_list va; - - if (!stdout->fileRef) - return 0; - - va_start(va, format); - vsprintf(buf, format, va); - va_end(va); - - numBytesWritten = fwrite(buf, StrLen(buf), 1, stdout); - return numBytesWritten; -} - -/* needed with 68k mode only, already defined in ARM MSL */ -#ifdef PALMOS_68K - -Int32 sprintf(Char* s, const Char* formatStr, ...) { - Int16 count; - va_list va; - - va_start(va, formatStr); - count = vsprintf(s, formatStr, va); - va_end(va); - - return count; -} - -Int32 snprintf(Char* s, UInt32 len, const Char* formatStr, ...) { - // len is ignored - Int16 count; - va_list va; - - va_start(va, formatStr); - count = vsprintf(s, formatStr, va); - va_end(va); - - return count; -} - - -/* WARNING : vsprintf - * ------- - * This function can handle only %[+- ][.0][field length][sxXdoiucp] format strings - * compiler option : 4byte int mode only ! - * - * TODO : check http://www.ijs.si/software/snprintf/ for a portable implementation of vsnprintf - * This one make use of sprintf so need to check if it works with PalmOS. - */ - -static Char *StrIToBase(Char *s, Int32 i, UInt8 b) { - const Char *conv = "0123456789ABCDEF"; - Char o; - Int16 c, n = 0; - Int32 div, mod; - - do { - div = i / b; - mod = i % b; - - s[n++] = *(conv + mod); - i = div; - - } while (i >= b); - - if (i > 0) { - s[n + 0] = *(conv + i); - s[n + 1] = 0; - } else { - s[n + 0] = 0; - n--; - } - - for (c=0; c <= (n >> 1); c++) { - o = s[c]; - s[c] = s[n - c]; - s[n - c]= o; - } - - return s; -} - -static void StrProcC_(Char *ioStr, UInt16 maxLen) { - Char *found; - Int16 length; - - while (found = StrStr(ioStr, "`c`")) { - if (found[3] == 0) { // if next char is NULL - length = maxLen - (found - ioStr + 2); - MemMove(found, found + 4, length); - maxLen -= 2; - } - } -} - -static void StrProcXO(Char *ioStr, UInt16 maxLen, Char *tmp) { - Char *found, *last, mod, fill; - Int16 len, count, next; - Int32 val; - - while (found = StrChr(ioStr, '`')) { - last = StrChr(found + 1, '`'); - - if (!last) - return; - - *last = 0; - next = 0; - fill = *(found + 1); - mod = *(found + 2); - count = StrAToI(found + 3); - - len = maxLen - (last - ioStr); - MemMove(found, (last + 1), len); - - // x and X always 8char on palmos ... o set to 8char (not supported on palmos) - while ((found[next] == '0' || found[next] == ' ') && next < 8) // WARNING : reduce size only (TODO ?) - next++; - - // convert to base 8 - if (mod == 'o') { - StrNCopy(tmp, found + next, 8 - next); - tmp[8 - next] = 0; - val = StrAToI(tmp); - StrIToBase(tmp, val, 8); // now we have the same but in octal - next = 8 - StrLen(tmp); - MemMove(found + next, tmp, StrLen(tmp)); - } else { - // if val is 0, keep last 0 - if (next == 8) - next = 7; - } - - if ((8 - next) > count) - count = 8 - next; - - if (count == 0) - count = 1; - - len = maxLen - (found - ioStr) - (8 - count); - MemSet(found, next, fill); - MemMove(found, found + (8 - count), len); - - // ... and upper case - if (mod == 'x') { - while (count--) { - if (*found >='A' && *found <='F') - *found = (*found + 32); - found++; - } - } - } -} - -Int32 vsprintf(Char* s, const Char* formatStr, _Palm_va_list argParam) { - Char format[256], result[256], tmp[32]; - - Char *found, *mod, *num; - UInt32 next; - Boolean zero; - Int16 count, len; - - MemSet(format, sizeof(format), 'x'); - MemSet(result, sizeof(result), 'y'); - MemSet(tmp, sizeof(tmp), 'z'); - - StrCopy(format,formatStr); // copy actual formatStr to temp buffer - next = 0; // start of the string - - while (found = StrChr(format + next, '%')) { - mod = found + 1; - - if (*mod == '%') { // just a % ? - mod++; - - } else { - if (*mod == '+' || - *mod == '-' || - *mod == ' ' ) // skip - mod++; - - if (*mod == '0' || - *mod == '.' ) { - *mod++ = '0'; - zero = true; - } else { - zero = false; - } - - num = mod; - while ( *mod >= '0' && - *mod <= '9' ) // search format char - mod++; - - // get the numeric value - if (num < mod) { - StrNCopy(tmp, num, mod - num); - tmp[mod - num] = 0; - count = StrAToI(tmp); - } else { - count = 0; - } - - if (*mod == 'l') // already set to %...l(x) ? - mod++; - - // prepare new format -//#if !defined(PALMOS_ARM) - if (*mod == 'c') { - StrCopy(tmp, "`c`%c%c"); - - } else -//#endif - if (*mod == 'p') { - StrCopy(tmp, "%08lX"); // %x = %08X in palmos - - } else { - len = 0; - - switch (*mod) { - case 'x': - case 'X': - case 'o': - tmp[0] = '`'; - tmp[1] = (zero) ? '0' : ' '; - tmp[2] = *mod; - StrIToA(tmp + 3, count); - len += StrLen(tmp); - tmp[len++] = '`'; - tmp[len] = 0; - - if (*mod == 'o') { // set as base 10 num and convert later - *mod = 'd'; - count = 8; // force 8char - } - - break; - } - - StrNCopy(tmp + len, found, (num - found)); - len += (num - found); - - if (count) { - StrIToA(tmp + len, count); - len += StrLen(tmp + len); - } - - if (*mod == 'd' || - *mod == 'i' || - *mod == 'x' || - *mod == 'X' || - *mod == 'u' - ) { - tmp[len++] = 'l'; - } - - tmp[len + 0] = *mod; - tmp[len + 1] = 0; - } - - mod++; - MemMove(found + StrLen(tmp), mod, StrLen(mod) + 1); - StrNCopy(found, tmp, StrLen(tmp)); - mod = found + StrLen(tmp); - } - - next = (mod - format); - } - - // Copy result in a temp buffer to process last formats - StrVPrintF(result, format, argParam); -//#if !defined(PALMOS_ARM) - StrProcC_(result, 256); -//#endif - StrProcXO(result, 256, tmp); - StrCopy(s, result); - - return StrLen(s); -} - -#endif diff --git a/backends/PalmOS/Src/missing/ext_stdlib.c b/backends/PalmOS/Src/missing/ext_stdlib.c deleted file mode 100644 index 8c8fbd50bd..0000000000 --- a/backends/PalmOS/Src/missing/ext_stdlib.c +++ /dev/null @@ -1,117 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#define memNewChunkFlagAllowLarge 0x1000 -SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP) SYS_TRAP(sysTrapSysGetAppInfo); - -#ifdef PALMOS68K -long strtol(const char *s, char **endptr, int base) { - // WARNING : only base = 10 supported - long val = StrAToI(s); - - if (endptr) { - Char str[maxStrIToALen]; - StrIToA(str, val); - - if (StrNCompare(s, str, StrLen(str)) == 0) - *endptr = (char *)s + StrLen(str); - } - - return val; -} -#endif - -MemPtr __malloc(UInt32 size) { - MemPtr newP = NULL; - - if (size <= 65000) { - newP = MemPtrNew(size); - } else { - SysAppInfoPtr appInfoP; - UInt16 ownerID; - UInt16 attr; - - ownerID = ((SysAppInfoPtr)SysGetAppInfo(&appInfoP, &appInfoP))->memOwnerID; - attr = ownerID|memNewChunkFlagAllowLarge|memNewChunkFlagNonMovable; - - newP = MemChunkNew(0, size, attr); - } - - return newP; -} - -MemPtr calloc(UInt32 nelem, UInt32 elsize) { - MemPtr newP; - UInt32 size = (nelem * elsize); - - newP = malloc(size); // was MemGluePtrNew - - if (newP) - MemSet(newP,size,0); - - return newP; -} - -Err free(MemPtr memP) { - if (memP) - return MemPtrFree(memP); - return memErrInvalidParam; -} - -MemPtr realloc(MemPtr oldP, UInt32 size) { - MemPtr newP; - - if (oldP != NULL) - if (MemPtrResize(oldP, size) == 0) - return oldP; - - newP = malloc(size); // was MemPtrNew - - if (oldP!=NULL) { - MemMove(newP,oldP,MemPtrSize(oldP)); - MemPtrFree(oldP); - } - - return newP; -} - -ErrJumpBuf stdlib_errJumpBuf; -#define ERR_MAGIC 0xDADA - -void exit(Int16 status) { - EventType event; - event.eType = keyDownEvent; - - event.data.keyDown.chr = vchrLaunch; - event.data.keyDown.modifiers = commandKeyMask; -#ifdef PALMOS_ARM - SysEventAddUniqueToQueue(&event, 0, true); -#else - EvtAddUniqueEventToQueue(&event, 0, true); -#endif - - ErrLongJump(stdlib_errJumpBuf, status == 0 ? 0xDADA : status); -} diff --git a/backends/PalmOS/Src/missing/ext_string.c b/backends/PalmOS/Src/missing/ext_string.c deleted file mode 100644 index 319017f790..0000000000 --- a/backends/PalmOS/Src/missing/ext_string.c +++ /dev/null @@ -1,45 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#ifdef PALMOS_68K -void *memchr(const void *s, int c, UInt32 n) { - UInt32 chr; - for(chr = 0; chr < n;chr++,((UInt8 *)s)++) - if ( *((UInt8 *)s) == c) - return (void *)s; - - return NULL; -} - -Char *strdup(const Char *s1) { - Char* buf = (Char *)MemPtrNew(StrLen(s1)+1); - - if(buf) - StrCopy(buf, s1); - - return buf; -} -#endif diff --git a/backends/PalmOS/Src/missing/ext_time.c b/backends/PalmOS/Src/missing/ext_time.c deleted file mode 100644 index 5de64062b0..0000000000 --- a/backends/PalmOS/Src/missing/ext_time.c +++ /dev/null @@ -1,85 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -time_t time(time_t *tloc) { - // get ROM version - UInt32 romVersion; - Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); - - // since 1/1/1904 12AM. - UInt32 secs = TimGetSeconds(); - - // form 1/1/1904 12AM to 1/1/1970 12AM - DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0}; - - secs -= TimDateTimeToSeconds(&Epoch); - - // DST really supported from OS v4.0 - if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) - secs -= (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60; - else - secs -= (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60; - - if (tloc) - *tloc = secs; - - return (secs); -} - - -struct tm *localtime(const time_t *timer) { - static struct tm tmDate; - DateTimeType dt; - UInt32 secs = *timer; - - // get ROM version - UInt32 romVersion; - Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); - - // form 1/1/1904 12AM to 1/1/1970 12AM - DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0}; - - // timer supposed to be based on Epoch - secs += TimDateTimeToSeconds(&Epoch); - - // DST really supported from OS v4.0 - if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) - secs += (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60; - else - secs += (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60; // no sure about this one - - TimSecondsToDateTime (secs, &dt); - - tmDate.tm_sec = dt.second; - tmDate.tm_min = dt.minute; - tmDate.tm_hour = dt.hour; - tmDate.tm_mday = dt.day; - tmDate.tm_mon = dt.month - 1; - tmDate.tm_year = dt.year - 1900; - tmDate.tm_wday = dt.weekDay; - - return &tmDate; -} diff --git a/backends/PalmOS/Src/missing/ext_unistd.c b/backends/PalmOS/Src/missing/ext_unistd.c deleted file mode 100644 index 91f2e8e3e5..0000000000 --- a/backends/PalmOS/Src/missing/ext_unistd.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -const Char *gUnistdCWD = NULL; - -// currently used only to retreive savepath -Char *getcwd(Char *buf, UInt32 size) { - Char *copy = buf; - - if (gUnistdCWD) { - if (!copy) - copy = (Char *)MemPtrNew(StrLen(gUnistdCWD)); // this may never occured - - StrCopy(copy, gUnistdCWD); - } - - return copy; -} \ No newline at end of file diff --git a/backends/PalmOS/Src/missing/fcntl.h b/backends/PalmOS/Src/missing/fcntl.h deleted file mode 100644 index 59daa2ae05..0000000000 --- a/backends/PalmOS/Src/missing/fcntl.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef FCNTL_H -#define FCNTL_H - -#define O_TEXT 0x0 /* 960827: Added this for Visual C++ compatibility. */ -#define O_RDWR 0x1 /* open the file in read/write mode */ /*- mm 980420 -*/ -#define O_RDONLY 0x2 /* open the file in read only mode */ /*- mm 980420 -*/ -#define O_WRONLY 0x4 /* open the file in write only mode */ /*- mm 980420 -*/ -#define O_APPEND 0x0100 /* open the file in append mode */ -#define O_CREAT 0x0200 /* create the file if it doesn't exist */ -#define O_EXCL 0x0400 /* if the file already exists don't create it again */ -#define O_TRUNC 0x0800 /* truncate the file after opening it */ -#define O_NRESOLVE 0x1000 /* Don't resolve any aliases */ -#define O_ALIAS 0x2000 /* Open alias file (if the file is an alias) */ -#define O_RSRC 0x4000 /* Open the resource fork */ -#define O_BINARY 0x8000 /* open the file in binary mode (default is text mode) */ -#define F_DUPFD 0x0 /* return a duplicate file descriptor */ - -#endif diff --git a/backends/PalmOS/Src/missing/math.h b/backends/PalmOS/Src/missing/math.h deleted file mode 100644 index eca2d9de08..0000000000 --- a/backends/PalmOS/Src/missing/math.h +++ /dev/null @@ -1,38 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __MATH_H__ -#define __MATH_H__ - -#ifndef PALMOS_ARM -# include "mathlib.h" -#else -# include "matharm.h" -#endif - -#ifndef M_PI -# define M_PI 3.14159265358979323846 -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/memory.h b/backends/PalmOS/Src/missing/memory.h deleted file mode 100644 index f57990b19d..0000000000 --- a/backends/PalmOS/Src/missing/memory.h +++ /dev/null @@ -1,25 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - #include "string.h" \ No newline at end of file diff --git a/backends/PalmOS/Src/missing/stdio.h b/backends/PalmOS/Src/missing/stdio.h deleted file mode 100644 index 490da720a5..0000000000 --- a/backends/PalmOS/Src/missing/stdio.h +++ /dev/null @@ -1,103 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __STDIO_H__ -#define __STDIO_H__ - -#include "palmversion.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*LedProc)(Boolean show); -typedef UInt32 size_t; - -typedef struct { - FileRef fileRef; - UInt32 cacheSize, bufSize, bufPos; - UInt8 *cache; - UInt16 mode, err; -} FILE; - -#undef stdin -#undef stdout -#undef stderr - -#define stdin 0 -#define stdout (&gStdioOutput) -#define stderr (&gStdioOutput) - -#undef SEEK_SET -#undef SEEK_CUR -#undef SEEK_END - -#define SEEK_SET vfsOriginBeginning -#define SEEK_CUR vfsOriginCurrent -#define SEEK_END vfsOriginEnd - -extern FILE gStdioOutput; - -void StdioInit (UInt16 volRefNum, const Char *output); -void StdioSetLedProc (LedProc ledProc); -void StdioSetCacheSize (UInt32 s); -void StdioRelease (); - -/* missing functions in 68k MSL (some are defined in ARM) */ -#define clearerr(a) -#define fflush(a) -#define getc(a) fgetc(a) -#define vsnprintf(a,b,c,d) vsprintf(a,c,d) - -UInt16 fclose (FILE *stream); -UInt16 feof (FILE *stream); -UInt16 ferror (FILE *stream); -Char *fgets (Char *s, UInt32 n, FILE *stream); -Int16 fgetc (FILE *stream); -FILE *fopen (const Char *filename, const Char *type); -UInt32 fread (void *ptr, UInt32 size, UInt32 nitems, FILE *stream); -UInt32 fwrite (const void *ptr, UInt32 size, UInt32 nitems, FILE *stream); -Int16 fseek (FILE *stream, Int32 offset, Int32 whence); -Int32 ftell (FILE *stream); - -Int32 fprintf (FILE *stream, const Char *formatStr, ...); -Int32 printf (const Char* formatStr, ...); -Int32 sprintf (Char* s, const Char* formatStr, ...); -Int32 snprintf (Char* s, UInt32 len, const Char* formatStr, ...); -Int32 vsprintf (Char* s, const Char* formatStr, _Palm_va_list argParam); - -/* ARM MSL only */ -#ifdef PALMOS_ARM -#undef vsnprintf - -int vsnprintf (char *str, size_t size, const char *format, va_list ap); -int sscanf ( char * buffer, const char * format, ...); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/stdlib.h b/backends/PalmOS/Src/missing/stdlib.h deleted file mode 100644 index 8b1c959c01..0000000000 --- a/backends/PalmOS/Src/missing/stdlib.h +++ /dev/null @@ -1,88 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef STDLIB_H -#define STDLIB_H - -#include "palmversion.h" - -#ifdef PALMOS_68K -#include "MemGlue.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* malloc stuff */ -#if defined(COMPILE_ZODIAC) -# define malloc MemPtrNew -#elif defined(COMPILE_OS5) && defined(PALMOS_ARM) -# define malloc __malloc -#else -# define malloc MemGluePtrNew -#endif - -/* custom exit (true exit !) */ -extern ErrJumpBuf stdlib_errJumpBuf; -#define DO_EXIT( code ) \ - if (ErrSetJump(stdlib_errJumpBuf) == 0) { code } - -/* mapped to system functions */ -#define atoi StrAToI -#define atol StrAToI -#define abs(a) ((a) < 0 ? -(a) : (a)) -#define qsort(a,b,c,d) SysQSort((a), (b), (c), (CmpFuncPtr)(&d), 0); -#define rand() SysRandom(0) -#define abort() -#define strtoul(a,b,c) ((unsigned long)strtol(a,b,c)) - -MemPtr __malloc (UInt32); -MemPtr calloc (UInt32 nelem, UInt32 elsize); -void exit (Int16 status); -Err free (MemPtr memP); -MemPtr realloc (MemPtr oldP, UInt32 size); -long strtol (const char *s, char **endptr, int base); - -/* already defined in MSL */ -void *bsearch (const void *key, const void *base, UInt32 nmemb, UInt32 size, int (*compar)(const void *, const void *)); - -/* ARM MSL only */ -#ifdef PALMOS_ARM -#undef qsort -#undef strtol -#undef strtoul - -typedef int (*_compare_function)(const void*, const void*); - -void qsort (void * table_base, UInt32 num_members, UInt32 member_size, _compare_function compare_members); -long int strtol (const char *nptr, char **endptr, int base); -unsigned long int strtoul (const char *nptr, char **endptr,int base); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/string.h b/backends/PalmOS/Src/missing/string.h deleted file mode 100644 index bb250dfe9b..0000000000 --- a/backends/PalmOS/Src/missing/string.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef PALM_STRING_H -#define PALM_STRING_H - -#include "palmversion.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* mapped to system functions */ -#define memcmp MemCmp -#define memcpy MemMove -#define memmove MemMove -#define memset(a,b,c) MemSet(a,c,b) -#define strcat StrCat -#define strncat StrNCat -#define strchr StrChr -#define strcmp StrCompare -#define strcpy StrCopy -#define strncpy StrNCopy -#define stricmp StrCaselessCompare -#define strnicmp StrNCaselessCompare -#define strlen StrLen -#define strncmp StrNCompare -#define strstr StrStr - -/* missing functions in 68k MSL */ -void *memchr (const void *s, int c, UInt32 n); -Char *strdup (const Char *strSource); - -/* already defined in MSL */ -Char *strtok (Char *str, const Char *sep); -Char *strrchr (const Char *s, int c); -Char *strpbrk (const Char *s1, const Char *s2); -UInt32 strspn (const Char *s1, const Char *s2); -UInt32 strcspn (const Char *s1, const Char *s2); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/sys/stat.h b/backends/PalmOS/Src/missing/sys/stat.h deleted file mode 100644 index da84fa5f6b..0000000000 --- a/backends/PalmOS/Src/missing/sys/stat.h +++ /dev/null @@ -1 +0,0 @@ -/* nothing */ diff --git a/backends/PalmOS/Src/missing/time.h b/backends/PalmOS/Src/missing/time.h deleted file mode 100644 index 3de16f4517..0000000000 --- a/backends/PalmOS/Src/missing/time.h +++ /dev/null @@ -1,55 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __TIME_H__ -#define __TIME_H__ - -#include "palmversion.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef UInt32 time_t; - -struct tm { - Int16 tm_sec; // seconds [0,61] - Int16 tm_min; // minutes [0,59] - Int16 tm_hour; // hour [0,23] - Int16 tm_mday; // day of month [1,31] - Int16 tm_mon; // month of year [0,11] - Int16 tm_year; // years since 1900 - Int16 tm_wday; // day of week [0,6] (Sunday = 0) - Int16 tm_yday; // day of year [0,365] - Int16 tm_isdst; // daylight savings flag -}; - -time_t time(time_t *tloc); -struct tm *localtime(const time_t *timer); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/missing/unistd.h b/backends/PalmOS/Src/missing/unistd.h deleted file mode 100644 index 400b0e2c39..0000000000 --- a/backends/PalmOS/Src/missing/unistd.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __UNISTD_H__ -#define __UNISTD_H__ - -#include "palmversion.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern const Char *gUnistdCWD; - -Char *getcwd(Char *buf, UInt32 size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/modules.cpp b/backends/PalmOS/Src/modules.cpp deleted file mode 100644 index 73c7c117bb..0000000000 --- a/backends/PalmOS/Src/modules.cpp +++ /dev/null @@ -1,251 +0,0 @@ -#include -#include -#include -#include - -#include "palmdefs.h" -#include "args.h" -#include "globals.h" -#include "modules.h" -#include "extend.h" -#include "features.h" - -#include "rumble.h" -#include "init_mathlib.h" -#include "init_pa1lib.h" -#include "init_palmos.h" -#include "init_stuffs.h" -#include "init_sony.h" -#include "init_golcd.h" - -#ifndef DISABLE_LIGHTSPEED -#include "lightspeed_public.h" -#endif - -GlobalsDataPtr gVars; - -#ifdef PALMOS_NATIVE - -#include "endianutils.h" -#include - -#ifdef COMPILE_ZODIAC -# include -# include -#else -# include -#endif - -void run(int argc, char *argv[]) { - // init args - ArgsExportInit(argv, argc, true); - - // init system - PalmHRInit(16); - PalmInit(HWR_GET()); - void *__ptr = StuffsForceVG(); - - gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth); - - // export global struct to ARM - VARS_EXPORT(); - DO_VARS(_4B, 32, 0); - DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32))); - FtrSet(appFileCreator, ftrVars , (UInt32)gVars); - - // run the module -#ifdef COMPILE_ZODIAC - NativeFuncType *entry; - TwLoadModule(0, 0, 0, 1, twLoadFlagTNA|twLoadFlagQuickRun, &entry); -#else - UInt32 glue; - FtrGet(twFtrCreator, twFtrAPIGlue, &glue); - - PnoDescriptor pno; - PnoLoadFromResources(&pno, 'ARMC', 1, appFileCreator, 1); - PnoCall(&pno, (void*)glue); - PnoUnload(&pno); -#endif - - // reset globals - DO_VARS(_4B, 32, 0); - DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32))); - - // release - StuffsReleaseVG(__ptr); - PalmRelease(HWR_GET()); - PalmHRRelease(); - - // free args - ArgsExportRelease(true); - ArgsFree(argv); - - // release global struct - FtrUnregister(appFileCreator, ftrVars); - FtrUnregister(appFileCreator, ftrStack); - MemPtrFree(gVars); - - // reset the palette if needed - WinPalette(winPaletteSetToDefault, 0, 256, NULL); -} - -#else - -#include "stdafx.h" -#include "base/main.h" -#include "be_zodiac.h" -#include "be_os5ex.h" - -static void palm_main(int argc, char **argvP) { -#ifdef COMPILE_OS5 - if (gVars->advancedMode) - g_system = new OSystem_PalmOS5Ex(); - else - g_system = new OSystem_PalmOS5(); -#elif defined(COMPILE_ZODIAC) - g_system = new OSystem_PalmZodiac(); -#else - #error "No target defined." -#endif - - assert(g_system); - - // Invoke the actual ScummVM main entry point: - scummvm_main(argc, argvP); - - g_system->quit(); // TODO: Consider removing / replacing this! -} - -void run(int argc, char *argv[]) { - - MathlibInit(); - gVars->HRrefNum = SonyHRInit(8); - if (gVars->HRrefNum == sysInvalidRefNum) - PalmHRInit(8); - gVars->slkRefNum= SilkInit(&(gVars->slkVersion)); - gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth); - - // create file for printf, warnings, etc... - StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log"); - if (gVars->indicator.showLED) StdioSetLedProc(DrawStatus); - StdioSetCacheSize(gVars->VFS.cacheSize); - gUnistdCWD = SCUMMVM_SAVEPATH; - - // init hardware - if (HWR_INIT(INIT_GOLCD)) GoLCDInit(&gGoLcdH); - if (HWR_INIT(INIT_PA1LIB)) Pa1libInit(gVars->palmVolume); - if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit(); - PalmInit(HWR_GET()); - - if (!gVars->vibrator) - HWR_RST(INIT_VIBRATOR); - - GlbOpen(); - // be sure to have a VG - void *__ptr = StuffsForceVG(); - - DO_EXIT( palm_main(argc, argv); ) - - // be sure to release features memory - FREE_FTR(ftrBufferOverlay) - FREE_FTR(ftrBufferBackup) - FREE_FTR(ftrBufferHotSwap) - - StuffsReleaseVG(__ptr); - GlbClose(); - - PalmRelease(HWR_GET()); - if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease(); - if (HWR_INIT(INIT_PA1LIB)) Pa1libRelease(); - if (HWR_INIT(INIT_GOLCD)) GoLCDRelease(gGoLcdH); - - // close log file - StdioRelease(); - - PalmHRRelease(); - SonyHRRelease(gVars->HRrefNum); - SilkRelease(gVars->slkRefNum); - MathlibRelease(); - - MemPtrFree(gVars); - WinPalette(winPaletteSetToDefault, 0, 256, NULL); -// ArgsFree(argvP); // called in main(...) -} -#endif - -static UInt32 ModulesPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) -{ - UInt32 result = 0; - - switch (cmd) { - case sysAppLaunchCustomEngineGetInfo: { -#ifdef PALMOS_NATIVE - result = GET_MODEARM; -#else -# if !defined(DISABLE_SCUMM) || \ - !defined(DISABLE_SIMON) || \ - !defined(DISABLE_SWORD1) - result = GET_DATACOMMON|GET_DATAENGINE|GET_MODE68K; -# else - result = GET_DATACOMMON|GET_MODE68K; -# endif -#endif - break; - } - - case sysAppLaunchCmdNormalLaunch: { - if (cmdPBP) { - Char **argvP; - UInt16 cardNo; - LocalID dbID; - - LaunchParamType *lp = (LaunchParamType *)cmdPBP; - - gVars = lp->gVars; - argvP = lp->args.argv; - - // get the free memory on the dynamic heap - PalmGetMemory(0,0,0, &(gVars->startupMemory)); - -#ifndef DISABLE_LIGHTSPEED - switch (lp->lightspeed) { - case 0: - LS_SetCPUSpeedHigh(); - break; - case 1: - LS_SetCPUSpeedNormal(); - break; - case 2: - LS_SetCPUSpeedLow(); - break; - } -#endif - // MemPtrSetOwner(gVars, ownerID); - // ArgsSetOwner(argvP, ownerID); // will be freed by main(...) - // MemPtrFree(lp); // will be freed by the system on exit - - run(lp->args.argc, argvP); - - cardNo = 0; - dbID = DmFindDatabase(0, "ScummVM"); - if (dbID) { - if (lp->exitLauncher) - SysUIAppSwitch(cardNo, dbID, sysAppLaunchCustomEngineDelete,0); - else - SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch,0); - } - } - break; - } - - default: - break; - - } - - return result; -} - -UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { - return ModulesPalmMain(cmd, cmdPBP, launchFlags); -} diff --git a/backends/PalmOS/Src/modules.h b/backends/PalmOS/Src/modules.h deleted file mode 100644 index d172ad11c2..0000000000 --- a/backends/PalmOS/Src/modules.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef MODULES_H -#define MODULES_H - -#include "globals.h" - -#define sysAppLaunchCode_SVMRunEngine (sysAppLaunchCmdCustomBase + 0) - -void ModDelete(); - -typedef struct { - UInt8 lightspeed; - Boolean exitLauncher; - - struct { - UInt8 argc; - Char **argv; - } args; - - GlobalsDataPtr gVars; -} LaunchParamType; - -#endif diff --git a/backends/PalmOS/Src/native/oscalls.cpp b/backends/PalmOS/Src/native/oscalls.cpp deleted file mode 100644 index 4520d81c20..0000000000 --- a/backends/PalmOS/Src/native/oscalls.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include "pace.h" - -GlobalsType global; - - -PACE_CLASS_WRAPPER(Err) - StatShow_68k(void) { - PACE_PIN_EXEC_NP(pinStatShow, Err) -} - -PACE_CLASS_WRAPPER(Err) - StatHide_68k(void) { - PACE_PIN_EXEC_NP(pinStatHide, Err) -} - -PACE_CLASS_WRAPPER(Err) - PINSetInputAreaState_68k(UInt16 state) { - PACE_PARAMS_INIT() - PACE_PARAMS_ADD16(state) - PACE_PARAMS_END() - PACE_PIN_EXEC(pinPINSetInputAreaState, Err) -} diff --git a/backends/PalmOS/Src/native/oscalls.h b/backends/PalmOS/Src/native/oscalls.h deleted file mode 100644 index ae8f989337..0000000000 --- a/backends/PalmOS/Src/native/oscalls.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef _OSCALLS_H_ -#define _OSCALLS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -Err StatShow_68k(); -Err StatHide_68k(); -Err PINSetInputAreaState_68k(UInt16 state); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/native/pace.h b/backends/PalmOS/Src/native/pace.h deleted file mode 100644 index a617e8a274..0000000000 --- a/backends/PalmOS/Src/native/pace.h +++ /dev/null @@ -1,102 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef PACE_H -#define PACE_H - -#include -//#include "endianutils.h" - -// local definition of the emulation state structure -typedef struct { - UInt32 instr; - UInt32 regData[8]; - UInt32 regAddress[8]; - UInt32 regPC; -} EmulStateType; - -typedef struct { - EmulStateType *emulStateP; - Call68KFuncType *call68KFuncP; -} GlobalsType; - -extern GlobalsType global; - -// TODO : check this, already defined in ARMlet_Runtime -//extern EmulStateType *g_emulStateP; -//extern Call68KFuncType *g_call68KFuncP; -#define g_emulStateP global.emulStateP -#define g_call68KFuncP global.call68KFuncP - - -#ifdef __cplusplus -# define PACE_CLASS_WRAPPER(rv) extern "C" rv -#else -# define PACE_CLASS_WRAPPER(rv) rv -#endif -#define PACE_CALLBACK_PTR g_call68KFuncP -#define PACE_EMULSTATE g_emulStateP - -#define ALIGN_4BYTE(addr) (((UInt32)(addr) + 3) & 0xFFFFFFFC) - -/****** TAKEN FROM PACEInteface.cpp (ARMlet_Runtime) ******/ -// local definition of the emulation state structure - -#define PACE_PARAMS_INIT() \ - UInt8 params[] = { - -#define PACE_PARAMS_ADD8(param) \ - (UInt8)(param), \ - 0, - -#define PACE_PARAMS_ADD16(param) \ - (UInt8)((UInt16)(param) >> 8), \ - (UInt8)(param), - -#define PACE_PARAMS_ADD32(param) \ - (UInt8)((UInt32)(param) >> 24), \ - (UInt8)((UInt32)(param) >> 16), \ - (UInt8)((UInt32)(param) >> 8), \ - (UInt8)(param), - -#define PACE_PARAMS_END() \ - }; - -// PIN -#define PACE_PIN_EXEC_NP(pinTrap, returnType) \ - PACE_EMULSTATE->regData[2] = pinTrap; \ - return ((returnType)((PACE_CALLBACK_PTR)( \ - static_cast(PACE_EMULSTATE), \ - PceNativeTrapNo(sysTrapPinsDispatch), \ - NULL, 0))); - -#define PACE_PIN_EXEC(pinTrap, returnType) \ - PACE_EMULSTATE->regData[2] = pinTrap; \ - return ((returnType)((PACE_CALLBACK_PTR)( \ - static_cast(PACE_EMULSTATE), \ - PceNativeTrapNo(sysTrapPinsDispatch), \ - ¶ms, \ - sizeof(params)))); - -#endif \ No newline at end of file diff --git a/backends/PalmOS/Src/native/pnoARM.c b/backends/PalmOS/Src/native/pnoARM.c deleted file mode 100644 index 6c7954fcb5..0000000000 --- a/backends/PalmOS/Src/native/pnoARM.c +++ /dev/null @@ -1,80 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifdef COMPILE_OS5 - -//#include -#include -#include -#include "pace.h" - -// Linker still looks for ARMlet_Main as entry point, but the -// "ARMlet" name is now officially discouraged. Compare an -// contrast to "PilotMain" for 68K applications. -#define PNO_Main ARMlet_Main - -#ifdef COMPILE_ZODIAC - const void* twEmulState; - Call68KFuncType* twCall68KFunc; -#endif -struct TwGlue* twGlue; - -unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) { -#ifdef COMPILE_ZODIAC - twEmulState = emulStateP; - twCall68KFunc = call68KFuncP; -#else - global.emulStateP = (EmulStateType *)emulStateP; - global.call68KFuncP = call68KFuncP; -#endif - twGlue = (struct TwGlue*) userData68KP; - return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); -} - - // - // The following functions provide malloc/free support to Metrowerks - // Standard Library (MSL). This feature requires the MSL library be - // built with _MSL_OS_DIRECT_MALLOC enabled. - // -void* -__sys_alloc(UInt32 size) -{ - void * ptr = malloc(size); - ErrFatalDisplayIf(ptr == NULL, "out of memory"); - return ptr; -} - -void -__sys_free(void* ptr) -{ - (void) MemPtrFree(ptr); -} - -UInt32 -__sys_pointer_size(void* ptr) -{ - return (UInt32) MemPtrSize(ptr); -} - -#endif diff --git a/backends/PalmOS/Src/native/pnoStartup.c b/backends/PalmOS/Src/native/pnoStartup.c deleted file mode 100644 index dcfb56d002..0000000000 --- a/backends/PalmOS/Src/native/pnoStartup.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifdef COMPILE_OS5 -# include "(Source)/ARMlet_Startup.c" -#endif diff --git a/backends/PalmOS/Src/native/zodiacARM.cpp b/backends/PalmOS/Src/native/zodiacARM.cpp deleted file mode 100644 index 9b0db9122d..0000000000 --- a/backends/PalmOS/Src/native/zodiacARM.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include - -#include "globals.h" -#include "extend.h" -#include "args.h" -#include "palmdefs.h" - -#include "rumble.h" - - -#include -//#define DEBUG_ARM - -#include "stdafx.h" -#include "base/main.h" -#include "be_zodiac.h" -#include "be_os5ex.h" - -GlobalsDataType g_vars; -GlobalsDataPtr gVars = &g_vars; -UInt32 g_stackSize; - -static void palm_main(int argc, char **argvP) { -#ifdef COMPILE_OS5 - if (gVars->advancedMode) - g_system = new OSystem_PalmOS5Ex(); - else - g_system = new OSystem_PalmOS5(); -#elif defined(COMPILE_ZODIAC) - g_system = new OSystem_PalmZodiac(); -#else - #error "No target defined." -#endif - - assert(g_system); - - scummvm_main(argc, argvP); - - g_system->quit(); // TODO: Consider removing / replacing this! -} - -static void Go() { - void *tmp; - char **argvP; - int argc; - -#ifdef DEBUG_ARM -// Tell the debugger we want to enable full debugging - UInt32 flags = AdnDebugEnableGet(); - flags |= kAdnEnableMasterSwitch | kAdnEnableFullDebugging; - AdnDebugEnableSet(flags); -// Tell the debugger where our code lives in memory: - AdnDebugNativeRegister(sysFileTApplication, appFileCreator, 'ARMC', 1); -#endif - - // get global struct - FtrGet(appFileCreator, ftrVars, (UInt32 *)&tmp); - MemMove(gVars, tmp, sizeof(GlobalsDataType)); - - // init STDIO - StdioSetCacheSize(0); - StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log"); - if (gVars->indicator.showLED) - StdioSetLedProc(DrawStatus); - StdioSetCacheSize(gVars->VFS.cacheSize); - gUnistdCWD = SCUMMVM_SAVEPATH; - - // get args - FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP); - FtrGet(appFileCreator, ftrArgsCount, (UInt32 *)&argc); - - // init system - WinSetDrawWindow(WinGetDisplayWindow()); - if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit(); - - // run ... - DO_EXIT ( palm_main(argc, argvP); ) - - // release - if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease(); - StdioRelease(); - -#ifdef DEBUG_ARM - AdnDebugNativeUnregister(); -#endif -} - -/* Stack size */ - -Int8 *g_newStack, *g_newStackPos; -void *g_oldStack; - -static asm void *StkSwap(void *newStack ,void *dummy) { - mov r1, r13 - mov r13, r0 - mov r0, r1 - bx lr -} - -extern UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { - if (cmd == sysAppLaunchCmdNormalLaunch) { - FtrGet(appFileCreator, ftrStack, &g_stackSize); - if (!g_stackSize) - g_stackSize = 32 * 1024; - - g_newStack = (Int8 *)malloc(g_stackSize + 8); - g_newStackPos = (g_newStack + g_stackSize); - g_newStackPos -= ((UInt32)g_newStackPos & 7); - - g_oldStack = StkSwap(g_newStackPos, 0); - - Go(); - - StkSwap(g_oldStack, 0); - free(g_newStack); - } - - return 0; -} - diff --git a/backends/PalmOS/Src/native/zodiacStartup.cpp b/backends/PalmOS/Src/native/zodiacStartup.cpp deleted file mode 100644 index 64ac89ab5b..0000000000 --- a/backends/PalmOS/Src/native/zodiacStartup.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifdef COMPILE_ZODIAC - -#include - -#ifndef __PALMOS_ARMLET__ -#error "__PALMOS_ARMLET__ is not defined!!!" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This variable holds the Tapwave Native Application interface - * dispatch table. General ARM API calls will go through this table. - */ -struct TwGlue* twGlue; -const void* twEmulState; -Call68KFuncType* twCall68KFunc; - -#ifdef __MWERKS__ - -#if __PALMOS_ARMLET__ < 0x120 -#error "You must use CodeWarrior for Palm OS 9.3 or later!!!" -#endif - - -UInt32 __ARMlet_Startup__(const void*, void*, Call68KFuncType*); - -/* - * These symbols aren't real, but are linker-generated symbols that - * mark the start and end of the various data sections. - */ -extern long __DataStart__[]; -extern long __RODataStart__[]; -extern long __BSSStart__[]; -extern long __BSSEnd__[]; -extern long __CodeRelocStart__[]; -extern long __CodeRelocEnd__[]; -extern long __DataRelocStart__[]; -extern long __DataRelocEnd__[]; - -/* - * This function performs relocation for Tapwave Native Application. - */ -static void relocate(void) -{ - // this symbol points to the very beginning of current application - long base = (long) __ARMlet_Startup__; - long *cur, *end; - - // handle code-to-data relocation - cur = __CodeRelocStart__; - end = __CodeRelocEnd__; - for (; cur < end; cur++) { - *(long*)(base + *cur) += base; - } - - // handle data-to-data relocation - cur = __DataRelocStart__; - end = __DataRelocEnd__; - for (; cur < end; cur++) { - *(long*)(base + *cur) += base; - } -} - -/* - * The following functions provide malloc/free support to Metrowerks - * Standard Library (MSL). This feature requires the MSL library be - * built with _MSL_OS_DIRECT_MALLOC enabled. - */ -void* -__sys_alloc(size_t size) -{ - void * ptr = MemPtrNew(size); - ErrFatalDisplayIf(ptr == NULL, "out of memory"); - return ptr; -} - -void -__sys_free(void* ptr) -{ - (void) MemPtrFree(ptr); -} - -size_t -__sys_pointer_size(void* ptr) -{ - return (size_t) MemPtrSize(ptr); -} - -/* - * This is the real entrypoint for Tapwave Native Application. It - * depends on various CodeWarrior 9.2 compiler/linker/runtime features. - */ -static SYSTEM_CALLBACK UInt32 -Startup(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) -{ - if (emulStateP) { - twEmulState = emulStateP; - twCall68KFunc = call68KFuncP; - // COMMENT: normal pace native object launch - return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); - } else { - // Setup TNA interface dispatch table - twGlue = (struct TwGlue*) userData68KP; - - // OPTIONAL: relocate data segment - relocate(); - - // OPTIONAL: initialize the floating-point library - // _fp_init(); - - return 0; - } -} - -#pragma PIC off -asm UInt32 -__ARMlet_Startup__(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) -{ - b Startup // 0 forwarding call - nop // 4 - nop // 8 - nop // 12 - nop // 16 - nop // 20 - nop // 24 - dcd 'TWNA' // 28 Tapwave Native Application - dcd 1 // 32 version 1 - dcd 'cdwr' // 36 make this section the same as the __ARMlet_Startup__ - dcd __DataStart__ // 40 used by CodeWarrior 9.2 - dcd __RODataStart__ // 44 - dcd __BSSStart__ // 48 - dcd __BSSEnd__ // 52 - dcd __CodeRelocStart__ // 56 - dcd __CodeRelocEnd__ // 60 - dcd __DataRelocStart__ // 64 - dcd __DataRelocEnd__ // 68 -} -#pragma PIC reset - -#endif // __MWERKS__ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif diff --git a/backends/PalmOS/Src/os5_event.cpp b/backends/PalmOS/Src/os5_event.cpp deleted file mode 100644 index 99e5867450..0000000000 --- a/backends/PalmOS/Src/os5_event.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" - -void OSystem_PalmOS5::get_coordinates(EventPtr ev, Coord &x, Coord &y) { - Boolean dummy; - EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy); - - x = (ev->screenX - _screenOffset.x); - y = (ev->screenY - _screenOffset.y); - - if (_stretched) { - if (OPTIONS_TST(kOptModeLandscape)) { - x = (x * 2 / 3); - y = (y * 2 / 3); - } else { - y = ((ev->screenX - _screenOffset.y) * 2) / 3; - x = 320 - ((ev->screenY - _screenOffset.x) * 2) / 3 - 1; - } - } -} - -bool OSystem_PalmOS5::check_event(Event &event, EventPtr ev) { - if (ev->eType == keyDownEvent) { - switch (ev->data.keyDown.chr) { - case vchrHard4: - _lastKey = kKeyNone; - event.type = EVENT_RBUTTONDOWN; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - } - - if (_keyMouse.hasMore) { - switch (ev->data.keyDown.chr) { - // hot swap gfx - case vchrHard1: - if (OPTIONS_TST(kOptCollapsible)) - hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE); - return false; // not a key - - // ESC key - case vchrHard2: - _lastKey = kKeyNone; - event.type = EVENT_KEYDOWN; - event.kbd.keycode = 27; - event.kbd.ascii = 27; - event.kbd.flags = 0; - return true; - - // F5 = menu - case vchrHard3: - _lastKey = kKeyNone; - event.type = EVENT_KEYDOWN; - event.kbd.keycode = 319; - event.kbd.ascii = 319; - event.kbd.flags = 0; - return true; - } - } - } - - return false; -} diff --git a/backends/PalmOS/Src/os5_gfx.cpp b/backends/PalmOS/Src/os5_gfx.cpp deleted file mode 100644 index 2e2ec68454..0000000000 --- a/backends/PalmOS/Src/os5_gfx.cpp +++ /dev/null @@ -1,317 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" -#include -#include - -#ifdef PALMOS_ARM -#include -#include -#endif - -#include "oscalls.h" - -void OSystem_PalmOS5::int_initSize(uint w, uint h) { -} - -WinHandle OSystem_PalmOS5::alloc_screen(Coord w, Coord h) { - Err e; - WinHandle winH; - UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); - winH = WinCreateOffscreenWindow(w, h, nativeFormat, &e); - WinSetCoordinateSystem(old); - - return winH; -} - -void OSystem_PalmOS5::load_gfx_mode() { - Err e; - - if (_gfxLoaded) - return; - _gfxLoaded = true; - - - _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit - _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H); - _offScreenP = (byte *)malloc(_screenWidth * _screenHeight); - - UInt32 depth = 16; - WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); - - gVars->indicator.on = RGBToColor(0,255,0); - gVars->indicator.off = RGBToColor(0,0,0); - - _overlayH = alloc_screen(_screenWidth, _screenHeight); - _screenH = WinGetDisplayWindow(); - - _overlayP = (OverlayColor *)(BmpGetBits(WinGetBitmap(_overlayH))); - _screenP = (byte *)(BmpGetBits(WinGetBitmap(_screenH))); - - MemSet(_offScreenP, _screenWidth * _screenHeight, 0); - MemSet(_nativePal, sizeof(_nativePal), 0); - MemSet(_currentPalette, sizeof(_currentPalette), 0); - - _isSwitchable = (_screenWidth == 320 && _screenHeight == 200 && OPTIONS_TST(kOptCollapsible)); - if (_screenWidth > 320 || _screenHeight > 200 || !_isSwitchable) - _mode = GFX_NORMAL; - - hotswap_gfx_mode(_mode); -} - -void OSystem_PalmOS5::hotswap_gfx_mode(int mode) { - Err e; - UInt32 device; - - if (_mode != GFX_NORMAL && !_isSwitchable) - return; - - if (_workScreenH) - WinDeleteWindow(_workScreenH, false); - _workScreenH = NULL; - -#ifdef PALMOS_ARM - Boolean isT3 = false; - if (!FtrGet(sysFileCSystem, sysFtrNumOEMDeviceID, &device)) - isT3 = (device == kPalmOneDeviceIDTungstenT3); -#endif - - // prevent bad DIA redraw (Stat part) - if (mode == GFX_NORMAL) { - // only if this API is available - if (_stretched && OPTIONS_TST(kOptCollapsible)) { -#ifdef PALMOS_ARM - if (isT3) { - //AiaSetInputAreaState(aiaInputAreaShow); - StatShow_68k(); - PINSetInputAreaState_68k(pinInputAreaOpen); - } else -#endif - { - StatShow(); - PINSetInputAreaState(pinInputAreaOpen); - } - } - - _redawOSD = true; - _stretched = false; - OPTIONS_RST(kOptDisableOnScrDisp); - _screenDest.w = _screenWidth; - _screenDest.h = _screenHeight; - - if (_wasRotated) { - // restore controls rotation - SWAP(_keyMouse.bitLeft, _keyMouse.bitRight); - SWAP(_keyMouse.bitRight, _keyMouse.bitDown); - SWAP(_keyMouse.bitLeft, _keyMouse.bitUp); - _wasRotated = false; - } - - _workScreenH = alloc_screen(_screenWidth, _screenHeight); - _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); - MemSet(_workScreenP, _screenWidth * _screenHeight * 2, 0); - - _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2; - _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2; - - _render = &OSystem_PalmOS5::render_1x; - - } else { -#ifdef PALMOS_ARM - // T3 DIA library is 68k base, there is no possible native call - if (isT3) { - //AiaSetInputAreaState(aiaInputAreaFullScreen); - PINSetInputAreaState_68k(pinInputAreaClosed); - StatHide_68k(); - } else -#endif - { - PINSetInputAreaState(pinInputAreaClosed); - StatHide(); - } - - _redawOSD = false; - _stretched = true; - OPTIONS_SET(kOptDisableOnScrDisp); - - if (OPTIONS_TST(kOptModeLandscape)) { - _screenDest.w = 480; - _screenDest.h = 300; - _workScreenH = alloc_screen(480, 300); - _render = &OSystem_PalmOS5::render_landscape; - - } else { - _screenDest.w = 300; - _screenDest.h = 480; - _workScreenH = alloc_screen(300, 480); - _render = &OSystem_PalmOS5::render_portrait; - // This mode need a controls rotation - SWAP(_keyMouse.bitLeft, _keyMouse.bitUp); - SWAP(_keyMouse.bitRight, _keyMouse.bitDown); - SWAP(_keyMouse.bitLeft, _keyMouse.bitRight); - _wasRotated = true; - } - - _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); - MemSet(_workScreenP, 480 * 300 * 2, 0); - - _screenOffset.x = 0; - _screenOffset.y = 10; - } - - _mode = mode; - clearScreen(); -} - -void OSystem_PalmOS5::unload_gfx_mode() { - if (!_gfxLoaded) - return; - _gfxLoaded = false; - - MemPtrFree(_mouseBackupP); - MemPtrFree(_mouseDataP); - free(_offScreenP); - - if (_workScreenH) - WinDeleteWindow(_workScreenH, false); - if (_overlayH) - WinDeleteWindow(_overlayH, false); - - _workScreenH = NULL; - _overlayH = NULL; - - UInt32 depth = 8; - WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); - - WinSetCoordinateSystem(_sysOldCoord); -} - -void OSystem_PalmOS5::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { - // Clip the coordinates - if (x < 0) { - w += x; - buf -= x; - x = 0; - } - - if (y < 0) { - h += y; - buf -= y * pitch; - y = 0; - } - - if (w > _screenWidth - x) - w = _screenWidth - x; - - if (h > _screenHeight - y) - h = _screenHeight - y; - - if (w <= 0 || h <= 0) - return; - - byte *dst = _offScreenP + y * _screenWidth + x; - - if (w == pitch && w == _screenWidth) { - MemMove(dst, buf, w * h); - } else { - do { - MemMove(dst, buf, w); - dst += _screenWidth; - buf += pitch; - } while (--h); - } -} - -void OSystem_PalmOS5::int_updateScreen() { - RectangleType r; - PointType p; - - draw_mouse(); - ((this)->*(_render))(r, p); - - _sysOldCoord = WinSetCoordinateSystem(kCoordinatesNative); - WinCopyRectangle(_workScreenH, _screenH, &r, p.x, p.y, winPaint); - WinSetCoordinateSystem(_sysOldCoord); - undraw_mouse(); -} - -void OSystem_PalmOS5::clearScreen() { - RGBColorType rgb = { 0,0,0,0 }; - WinSetDrawWindow(WinGetDisplayWindow()); - WinSetBackColorRGB(&rgb, 0); - WinEraseWindow(); -} - -void OSystem_PalmOS5::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { - _nativePal[index] = gfxMakeDisplayRGB( r, g, b); -} - -void OSystem_PalmOS5::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { - if (_mode != GFX_NORMAL) - return; -// MemHandle hTemp = DmGetResource(bitmapRsc, id); - MemHandle hTemp = DmGetResource('abmp', id + 100); - - if (hTemp) { - RGBColorType oldRGB; - static const RGBColorType pal[4] = { - {0,0,255,0}, - {0,255,255,0}, - {0,255,0,0}, - {0,0,0,0} - }; - - BitmapType *bmTemp; - bmTemp = (BitmapType *)MemHandleLock(hTemp); - - Coord w, h; - BmpGetDimensions(bmTemp, &w, &h, 0); - - PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; - RectangleType c, r = { dst.x, dst.y, w, h }; - - UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); - WinSetDrawWindow(_screenH); - WinGetClip(&c); - WinResetClip(); - - if (show) { - WinSetForeColorRGB(&pal[3], &oldRGB); - WinSetBackColorRGB(&pal[color], &oldRGB); - WinDrawBitmap(bmTemp, dst.x, dst.y); - } else { - WinSetBackColorRGB(&pal[3], &oldRGB); - WinFillRectangle(&r, 0); - } - - WinSetClip(&c); - WinSetCoordinateSystem(old); - - MemPtrUnlock(bmTemp); - DmReleaseResource(hTemp); - } -} diff --git a/backends/PalmOS/Src/os5_mouse.cpp b/backends/PalmOS/Src/os5_mouse.cpp deleted file mode 100644 index 363658e47c..0000000000 --- a/backends/PalmOS/Src/os5_mouse.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" - -void OSystem_PalmOS5::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { - if (w == 0 || h == 0) - return; - - _mouseCurState.w = w; - _mouseCurState.h = h; - - _mouseHotspotX = hotspotX; - _mouseHotspotY = hotspotY; - - _mouseKeyColor = keycolor; - - // copy new cursor - byte *dst = _mouseDataP; - while (h--) { - memcpy(dst, buf, w); - dst += MAX_MOUSE_W; - buf += w; - } -} - -void OSystem_PalmOS5::draw_mouse() { - if (_mouseDrawn || !_mouseVisible) - return; - - byte *src = _mouseDataP; // Image representing the mouse - byte color; - int width; - - _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y; - - int x = _mouseCurState.x - _mouseHotspotX; - int y = _mouseCurState.y - _mouseHotspotY; - int w = _mouseCurState.w; - int h = _mouseCurState.h; - - int draw_x = x; - int draw_y = y; - - // clip the mouse rect - if (x < 0) { - w += x; - src -= x; - x = 0; - } - if (y < 0) { - h += y; - src -= y * MAX_MOUSE_W; - y = 0; - } - if (w > _screenWidth - x) - w = _screenWidth - x; - if (h > _screenHeight - y) - h = _screenHeight - y; - - // Quick check to see if anything has to be drawn at all - if (w <= 0 || h <= 0) - return; - - // Store the bounding box so that undraw mouse can restore the area the - // mouse currently covers to its original content. - _mouseOldState.x = x; - _mouseOldState.y = y; - _mouseOldState.w = w; - _mouseOldState.h = h; - - // Quick check to see if anything has to be drawn at all - if (w <= 0 || h <= 0) - return; - - // Store the bounding box so that undraw mouse can restore the area the - // mouse currently covers to its original content. - _mouseOldState.x = x; - _mouseOldState.y = y; - _mouseOldState.w = w; - _mouseOldState.h = h; - - // Backup the covered area draw the mouse cursor - if (_overlayVisible) { - int16 *bak = (int16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse - int16 *dst = _overlayP + y * _screenWidth + x; - - do { - width = w; - do { - *bak++ = *dst; - color = *src++; - if (color != _mouseKeyColor) // transparent, don't draw - *dst = _nativePal[color]; - dst++; - } while (--width); - - src += MAX_MOUSE_W - w; - bak += MAX_MOUSE_W - w; - dst += _screenWidth - w; - } while (--h); - - } else { - byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse - byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into - - do { - width = w; - do { - *bak++ = *dst; - color = *src++; - if (color != _mouseKeyColor) // transparent, don't draw - *dst = color; - dst++; - } while (--width); - - src += MAX_MOUSE_W - w; - bak += MAX_MOUSE_W - w; - dst += _screenWidth - w; - } while (--h); - } - - _mouseDrawn = true; -} - -void OSystem_PalmOS5::undraw_mouse() { - if (!_mouseDrawn) - return; - - int h = _mouseOldState.h; - // No need to do clipping here, since draw_mouse() did that already - if (_overlayVisible) { - int16 *bak = (int16 *)_mouseBackupP; - int16 *dst = _overlayP + _mouseOldState.y * _screenWidth + _mouseOldState.x; - - do { - memcpy(dst, bak, _mouseOldState.w * 2); - bak += MAX_MOUSE_W; - dst += _screenWidth; - } while (--h); - - } else { - byte *dst, *bak = _mouseBackupP; - dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x; - - do { - memcpy(dst, bak, _mouseOldState.w); - bak += MAX_MOUSE_W; - dst += _screenWidth; - } while (--h); - } - - _mouseDrawn = false; -} diff --git a/backends/PalmOS/Src/os5_overlay.cpp b/backends/PalmOS/Src/os5_overlay.cpp deleted file mode 100644 index 93c6123cef..0000000000 --- a/backends/PalmOS/Src/os5_overlay.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" -#include "common/endian.h" - -void OSystem_PalmOS5::showOverlay() { - // hide fight indicator - draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, false); - - undraw_mouse(); - _overlayVisible = true; - clearOverlay(); -} - -void OSystem_PalmOS5::hideOverlay() { - undraw_mouse(); - _overlayVisible = false; - _redawOSD = true; -} - -void OSystem_PalmOS5::clearOverlay() { - if (!_overlayVisible) - return; - - byte *src = _offScreenP; - int16 *dst = _overlayP; - int cnt = _screenWidth * _screenHeight; - do { - *dst++ = _nativePal[*src++]; - } while (--cnt); -} - -void OSystem_PalmOS5::grabOverlay(OverlayColor *buf, int pitch) { - OverlayColor *src = _overlayP; - int h = _screenHeight; - do { - memcpy(buf, src, _screenWidth * 2); - src += _screenWidth; - buf += pitch; - } while (--h); -} - -void OSystem_PalmOS5::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { - if (w == 0 || h == 0) - return; - - OverlayColor *dst = _overlayP + x + y * _screenWidth; - do { - memcpy(dst, buf, w * 2); - dst += _screenWidth; - buf += pitch; - } while (--h); -} - -OverlayColor OSystem_PalmOS5::RGBToColor(uint8 r, uint8 g, uint8 b) { - return gfxMakeDisplayRGB(r, g, b); -} - -void OSystem_PalmOS5::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { -#ifdef PALMOS_68K - color = SWAP_BYTES_16(color); -#endif - r = ((color >> 8) & 0xF8); - g = ((color >> 3) & 0xFC); - b = ((color << 3) & 0xF8); -} diff --git a/backends/PalmOS/Src/os5_renderer.cpp b/backends/PalmOS/Src/os5_renderer.cpp deleted file mode 100644 index ff692ae863..0000000000 --- a/backends/PalmOS/Src/os5_renderer.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" - -void OSystem_PalmOS5::render_1x(RectangleType &r, PointType &p) { - Coord o = 0; - - if (_overlayVisible) { - int16 *src = _overlayP; - int16 *dst = _workScreenP; - MemMove(dst, src, _screenWidth * _screenHeight * 2); - - } else { - byte *src = _offScreenP; - int16 *dst = _workScreenP; - int cnt = _screenWidth * _screenHeight; - o = _current_shake_pos; - - do { - *dst++ = _nativePal[*src++]; - } while (--cnt); - } - - p.x = _screenOffset.x; - p.y = _screenOffset.y + o; - RctSetRectangle(&r, 0, 0, _screenWidth, _screenHeight - o); -} - -void OSystem_PalmOS5::render_landscape(RectangleType &r, PointType &p) { - Coord x, y, o = 0; - int16 *dst = _workScreenP; - - if (_overlayVisible) { - int16 *src = _overlayP; - - for (y = 0; y < 100; y++) { - // draw 2 lines - for (x = 0; x < 320; x++) { - *dst++ = *src++; - *dst++ = *src; - *dst++ = *src++; - } - // copy the second to the next line - MemMove(dst, dst - 480, 480 * 2); - dst += 480; - } - - } else { - byte *src = _offScreenP; - o = _current_shake_pos; - - for (y = 0; y < 100; y++) { - // draw 2 lines - for (x = 0; x < 320; x++) { - *dst++ = _nativePal[*src++]; - *dst++ = _nativePal[*src]; - *dst++ = _nativePal[*src++]; - } - // copy the second to the next line - MemMove(dst, dst - 480, 480 * 2); - dst += 480; - } - } - - p.x = _screenOffset.x; - p.y = _screenOffset.y + o; - RctSetRectangle(&r, 0, 0, 480, 300 - o); -} - -void OSystem_PalmOS5::render_portrait(RectangleType &r, PointType &p) { - Coord x, y, o = 0; - int16 *dst = _workScreenP; - - if (_overlayVisible) { - int16 *src = _overlayP + 320 - 1; - int16 *src2 = src; - - for (x = 0; x < 160; x++) { - for (y = 0; y < 100; y++) { - *dst++ = *src; - src += 320; - *dst++ = *src; - *dst++ = *src; - src += 320; - } - src = --src2; - - for (y = 0; y < 100; y++) { - *dst++ = *src; - src += 320; - *dst++ = *src; - *dst++ = *src; - src += 320; - } - src = --src2; - - MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5 - dst += 300; - } - - } else { - byte *src = _offScreenP + 320 - 1; - byte *src2 = src; - o = _current_shake_pos; - - for (x = 0; x < 160; x++) { - for (y = 0; y < 100; y++) { - *dst++ = _nativePal[*src]; - src += 320; - *dst++ = _nativePal[*src]; - *dst++ = _nativePal[*src]; - src += 320; - } - src = --src2; - - for (y = 0; y < 100; y++) { - *dst++ = _nativePal[*src]; - src += 320; - *dst++ = _nativePal[*src]; - *dst++ = _nativePal[*src]; - src += 320; - } - src = --src2; - - MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5 - dst += 300; - } - } - - p.y = _screenOffset.x; - p.x = _screenOffset.y + o; - RctSetRectangle(&r, 0, 0, 300 - o, 480); -} - diff --git a/backends/PalmOS/Src/os5_sound.cpp b/backends/PalmOS/Src/os5_sound.cpp deleted file mode 100644 index 4bdded13e7..0000000000 --- a/backends/PalmOS/Src/os5_sound.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5.h" -#include "backends/intern.h" -#include "common/config-manager.h" - -SoundExType _soundEx; - -static Err sndCallback(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) { - SoundExType *_soundEx = (SoundExType *)UserDataP; - SoundType *_sound = _soundEx->sound; - - if (_soundEx->set && _soundEx->size) { - MemMove(bufferP, _soundEx->dataP, _soundEx->size); - *bufferSizeP = _soundEx->size; - _soundEx->set = false; - - } else { - _soundEx->size = *bufferSizeP; - MemSet(bufferP, 128, 0); - *bufferSizeP = 128; - } - - return errNone; -} - -void OSystem_PalmOS5::sound_handler() { - if (_sound.active) { - if (_soundEx.size && !_soundEx.set) { - if (!_soundEx.dataP) - _soundEx.dataP = MemPtrNew(_soundEx.size); - - ((SoundProc)_sound.proc)(_sound.param, (byte *)_soundEx.dataP, _soundEx.size); - _soundEx.set = true; - } - }// TODO : no Sound API case -} - -SndStreamVariableBufferCallback OSystem_PalmOS5::sound_callback() { - return sndCallback; -} - -bool OSystem_PalmOS5::setSoundCallback(SoundProc proc, void *param) { - Err e; - Boolean success = false; - - if (!_sound.active) { - if (gVars->fmQuality != FM_QUALITY_INI) { - ConfMan.setBool("FM_medium_quality", (gVars->fmQuality == FM_QUALITY_MED)); - ConfMan.setBool("FM_high_quality", (gVars->fmQuality == FM_QUALITY_HI)); - } - -#if defined (COMPILE_OS5) - CALLBACK_INIT(_soundEx); -#endif - _sound.proc = proc; - _sound.param = param; - _sound.active = true; // always true when we call this function, false when sound is off - - _soundEx.handle = 0; - _soundEx.size = 0; // set by the callback - _soundEx.set = false; - _soundEx.dataP = NULL; // set by the handler - - if (ConfMan.hasKey("output_rate")) - _samplesPerSec = ConfMan.getInt("output_rate"); - else - _samplesPerSec = SAMPLES_PER_SEC; - - // try to create sound stream - if (OPTIONS_TST(kOptPalmSoundAPI)) { - e = SndStreamCreateExtended( - &_soundEx.handle, - sndOutput, - sndFormatPCM, - _samplesPerSec, -#ifdef PALMOS_68K - sndInt16Big, -#else - sndInt16Little, -#endif - sndStereo, - sound_callback(), - &_soundEx, - 8192 -#ifdef PALMOS_68K - ,false -#elif defined (COMPILE_OS5) - ,true -#endif - ); - - e = e ? e : SndStreamStart(_soundEx.handle); - e = e ? e : SndStreamSetVolume(_soundEx.handle, 1024L * gVars->palmVolume / 100); - success = (e == errNone); - - // no Sound API - } else { - _soundEx.size = 512; - _soundEx.dataP = MemPtrNew(_soundEx.size); - } - } - // if not true some scenes (indy3 256,...) may freeze (ESC to skip) - return true; -} - -void OSystem_PalmOS5::clearSoundCallback() { - if (_sound.active) { - if (OPTIONS_TST(kOptPalmSoundAPI)) { - SndStreamStop(_soundEx.handle); - SndStreamDelete(_soundEx.handle); - } - - if (_soundEx.dataP) - free(_soundEx.dataP); - } - - _sound.active = false; - _soundEx.handle = NULL; - _soundEx.dataP = NULL; -} diff --git a/backends/PalmOS/Src/os5ex_sound.cpp b/backends/PalmOS/Src/os5ex_sound.cpp deleted file mode 100644 index 1cbd5f7f14..0000000000 --- a/backends/PalmOS/Src/os5ex_sound.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_os5ex.h" - -static SYSTEM_CALLBACK Err sndCallbackEx(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) { - CALLBACK_PROLOGUE - SoundType *_sound = ((SoundExType *)UserDataP)->sound; - ((OSystem::SoundProc)_sound->proc)(_sound->param, (byte *)bufferP, *bufferSizeP); - CALLBACK_EPILOGUE - return errNone; -} - -SndStreamVariableBufferCallback OSystem_PalmOS5Ex::sound_callback() { - return sndCallbackEx; -} diff --git a/backends/PalmOS/Src/palm-scumm-md5.h b/backends/PalmOS/Src/palm-scumm-md5.h deleted file mode 100644 index bf82c8e93d..0000000000 --- a/backends/PalmOS/Src/palm-scumm-md5.h +++ /dev/null @@ -1,9 +0,0 @@ - -struct MD5Table { - const char md5[32 + 1]; - const char target[16 + 1]; - Common::Language language; - Common::Platform platform; -}; - -static const MD5Table *md5table; \ No newline at end of file diff --git a/backends/PalmOS/Src/palmdefs.h b/backends/PalmOS/Src/palmdefs.h deleted file mode 100644 index d37b533a21..0000000000 --- a/backends/PalmOS/Src/palmdefs.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef PALMDEFS_H -#define PALMDEFS_H - -#define appFileCreator 'ScVM' -#define sysAppLaunchCustomEngineDelete (sysAppLaunchCmdCustomBase + 0) -#define sysAppLaunchCustomEngineGetInfo (sysAppLaunchCmdCustomBase + 1) - -enum { - GET_NONE = 0, - GET_DATACOMMON = 1 << 1, - GET_DATAENGINE = 1 << 2, - - GET_MODE68K = 1 << 14, - GET_MODEARM = 1 << 15, -}; - -SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP) - SYS_TRAP(sysTrapSysGetAppInfo); - - -#endif diff --git a/backends/PalmOS/Src/palmversion.h b/backends/PalmOS/Src/palmversion.h deleted file mode 100644 index d4362ddd61..0000000000 --- a/backends/PalmOS/Src/palmversion.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef PALMVERSION_H -#define PALMVERSION_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(COMPILE_ZODIAC) -# include -#else -# include -# include -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_agi.h b/backends/PalmOS/Src/prefixes/68k_agi.h deleted file mode 100644 index 154c2d3115..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_agi.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_AGI - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_cine.h b/backends/PalmOS/Src/prefixes/68k_cine.h deleted file mode 100644 index 621fa0c4e1..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_cine.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_CINE - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_gob.h b/backends/PalmOS/Src/prefixes/68k_gob.h deleted file mode 100644 index 1eaa2a5e77..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_gob.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_GOB - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_kyra.h b/backends/PalmOS/Src/prefixes/68k_kyra.h deleted file mode 100644 index 0afb8de061..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_kyra.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_KYRA - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_lure.h b/backends/PalmOS/Src/prefixes/68k_lure.h deleted file mode 100644 index 1bc7b19edd..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_lure.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_LURE - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_queen.h b/backends/PalmOS/Src/prefixes/68k_queen.h deleted file mode 100644 index cdf3859966..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_queen.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_QUEEN - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_saga.h b/backends/PalmOS/Src/prefixes/68k_saga.h deleted file mode 100644 index 0ad4089418..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_saga.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SAGA - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_scumm.h b/backends/PalmOS/Src/prefixes/68k_scumm.h deleted file mode 100644 index 8a6e0d85c3..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_scumm.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SCUMM -//#undef DISABLE_SCUMM_7_8 -//#undef DISABLE_HE - -#define PALMOS_68K -//#define PALMOS_DEBUG - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_simon.h b/backends/PalmOS/Src/prefixes/68k_simon.h deleted file mode 100644 index 54a57c0e93..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_simon.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SIMON - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_sky.h b/backends/PalmOS/Src/prefixes/68k_sky.h deleted file mode 100644 index 52720f508d..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_sky.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SKY - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_sword1.h b/backends/PalmOS/Src/prefixes/68k_sword1.h deleted file mode 100644 index 984e704cc5..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_sword1.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SWORD1 - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/68k_sword2.h b/backends/PalmOS/Src/prefixes/68k_sword2.h deleted file mode 100644 index bca68ff4d3..0000000000 --- a/backends/PalmOS/Src/prefixes/68k_sword2.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "compile.h" -#undef DISABLE_SWORD2 - -#define PALMOS_68K - -#endif diff --git a/backends/PalmOS/Src/prefixes/compile.h b/backends/PalmOS/Src/prefixes/compile.h deleted file mode 100644 index 3d929b889c..0000000000 --- a/backends/PalmOS/Src/prefixes/compile.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __COMPILE_H__ -#define __COMPILE_H__ - -#define DISABLE_SCUMM -#define DISABLE_SCUMM_7_8 -#define DISABLE_HE - -#define DISABLE_SIMON -#define DISABLE_SKY -#define DISABLE_SWORD1 -#define DISABLE_SWORD2 -#define DISABLE_QUEEN -#define DISABLE_SAGA -#define DISABLE_KYRA -#define DISABLE_AWE -#define DISABLE_GOB -#define DISABLE_LURE -#define DISABLE_CINE -#define DISABLE_AGI - -#define DISABLE_HQ_SCALERS - -// PalmOS -#define PALMOS_MODE -#define COMPILE_ZODIAC -//#define COMPILE_OS5 - -//#define DISABLE_ADLIB -//#define DISABLE_LIGHTSPEED -//#define DISABLE_TAPWAVE -//#define REDUCE_MEMORY_USAGE - -//#define _DEBUG - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_agi.h b/backends/PalmOS/Src/prefixes/native_agi.h deleted file mode 100644 index 496cf7c85b..0000000000 --- a/backends/PalmOS/Src/prefixes/native_agi.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_AGI - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_cine.h b/backends/PalmOS/Src/prefixes/native_cine.h deleted file mode 100644 index 212a5544d0..0000000000 --- a/backends/PalmOS/Src/prefixes/native_cine.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_CINE - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_common.h b/backends/PalmOS/Src/prefixes/native_common.h deleted file mode 100644 index c04f5e1538..0000000000 --- a/backends/PalmOS/Src/prefixes/native_common.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef ZNATIVE_COMMON_H -#define ZNATIVE_COMMON_H - -#include "compile.h" -#include "palmmad.h" -#include "palmtremor.h" - -#define __TWNEW_H__ - -#define PALMOS_ARM -#define DISABLE_LIGHTSPEED - -#define USE_MAD -#define USE_TREMOR -//#define USE_VORBIS -//#define USE_MPEG2 - -// enable assert -//#define _DEBUG - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_gob.h b/backends/PalmOS/Src/prefixes/native_gob.h deleted file mode 100644 index 16863cd5b6..0000000000 --- a/backends/PalmOS/Src/prefixes/native_gob.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_GOB - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_kyra.h b/backends/PalmOS/Src/prefixes/native_kyra.h deleted file mode 100644 index 7f6dd57565..0000000000 --- a/backends/PalmOS/Src/prefixes/native_kyra.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_KYRA - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_lure.h b/backends/PalmOS/Src/prefixes/native_lure.h deleted file mode 100644 index 1d9005045c..0000000000 --- a/backends/PalmOS/Src/prefixes/native_lure.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_LURE - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_queen.h b/backends/PalmOS/Src/prefixes/native_queen.h deleted file mode 100644 index d2a1b44ef8..0000000000 --- a/backends/PalmOS/Src/prefixes/native_queen.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_QUEEN - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_saga.h b/backends/PalmOS/Src/prefixes/native_saga.h deleted file mode 100644 index 1a728e6bcb..0000000000 --- a/backends/PalmOS/Src/prefixes/native_saga.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SAGA - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_scumm.h b/backends/PalmOS/Src/prefixes/native_scumm.h deleted file mode 100644 index 196628909a..0000000000 --- a/backends/PalmOS/Src/prefixes/native_scumm.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SCUMM -#undef DISABLE_SCUMM_7_8 -#undef DISABLE_HE - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_simon.h b/backends/PalmOS/Src/prefixes/native_simon.h deleted file mode 100644 index b3c6710141..0000000000 --- a/backends/PalmOS/Src/prefixes/native_simon.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SIMON - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_sky.h b/backends/PalmOS/Src/prefixes/native_sky.h deleted file mode 100644 index 193c57e87d..0000000000 --- a/backends/PalmOS/Src/prefixes/native_sky.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SKY - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_sword1.h b/backends/PalmOS/Src/prefixes/native_sword1.h deleted file mode 100644 index 8e52a978a8..0000000000 --- a/backends/PalmOS/Src/prefixes/native_sword1.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SWORD1 -#define USE_MPEG2 -#define USE_VORBIS - -#endif diff --git a/backends/PalmOS/Src/prefixes/native_sword2.h b/backends/PalmOS/Src/prefixes/native_sword2.h deleted file mode 100644 index f74a8bcc9a..0000000000 --- a/backends/PalmOS/Src/prefixes/native_sword2.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#include "native_common.h" -#undef DISABLE_SWORD2 -#undef _DEBUG -#define USE_MPEG2 -#define USE_VORBIS - -#endif diff --git a/backends/PalmOS/Src/prefixes/prefix_frontend.h b/backends/PalmOS/Src/prefixes/prefix_frontend.h deleted file mode 100644 index 6c7d749539..0000000000 --- a/backends/PalmOS/Src/prefixes/prefix_frontend.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -#define PALMOS_68K -#define PALMOS_MODE -//#define _DEBUG_ENGINE - -#endif diff --git a/backends/PalmOS/Src/prefixes/prefix_os5.h b/backends/PalmOS/Src/prefixes/prefix_os5.h deleted file mode 100644 index a039002840..0000000000 --- a/backends/PalmOS/Src/prefixes/prefix_os5.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -// PalmOS -#define PALMOS_MODE -#define PALMOS_68K -#define PALMOS_NATIVE - -#define COMPILE_OS5 - -#endif diff --git a/backends/PalmOS/Src/prefixes/prefix_zodiac.h b/backends/PalmOS/Src/prefixes/prefix_zodiac.h deleted file mode 100644 index 708166d998..0000000000 --- a/backends/PalmOS/Src/prefixes/prefix_zodiac.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef PREFIX_H -#define PREFIX_H - -// PalmOS -#define PALMOS_MODE -#define PALMOS_68K -#define PALMOS_NATIVE - -#define COMPILE_ZODIAC - -#endif diff --git a/backends/PalmOS/Src/rumble.cpp b/backends/PalmOS/Src/rumble.cpp deleted file mode 100644 index e868f25a04..0000000000 --- a/backends/PalmOS/Src/rumble.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include "globals.h" -#include "vibrate.h" -#include "rumble.h" - -#ifndef DISABLE_TAPWAVE -#include "tapwave.h" - -TwDeviceHandle hRumble; -#endif - -Boolean RumbleExists() { - Boolean exists = false; - Err e; - -#ifndef DISABLE_TAPWAVE - if (OPTIONS_TST(kOptDeviceZodiac)) { - e = TwDeviceOpen(&hRumble, "vibrator0", "w"); - if (!e) { - exists = true; - TwDeviceClose(hRumble); - } - - } else -#endif - { -#ifndef PALMOS_ARM - - UInt32 romVersion; - - e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); - if (!e) { - if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) { - Boolean active = false; - e = HwrVibrateAttributes(0, kHwrVibrateActive, &active); - exists = (!e) ? true : exists; - } - } -#endif - } - - - return exists; -} - -void RumbleRun(Boolean active) { -#ifndef DISABLE_TAPWAVE - if (OPTIONS_TST(kOptDeviceZodiac)) { - if (active) { - UInt8 buf[] = { '\64', '\100' }; - TwDeviceControl(hRumble, 'play', buf, sizeof(buf)); - } else { - TwDeviceControl(hRumble, 'stop', 0, 0); - } - - } else -#endif - { -#ifndef PALMOS_ARM - UInt32 pattern = active ? 0xFF000000 : 0x00000000; - - HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); - HwrVibrateAttributes(1, kHwrVibrateActive, &active); -#endif - } - -} - -Boolean RumbleInit() { - Boolean done = false; - -#ifndef DISABLE_TAPWAVE - if (OPTIONS_TST(kOptDeviceZodiac)) { - Err e = TwDeviceOpen(&hRumble, "vibrator0", "w"); - done = (!e); - - } else -#endif - { -#ifndef PALMOS_ARM - if (RumbleExists()) { - UInt16 cycle = (SysTicksPerSecond())/2; - UInt32 pattern = 0xFF000000; - UInt16 delay = 1; - UInt16 repeat = 1; - - HwrVibrateAttributes(1, kHwrVibrateRate, &cycle); - HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); - HwrVibrateAttributes(1, kHwrVibrateDelay, &delay); - HwrVibrateAttributes(1, kHwrVibrateRepeatCount, &repeat); - - done = true; - } -#endif - } - return done; -} - -void RumbleRelease() { -#ifndef DISABLE_TAPWAVE - if (OPTIONS_TST(kOptDeviceZodiac)) { - TwDeviceClose(hRumble); - - } else -#endif - { -#ifndef PALMOS_ARM - UInt32 pattern = 0x00000000; - Boolean active = false; - - HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); - HwrVibrateAttributes(1, kHwrVibrateActive, &active); -#endif - } -} \ No newline at end of file diff --git a/backends/PalmOS/Src/rumble.h b/backends/PalmOS/Src/rumble.h deleted file mode 100644 index d9e8e5b951..0000000000 --- a/backends/PalmOS/Src/rumble.h +++ /dev/null @@ -1,33 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __RUMBLE_H__ -#define __RUMBLE_H__ - -Boolean RumbleExists (); -void RumbleRun (Boolean active); -Boolean RumbleInit (); -void RumbleRelease (); - -#endif \ No newline at end of file diff --git a/backends/PalmOS/Src/scumm_globals.cpp b/backends/PalmOS/Src/scumm_globals.cpp deleted file mode 100644 index a8fc5c67a6..0000000000 --- a/backends/PalmOS/Src/scumm_globals.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include - -#include "palmdefs.h" -#include "globals.h" -#include "scumm_globals.h" - -static void GlbInitAll() { - if (gVars->globals[GBVARS_COMMON]) { - CALL_INIT(ScummFont) - } - if (gVars->globals[GBVARS_ENGINE]) { -#ifndef DISABLE_SCUMM -# ifndef DISABLE_SCUMM_7_8 - CALL_INIT(DimuseTables) - CALL_INIT(DimuseCodecs) - CALL_INIT(Codec47) -# endif - CALL_INIT(Akos) - CALL_INIT(Gfx) - CALL_INIT(Dialogs) - CALL_INIT(Charset) - CALL_INIT(Costume) - CALL_INIT(PlayerV2) - CALL_INIT(Scumm_md5table) -#endif -#ifndef DISABLE_SIMON - CALL_INIT(Simon_Simon) - CALL_INIT(Simon_Cursor) - CALL_INIT(Simon_Charset) -#endif -#ifndef DISABLE_SKY - CALL_INIT(Sky_Hufftext) -#endif -#ifndef DISABLE_SWORD1 - CALL_INIT(Sword1_fxList) -#endif -#ifndef DISABLE_QUEEN - CALL_INIT(Queen_Talk) - CALL_INIT(Queen_Display) - CALL_INIT(Queen_Graphics) - CALL_INIT(Queen_Restables) - CALL_INIT(Queen_Musicdata) -#endif - } -} - -static void GlbReleaseAll() { - if (gVars->globals[GBVARS_COMMON]) { - CALL_RELEASE(ScummFont) - - } - if (gVars->globals[GBVARS_SCUMM]) { -#ifndef DISABLE_SCUMM -# ifndef DISABLE_SCUMM_7_8 - CALL_RELEASE(DimuseTables) - CALL_RELEASE(DimuseCodecs) - CALL_RELEASE(Codec47) -# endif - CALL_RELEASE(Akos) - CALL_RELEASE(Gfx) - CALL_RELEASE(Dialogs) - CALL_RELEASE(Charset) - CALL_RELEASE(Costume) - CALL_RELEASE(PlayerV2) - CALL_RELEASE(Scumm_md5table) -#endif -#ifndef DISABLE_SIMON - CALL_RELEASE(Simon_Simon) - CALL_RELEASE(Simon_Cursor) - CALL_RELEASE(Simon_Charset) -#endif -#ifndef DISABLE_SKY - CALL_RELEASE(Sky_Hufftext) -#endif -#ifndef DISABLE_SWORD1 - CALL_RELEASE(Sword1_fxList) -#endif -#ifndef DISABLE_QUEEN - CALL_RELEASE(Queen_Talk) - CALL_RELEASE(Queen_Display) - CALL_RELEASE(Queen_Graphics) - CALL_RELEASE(Queen_Restables) - CALL_RELEASE(Queen_Musicdata) -#endif - } -} - -//TODO : use Boolean instead of void to check err -static DmOpenRef GlbOpenInternal(const Char *nameP) { - LocalID dbID = DmFindDatabase(0, nameP); - if (dbID) { - UInt32 dbType, dbCreator; - Err e = DmDatabaseInfo(0, dbID, 0, 0, 0, 0, 0, 0, 0, 0, 0, &dbType, &dbCreator); - - if (!e && dbType == 'GLBS' && dbCreator == appFileCreator) - return DmOpenDatabase(0, dbID, dmModeReadOnly); - } - return NULL; -} - -void GlbOpen() { - gVars->globals[GBVARS_COMMON] = GlbOpenInternal("Glbs::Common"); - gVars->globals[GBVARS_ENGINE] = GlbOpenInternal("Glbs::Engine"); - GlbInitAll(); -} - -void GlbClose() { - GlbReleaseAll(); - - if (gVars->globals[GBVARS_COMMON]) - DmCloseDatabase(gVars->globals[GBVARS_COMMON]); - if (gVars->globals[GBVARS_ENGINE]) - DmCloseDatabase(gVars->globals[GBVARS_ENGINE]); -} - -void *GlbGetRecord(UInt16 index, UInt16 id) { - if (gVars->globals[id]) { - MemHandle recordH = DmQueryRecord(gVars->globals[id], index); - if (recordH) - return MemHandleLock(recordH); - } - return NULL; -} - -void GlbReleaseRecord(UInt16 index, UInt16 id) { - if (gVars->globals[id]) { - MemHandle recordH = DmQueryRecord(gVars->globals[id], index); - if (recordH) - MemHandleUnlock(recordH); - } -} diff --git a/backends/PalmOS/Src/scumm_globals.h b/backends/PalmOS/Src/scumm_globals.h deleted file mode 100644 index 3308c54a73..0000000000 --- a/backends/PalmOS/Src/scumm_globals.h +++ /dev/null @@ -1,91 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __SCUMM_GLOBALS_H__ -#define __SCUMM_GLOBALS_H__ - -#include "builder/enum_globals.h" - -void *GlbGetRecord(UInt16 index, UInt16 id); -void GlbReleaseRecord(UInt16 index, UInt16 id); -void GlbOpen(); -void GlbClose(); - - -#define _GINIT(x) void initGlobals_##x() { -#define _GEND } -#define _GRELEASE(x) void releaseGlobals_##x() { - -#define CALL_INIT(x) initGlobals_##x(); -#define CALL_RELEASE(x) releaseGlobals_##x(); - -#define _GSETPTR(var,index,format,id) var = (format *)GlbGetRecord(index,id); -#define _GRELEASEPTR(index,id) GlbReleaseRecord(index,id); - -#define PROTO_GLOBALS(x) void CALL_INIT(x);\ - void CALL_RELEASE(x); - - -// Common stuffs -PROTO_GLOBALS(ScummFont) - -// Scumm stuffs -#ifndef DISABLE_SCUMM -PROTO_GLOBALS(DimuseTables) -PROTO_GLOBALS(Akos) -PROTO_GLOBALS(DimuseCodecs) -PROTO_GLOBALS(Codec47) -PROTO_GLOBALS(Gfx) -PROTO_GLOBALS(Dialogs) -PROTO_GLOBALS(Charset) -PROTO_GLOBALS(Costume) -PROTO_GLOBALS(PlayerV2) -PROTO_GLOBALS(Scumm_md5table) -#endif -// Simon stuffs -#ifndef DISABLE_SIMON -PROTO_GLOBALS(Simon_Simon) -PROTO_GLOBALS(Simon_Cursor) -PROTO_GLOBALS(Simon_Charset) -#endif -// Sky stuffs -#ifndef DISABLE_SKY -PROTO_GLOBALS(Sky_Hufftext) -#endif -// Queen stuffs -#ifndef DISABLE_QUEEN -PROTO_GLOBALS(Queen_Talk) -PROTO_GLOBALS(Queen_Display) -PROTO_GLOBALS(Queen_Graphics) -PROTO_GLOBALS(Queen_Restables) -PROTO_GLOBALS(Queen_Musicdata) -#endif -// Sword1 stuffs -#ifndef DISABLE_SWORD1 -PROTO_GLOBALS(Sword1_fxList) -#endif - -#undef PROTO_GLOBALS - -#endif diff --git a/backends/PalmOS/Src/snd_pa1.cpp b/backends/PalmOS/Src/snd_pa1.cpp deleted file mode 100644 index ca64825fe6..0000000000 --- a/backends/PalmOS/Src/snd_pa1.cpp +++ /dev/null @@ -1,113 +0,0 @@ -#include - -#include "native.h" -#include "globals.h" - -#ifdef COMPILE_PA1SND -# include -#endif - - -static Int32 diffLookup[16] = { - 1,3,5,7,9,11,13,15, - -1,-3,-5,-7,-9,-11,-13,-15, -}; - -static Int32 indexScale[16] = { - 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266, - 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266 /* same value for speedup */ -}; - -static int limit(int val,int min,int max) { - if (valmax) return max; - else return val; -} - -void pcm2adpcm(Int16 *src, UInt8 *dst, UInt32 length) { -#ifndef COMPILE_PA1SND -/* - if (OPTIONS_TST(kOptDeviceARM)) { - PnoDescriptor pno; - ARMPa1SndType userData = {src, dst, length}; - - MemPtr armP = _PnoInit(ARM_PA1SND, &pno); - _PnoCall(&pno, &userData); - _PnoFree(&pno, armP); - - return; - } -*/ - int data,val,diff; - int signal,step; -#else - long chan1, chan2; - long data,val,diff; - long signal,step; -#endif - - signal = 0; - step = 0x7F; - length >>= 3; // 16bit stereo -> 4bit mono - - do { - - // high nibble -#ifdef COMPILE_PA1SND - chan1 = ByteSwap16(*src); - src++; - chan2 = ByteSwap16(*src); - src++; - - diff = ((chan1 + chan2) >> 1) - signal; -#else - diff = ((*src++ + *src++) >> 1) - signal; -#endif - diff <<= 3; - diff /= step; - - val = abs(diff) >> 1; - - if (val > 7) val = 7; - if (diff < 0) val+= 8; - - signal+= (step * diffLookup[val]) >> 3; - signal = limit(signal, -32768, 32767); - - step = (step * indexScale[val]) >> 8; - step = limit(step, 0x7F, 0x6000); - - data = val; - - // low nibble -#ifdef COMPILE_PA1SND - chan1 = ByteSwap16(*src); - src++; - chan2 = ByteSwap16(*src); - src++; - - diff = ((chan1 + chan2) >> 1) - signal; -#else - diff = ((*src++ + *src++) >> 1) - signal; -#endif - diff <<= 3; - diff /= step; - - val = abs(diff) >> 1; - - if (val > 7) val = 7; - if (diff < 0) val+= 8; - - signal+= (step * diffLookup[val]) >> 3; - signal = limit(signal, -32768, 32767); - - step = (step * indexScale[val]) >> 8; - step = limit(step, 0x7F, 0x6000); - - data |= val << 4; - - *dst++ = (UInt8)data; - - } while(--length); - -} diff --git a/backends/PalmOS/Src/stuffs.h b/backends/PalmOS/Src/stuffs.h deleted file mode 100644 index b6f5a3f38b..0000000000 --- a/backends/PalmOS/Src/stuffs.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef STUFFS_H -#define STUFFS_H - -enum { - kOptNone = 0, - kOptDeviceARM = 1 << 0x00, - kOptDeviceOS5 = 1 << 0x01, - kOptDeviceClie = 1 << 0x02, - kOptDeviceZodiac = 1 << 0x03, - kOptModeWide = 1 << 0x04, - kOptModeLandscape = 1 << 0x05, - kOptMode16Bit = 1 << 0x06, - kOptModeHiDensity = 1 << 0x07, - kOptCollapsible = 1 << 0x08, - kOptDisableOnScrDisp = 1 << 0x09, - kOpt5WayNavigatorV1 = 1 << 0x0A, - kOpt5WayNavigatorV2 = 1 << 0x0B, - kOptPalmSoundAPI = 1 << 0x0C, - kOptSonyPa1LibAPI = 1 << 0x0D, - kOptGoLcdAPI = 1 << 0x0E, - kOptLightspeedAPI = 1 << 0x0F, - - kOptDeviceProcX86 = 1 << 0x1F // DEBUG only -}; - -// WARNING : you need to define OPTIONS_DEF() -#define OPTIONS_TST(x) (OPTIONS_DEF() & (x)) -#define OPTIONS_SET(x) OPTIONS_DEF() |= (x) -#define OPTIONS_RST(x) OPTIONS_DEF() &= ~(x) - -#endif diff --git a/backends/PalmOS/Src/vibrate.h b/backends/PalmOS/Src/vibrate.h deleted file mode 100644 index 37604be5b7..0000000000 --- a/backends/PalmOS/Src/vibrate.h +++ /dev/null @@ -1,61 +0,0 @@ -/********************************************************************** -** ** -** vibrate.h ** -** ** -** Definitions for setting/retrieving the state of the vibrator on ** -** PalmOS 4.x devices. These calls are not officially supported by ** -** Palm Inc and subsidiaries. It is not guaranteed that these calls ** -** will work at all or at least the same on every device. YOU ARE ** -** USING THESE ENTIRELY ON YOUR VERY OWN RISK ! ** -** ** -** Please send corrections to dseifert@dseifert.com ** -**********************************************************************/ - -#include - -/* HwrVibrateAttributes takes three arguments: -** Boolean set Should the setting be set (1) or retrieved (0) -** UInt32 setting what should be set -** void* value pointer to the value to set, or to store the -** retrieved setting -*/ - -Err HwrVibrateAttributes(Boolean set, UInt32 setting, void *value) - SYS_TRAP(sysTrapHwrVibrateAttributes); - -/* to determine whether the vibrator is supported on a specific device, you -** need to make sure that you are running on PalmOS 4.x (so that the -** trap exists), that the attention manager exists and you need to check -** whether HwrVibrateAttributes(0, 1, &active) returns an error code of -** 0. ('active' is a Boolean). -*/ - - -/***************************************************************/ -/* For the second parameter, the following defines can be used */ -/***************************************************************/ - -/* *value points to a Boolean stating the state of the vibrator */ -#define kHwrVibrateActive 1 - -/* *value points to a UInt16, specifying the length of one cycle. -** value is in ticks (1/100 seconds) */ -#define kHwrVibrateRate 2 - -/* *value points to a UInt32, specifying the pattern of vibrating -** -** example: -** 0xFFFFFFFF stay on, no vibrating -** 0x0F0F0F0F vibrate four times in equal intervals -** 0xAAAAAAAA vibrate really fast (not recommended) -** 0x0F0F0000 vibrate twice, then pause -*/ -#define kHwrVibratePattern 3 - -/* *value points to a UInt16, specifying the delay between two -** cycles in ticks */ -#define kHwrVibrateDelay 4 - -/* *value points to a UInt16 specifying the amount of repeats. */ -#define kHwrVibrateRepeatCount 5 - diff --git a/backends/PalmOS/Src/zodiac_event.cpp b/backends/PalmOS/Src/zodiac_event.cpp deleted file mode 100644 index 68afbe87a9..0000000000 --- a/backends/PalmOS/Src/zodiac_event.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_zodiac.h" - -void OSystem_PalmZodiac::get_coordinates(EventPtr ev, Coord &x, Coord &y) { - Boolean dummy; - EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy); - - x = (ev->screenX - _screenOffset.x); - y = (ev->screenY - _screenOffset.y); - - if (_stretched) { - Int32 w, h; - - if (_mode == GFX_NORMAL) { - - h = gVars->screenHeight - MIN_OFFSET * 2; - w = gVars->screenWidth; - x = (_screenWidth * x) / w; - y = (_screenHeight * y) / h; - - } else { - - h = (_ratio.adjustAspect == kRatioHeight ? _ratio.height : gVars->screenFullHeight); - w = (_ratio.adjustAspect == kRatioWidth ? _ratio.width : gVars->screenFullWidth); - x = (_screenWidth * x) / w; - y = (_screenHeight * y) / h; - } - } -} - -bool OSystem_PalmZodiac::check_event(Event &event, EventPtr ev) { - if (ev->eType == keyDownEvent) { - switch (ev->data.keyDown.chr) { - // F5 = menu - case vchrThumbWheelBack: - _lastKey = kKeyNone; - event.type = EVENT_KEYDOWN; - event.kbd.keycode = 319; - event.kbd.ascii = 319; - event.kbd.flags = 0; - return true; - - case vchrTriggerLeft: - hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE); - return false; // not a key - - case vchrTriggerRight: - setFeatureState(kFeatureAspectRatioCorrection, 0); - return false; // not a key - - case vchrActionLeft: - _lastKey = kKeyMouseLButton; - event.type = EVENT_LBUTTONDOWN; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - - case vchrActionRight: - _lastKey = kKeyNone; - event.type = EVENT_RBUTTONDOWN; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - - // skip text - case vchrActionDown: - event.type = EVENT_KEYDOWN; - event.kbd.keycode = '.'; - event.kbd.ascii = '.'; - event.kbd.flags = 0; - return true; - - // trun off - case vchrAutoOff: - case vchrPowerOff: - // pause the sound thread if any - if (_sound.active) - SndStreamPause(_soundEx.handle, true); - break; - - case vchrLateWakeup: - // resume the sound thread if any - if (_sound.active) - SndStreamPause(_soundEx.handle, false); - break; - } - - } else if (_overlayVisible) { - switch (_lastKey) { - case kKeyMouseLButton: - _lastKey = kKeyNone; - event.type = EVENT_LBUTTONUP; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - - } - } - - return false; -} diff --git a/backends/PalmOS/Src/zodiac_gfx.cpp b/backends/PalmOS/Src/zodiac_gfx.cpp deleted file mode 100644 index bb70983e79..0000000000 --- a/backends/PalmOS/Src/zodiac_gfx.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_zodiac.h" -#include "common/config-manager.h" -#include "graphics/surface.h" -#include "rumble.h" - -#ifdef PALMOS_68K -#define _TwGfxOpen(x, y) TwGfxOpen((TwGfxHandle*)x, y); -#else -static asm Err _TwGfxOpen(void **aResult, void *aInfoResult) { - stmfd sp!, {r4-r11,lr} - ldr r9, [r9] - ldr r9, [r9] - sub sp, sp, #0x24 - mov r6, r0 - mov r7, r1 - ldr pc, =0x200995F0 -} -#endif - -int OSystem_PalmZodiac::getDefaultGraphicsMode() const { - return GFX_WIDE; -} - -void OSystem_PalmZodiac::load_gfx_mode() { - Err e; - - if (_gfxLoaded) - return; - _gfxLoaded = true; - - // get command line config - _fullscreen = ConfMan.getBool("fullscreen"); // TODO : (NORMAL mode) - _ratio.adjustAspect = ConfMan.getBool("aspect_ratio") ? kRatioHeight : kRatioNone; - - // precalc ratio (WIDE mode) - _ratio.width = ((float)_screenWidth / _screenHeight * gVars->screenFullHeight); - _ratio.height = ((float)_screenHeight / _screenWidth * gVars->screenFullWidth); - - _sysOldOrientation = SysGetOrientation(); - SysSetOrientation(sysOrientationLandscape); - - _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit - _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H); - _offScreenP = (byte *)MemPtrNew(_screenWidth * _screenHeight); - - MemSet(_offScreenP, _screenWidth * _screenHeight, 0); - MemSet(_nativePal, sizeof(_nativePal), 0); - MemSet(_currentPalette, sizeof(_currentPalette), 0); - - UInt32 depth = 16; - WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - - gVars->indicator.on = RGBToColor(0,255,0); - gVars->indicator.off = RGBToColor(0,0,0); - - _screenH = WinGetDisplayWindow(); - _screenP = (byte *)BmpGetBits(WinGetBitmap(_screenH)); - - e = _TwGfxOpen((void **)&_gfxH, 0); - e = TwGfxGetPalmDisplaySurface(_gfxH, &_palmScreenP); - - // overlay buffer - TwGfxSurfaceInfoType nfo = { - sizeof(TwGfxSurfaceInfoType), - _screenWidth, _screenHeight, _screenWidth * 2, - twGfxLocationAcceleratorMemory, - twGfxPixelFormatRGB565_LE - }; - e = TwGfxAllocSurface(_gfxH, &_overlayP, &nfo); - - // prepare main bitmap - _srcBmp.size = sizeof(TwGfxBitmapType); - _srcBmp.width = _screenWidth; - _srcBmp.height = _screenHeight; - _srcBmp.rowBytes = _screenWidth; - _srcBmp.pixelFormat = twGfxPixelFormat8bpp; - _srcBmp.data = _offScreenP; - _srcBmp.palette = _nativePal; - - _srcRect.x = 0; - _srcRect.y = 0; - _srcRect.w = _screenWidth; - _srcRect.h = _screenHeight; - - hotswap_gfx_mode(_mode); -} - -void OSystem_PalmZodiac::hotswap_gfx_mode(int mode) { - Err e; - TwGfxSetClip(_palmScreenP, 0); - WinSetDrawWindow(_screenH); - - _screenDest.w = _screenWidth; - _screenDest.h = _screenHeight; - - // prevent bad DIA redraw (Stat part) - if (mode == GFX_NORMAL) { - _redawOSD = true; - _stretched = (_screenWidth > gVars->screenWidth); - StatShow(); - PINSetInputAreaState(pinInputAreaOpen); - - if (_stretched) { - calc_rect(false); - } else { - // offsets - _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2; - _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2; - - // clip Tapwave API - TwGfxRectType rt = { _screenOffset.x, _screenOffset.y, _screenWidth, _screenHeight }; - TwGfxSetClip(_palmScreenP, &rt); - } - - } else { - _redawOSD = false; - _stretched = true; - PINSetInputAreaState(pinInputAreaClosed); - StatHide(); - - calc_rect(true); - } - - if (_stretched) { - OPTIONS_SET(kOptDisableOnScrDisp); - TwGfxSetClip(_palmScreenP, &_dstRect); - - if (!_tmpScreenP) { - // wide buffer - TwGfxSurfaceInfoType nfo = { - sizeof(TwGfxSurfaceInfoType), - _screenWidth, _screenHeight, _screenWidth * 2, - twGfxLocationAcceleratorMemory, - twGfxPixelFormatRGB565_LE - }; - e = TwGfxAllocSurface(_gfxH, &_tmpScreenP, &nfo); - } - } else { - OPTIONS_RST(kOptDisableOnScrDisp); - if (_tmpScreenP) { - e = TwGfxFreeSurface(_tmpScreenP); - _tmpScreenP = NULL; - } - } - - _mode = mode; - _srcPos.x = _screenOffset.x; - _srcPos.y = _screenOffset.y; - clearScreen(); -// updateScreen(); -} - -void OSystem_PalmZodiac::unload_gfx_mode() { - Err e; - - if (!_gfxLoaded) - return; - _gfxLoaded = false; - - if (_tmpScreenP) { - e = TwGfxFreeSurface(_tmpScreenP); - _tmpScreenP = NULL; - } - - e = TwGfxFreeSurface(_overlayP); - e = TwGfxClose(_gfxH); - - UInt32 depth = 8; - WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); - - MemPtrFree(_mouseBackupP); - MemPtrFree(_mouseDataP); - MemPtrFree(_offScreenP); - - SysSetOrientation(_sysOldOrientation); - StatShow(); - PINSetInputAreaState(pinInputAreaOpen); -} - -static void rumblePack(Boolean active) { - if (!gVars->vibrator) - return; - - RumbleRun(active); -} - -void OSystem_PalmZodiac::int_setShakePos(int shakeOffset) { - if (shakeOffset == 0) - rumblePack(false); -} - -void OSystem_PalmZodiac::updateScreen() { - Err e; - - // draw the mouse pointer - draw_mouse(); - // update the screen - if (_overlayVisible) { - if (_stretched) { - TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h}; - e = TwGfxStretchBlt2(_palmScreenP, &dst, _overlayP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0)); - } else { - e = TwGfxBitBlt(_palmScreenP, &_srcPos, _overlayP, &_srcRect); - } - - } else { - if (_stretched) { - TwGfxPointType pos = {0, 0}; - TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h}; - - if (_new_shake_pos != _current_shake_pos) { - TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _dstRect.w, _new_shake_pos }; - - if (_new_shake_pos != 0) { - TwGfxFillRect(_palmScreenP, &r, 0); - rumblePack(_new_shake_pos >= 3); - } - r.y += dst.h; - r.h = _current_shake_pos; - TwGfxFillRect(_palmScreenP, &r, 0); - - _current_shake_pos = _new_shake_pos; - dst.y += _new_shake_pos; - } - e = TwGfxDrawBitmap(_tmpScreenP, &pos, &_srcBmp); - e = TwGfxStretchBlt2(_palmScreenP, &dst, _tmpScreenP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0)); - - } else { - TwGfxPointType pos = {_srcPos.x, _srcPos.y}; - - if (_new_shake_pos != _current_shake_pos) { - if (_new_shake_pos != 0) { - TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _screenWidth, _new_shake_pos }; - TwGfxFillRect(_palmScreenP, &r, 0); - rumblePack(_new_shake_pos >= 3); - } - _current_shake_pos = _new_shake_pos; - pos.y += _new_shake_pos; - } - e = TwGfxDrawBitmap(_palmScreenP, &pos, &_srcBmp); - } - } - undraw_mouse(); -} - -bool OSystem_PalmZodiac::grabRawScreen(Graphics::Surface *surf) { - assert(surf); - - surf->create(_screenWidth, _screenHeight, 1); - MemMove(surf->pixels, _offScreenP, _screenWidth * _screenHeight); - - return true; -} - -void OSystem_PalmZodiac::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { - _nativePal[index] = TwGfxMakeDisplayRGB( r, g, b); -} - -void OSystem_PalmZodiac::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { - if (_mode != GFX_NORMAL) - return; - MemHandle hTemp = DmGetResource(bitmapRsc, id + 100); - - if (hTemp) { - RGBColorType oldRGB; - static const RGBColorType pal[4] = { - {0,0,255,0}, - {0,255,255,0}, - {0,255,0,0}, - {0,0,0,0} - }; - - BitmapType *bmTemp; - bmTemp = (BitmapType *)MemHandleLock(hTemp); - - Coord w, h; - WinGetBitmapDimensions(bmTemp, &w, &h); // return the size of the low density bmp - - PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; - RectangleType c, r = { dst.x, dst.y, w * 2, h * 2 }; - - UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); - WinSetDrawWindow(_screenH); - if (show) { - WinSetForeColorRGB(&pal[3], &oldRGB); - WinSetBackColorRGB(&pal[color], &oldRGB); - WinPaintBitmap(bmTemp, dst.x, dst.y); - } else { - WinSetBackColorRGB(&pal[3], &oldRGB); - WinFillRectangle(&r, 0); - } - WinSetCoordinateSystem(old); - - MemPtrUnlock(bmTemp); - DmReleaseResource(hTemp); - } -} diff --git a/backends/PalmOS/Src/zodiac_mouse.cpp b/backends/PalmOS/Src/zodiac_mouse.cpp deleted file mode 100644 index 813da9d56a..0000000000 --- a/backends/PalmOS/Src/zodiac_mouse.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_zodiac.h" - -void OSystem_PalmZodiac::draw_mouse() { - if (_mouseDrawn || !_mouseVisible) - return; - - byte *src = _mouseDataP; // Image representing the mouse - byte color; - int width; - - _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y; - - int x = _mouseCurState.x - _mouseHotspotX; - int y = _mouseCurState.y - _mouseHotspotY; - int w = _mouseCurState.w; - int h = _mouseCurState.h; - - int draw_x = x; - int draw_y = y; - - // clip the mouse rect - if (x < 0) { - w += x; - src -= x; - x = 0; - } - if (y < 0) { - h += y; - src -= y * MAX_MOUSE_W; - y = 0; - } - if (w > _screenWidth - x) - w = _screenWidth - x; - if (h > _screenHeight - y) - h = _screenHeight - y; - - // Quick check to see if anything has to be drawn at all - if (w <= 0 || h <= 0) - return; - - // Store the bounding box so that undraw mouse can restore the area the - // mouse currently covers to its original content. - _mouseOldState.x = x; - _mouseOldState.y = y; - _mouseOldState.w = w; - _mouseOldState.h = h; - - // Backup the covered area draw the mouse cursor - if (_overlayVisible) { - uint16 *bak = (uint16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse - uint16 *dst; - - TwGfxLockSurface(_overlayP, (void **)&dst); - dst += y * _screenWidth + x; - - do { - width = w; - do { - *bak++ = *dst; - color = *src++; - if (color != _mouseKeyColor) // transparent, don't draw - *dst = _nativePal[color]; - dst++; - } while (--width); - - src += MAX_MOUSE_W - w; - bak += MAX_MOUSE_W - w; - dst += _screenWidth - w; - } while (--h); - - TwGfxUnlockSurface(_overlayP, true); - - } else { - byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse - byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into - - do { - width = w; - do { - *bak++ = *dst; - color = *src++; - if (color != _mouseKeyColor) // transparent, don't draw - *dst = color; - dst++; - } while (--width); - - src += MAX_MOUSE_W - w; - bak += MAX_MOUSE_W - w; - dst += _screenWidth - w; - } while (--h); - } - - _mouseDrawn = true; -} - -void OSystem_PalmZodiac::undraw_mouse() { - if (!_mouseDrawn) - return; - - int h = _mouseOldState.h; - // No need to do clipping here, since draw_mouse() did that already - if (_overlayVisible) { - uint16 *bak = (uint16 *)_mouseBackupP; - uint16 *dst; - - TwGfxLockSurface(_overlayP, (void **)&dst); - dst += _mouseOldState.y * _screenWidth + _mouseOldState.x; - - do { - memcpy(dst, bak, _mouseOldState.w * 2); - bak += MAX_MOUSE_W; - dst += _screenWidth; - } while (--h); - - TwGfxUnlockSurface(_overlayP, true); - - } else { - byte *dst, *bak = _mouseBackupP; - dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x; - - do { - memcpy(dst, bak, _mouseOldState.w); - bak += MAX_MOUSE_W; - dst += _screenWidth; - } while (--h); - } - - _mouseDrawn = false; -} diff --git a/backends/PalmOS/Src/zodiac_overlay.cpp b/backends/PalmOS/Src/zodiac_overlay.cpp deleted file mode 100644 index d1b2f7a558..0000000000 --- a/backends/PalmOS/Src/zodiac_overlay.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "be_zodiac.h" -#include "common/endian.h" - -void OSystem_PalmZodiac::clearOverlay() { - if (!_overlayVisible) - return; - - Err e; - TwGfxPointType pos = {0, 0}; - TwGfxBitmapType bmp = { - sizeof(TwGfxBitmapType), - _screenWidth, _screenHeight, _screenWidth, twGfxPixelFormat8bpp, - (void *)_offScreenP, _nativePal - }; - e = TwGfxDrawBitmap(_overlayP, &pos, &bmp); -} - -void OSystem_PalmZodiac::grabOverlay(OverlayColor *buf, int pitch) { - Err e; - OverlayColor *src; - - e = TwGfxLockSurface(_overlayP, (void **)&src); - int h = _screenHeight; - do { - memcpy(buf, src, _screenWidth * 2); - src += _screenWidth; - buf += pitch; - } while (--h); - - e = TwGfxUnlockSurface(_overlayP, 0); -} - -void OSystem_PalmZodiac::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { - Err e; - TwGfxPointType pos = {x, y}; - TwGfxBitmapType bmp = { - sizeof(TwGfxBitmapType), - w, h, pitch * 2 , twGfxPixelFormatRGB565_LE, - (void *)buf, 0 - }; - e = TwGfxDrawBitmap(_overlayP, &pos, &bmp); -} - -OverlayColor OSystem_PalmZodiac::RGBToColor(uint8 r, uint8 g, uint8 b) { - return TwGfxMakeDisplayRGB(r, g, b); -} - -void OSystem_PalmZodiac::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { -#ifdef PALMOS_68K - color = SWAP_BYTES_16(color); -#endif - r = ((color >> 8) & 0xF8); - g = ((color >> 3) & 0xFC); - b = ((color << 3) & 0xF8); -} diff --git a/backends/PalmOS/scummvm.mcp b/backends/PalmOS/scummvm.mcp deleted file mode 100644 index f63966f9eb..0000000000 Binary files a/backends/PalmOS/scummvm.mcp and /dev/null differ diff --git a/backends/gp32/Makefile b/backends/gp32/Makefile deleted file mode 100644 index d61e8cb295..0000000000 --- a/backends/gp32/Makefile +++ /dev/null @@ -1,192 +0,0 @@ -CC := arm-elf-gcc -CXX := arm-elf-g++ -LD := arm-elf-g++ -AS := arm-elf-as -AR := arm-elf-ar cru -RANLIB := arm-elf-ranlib -RM := rm -f -MKDIR := mkdir -p -ECHO := echo -n -CAT := cat -RM := rm -f -# recursive version of RM -RM_REC := $(RM) -r -ZIP := zip -q -CP := cp -OBJCOPY := arm-elf-objcopy -FXETOOL := b2fxec - - -####################################################################### -# Default compilation parameters. Normally don't edit these # -####################################################################### - -CFLAGS = -marm -march=armv4t -mtune=arm920 -mapcs \ - -finline-functions \ - -fshort-enums \ - -mstructure-size-boundary=32 \ - -mno-thumb-interwork \ - -I$(GPSDK)/include \ - -g \ - -O \ - -fomit-frame-pointer -# -ffast-math \ -# -fshort-double - -CPPFLAGS:= $(CFLAGS) -CXXFLAGS:= $(CFLAGS) -DEFINES := -LDFLAGS := -INCLUDES:= -I. -Icommon -LIBS := -OBJS := - -# Turn on useful warnings -CXXFLAGS+= -Wall -pedantic -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -CXXFLAGS+= -Wshadow -Wuninitialized -Wimplicit -Wundef -CXXFLAGS+= -Wno-long-long -Wno-multichar -Wno-unknown-pragmas -Wno-reorder -CXXFLAGS+= -Wwrite-strings -fcheck-new -Wctor-dtor-privacy -Wnon-virtual-dtor - -# Stripped Build? (Smaller ELF, Minimal debug symbol information). -# You MUST comment this out with a # if you wish to debug your code. -STRIP_DEBUG = -Wl,--strip-debug - -# GPSDK (SDK, Includes and Startup Files) base dir -GPSDK = /usr/compat/gp32/share/sdk - -LDSPECS = -specs=gp32_gpsdk.specs - -LDFLAGS = $(STRIP_DEBUG) -Wl,-Map,$(MAPFILE) $(LDSPECS) -Wl,--no-warn-mismatch - -LIBS += -L$(GPSDK)/lib \ - -lgpmem -lgpos -lgpstdio -lgpstdlib -lgpsound -lgpgraphic -lgpfont \ - -lm -lc -lgcc - -INCLUDES += -Ibackends/gp32 -Iengines -I$(GPSDK)/include - -MODULES += backends/gp32 - -# Outputs -EXEEXT = .elf -MAPFILE = scummvm.map -BIN = scummvm.gxb -FXE = scummvm.fxe - -# Plugins hack -srcdir = ./ - -DEFINES = -D__GP32__ -DEFINES += -DNONSTANDARD_PORT - -# Disable new themes. GP32 has LOW memory! -DEFINES += -DDISABLE_FANCY_THEMES - -# Support libtremor. -#DEFINES += -DUSE_VORBIS -DUSE_TREMOR -DGP32_SDK -#INCLUDES += -Ibackends/gp32/gptremor -#LIBS += -Lbackends/gp32/gptremor -lgptremor - -# Support libmad. -#DEFINES += -DUSE_MAD -#INCLUDES += -Ibackends/gp32/gpmad -#LIBS += -Lbackends/gp32/gpmad -lgpmad - -# Support libminilzo. -#DEFINES += -DUSE_MINILZO -#INCLUDES += -Ibackends/gp32/minilzo -#LIBS += -Lbackends/gp32/minilzo -lminilzo - -# Support for 8:3 save files names (The GP32 uses FAT12/16 (no vFAT) for the file system). -DEFINES += -DSHORT_SAVENAMES - -# Support for the unsigned sound mixer. -DEFINES += -DOUTPUT_UNSIGNED_AUDIO - -# Support for the GP32 (fmOPL derived) MIDI engine. -# - NOT fully implemented yet. -#DEFINES += -DUSE_GP32_FMOPL - - - -#GP32 Debug - Remove from Release builds -# This builds in the GP32 GDB USB Stub. Don't use it unless you know what your doing. -# You also need to remove ANY optemisation from the compiler flags. -#DEFINES += -DGP32_GDB -#OBJS += backends/gp32/debug-gdbstub-usb.o - -# Standard librarys and optimization modules -OBJS += backends/gp32/startup.o \ - backends/gp32/memcpy.o \ - backends/gp32/gp_asmlib.o \ - backends/gp32/gp_clipped.o \ - backends/gp32/fontdata.o - -# Custom GP32 std library -OBJS += backends/gp32/gp32std.o \ - backends/gp32/gp32std_file.o \ - backends/gp32/gp32std_grap.o \ - backends/gp32/gp32std_input.o \ - backends/gp32/gp32std_memory.o \ - backends/gp32/gp32std_sound.o \ - #backends/gp32/dmaaudio_asm.o \ - #backends/gp32/dmaaudio.o \ - -#Main ScummVM for the GP32 Backend -OBJS += backends/gp32/gp32_main.o \ - backends/gp32/gp32_launcher.o \ - backends/gp32/gp32_osys.o \ - backends/fs/gp32/gp32-fs.o - -$(FXE): $(BIN) - $(FXETOOL) -f -a "The ScummVM Team" -t "ScummVM for the GP32" $< $@ -# $(FXETOOL) -f -a "The ScummVM Team" -t "ScummVM for the GP32" -b scummvm.bmp $< $@ - -$(BIN): scummvm$(EXEEXT) - $(OBJCOPY) -O binary $< $@ - -# Uncomment this to use GCC 3.x specific dependency tracking (recommended) -HAVE_GCC3 = 1 - -####################################################################### -# Control which modules are built - uncomment any to disable module # -####################################################################### - -DISABLE_SCALERS = 1 -DISABLE_HQ_SCALERS = 1 - -#DISABLE_SCUMM = 1 - -# We can play The Dig with GP32 -- without any movies/musics/voices. But who would do that? -DISABLE_SCUMM_7_8 = 1 -DISABLE_HE = 1 - -# ??? -DISABLE_SIMON = 1 -DISABLE_SKY = 1 -DISABLE_QUEEN = 1 -DISABLE_GOB = 1 -DISABLE_LURE = 1 -DISABLE_CINE = 1 - -# In-development engines below. -# Disable for ALL release builds. -DISABLE_SAGA = 1 -DISABLE_KYRA = 1 -DISABLE_AGI = 1 - -# The engines below are not supported on the GP32 port so there is -# no point compiling support into the binary. -DISABLE_SWORD1 = 1 -DISABLE_SWORD2 = 1 - -####################################################################### -# Misc stuff - you should normally never have to edit this # -####################################################################### - -EXECUTABLE := scummvm$(EXEEXT) - -include Makefile.common - -dist: - $(RM) $(ZIPFILE) - $(ZIP) $(ZIPFILE) $(DISTFILES) diff --git a/backends/gp32/README.GP32 b/backends/gp32/README.GP32 deleted file mode 100644 index 15120c7303..0000000000 --- a/backends/gp32/README.GP32 +++ /dev/null @@ -1 +0,0 @@ -TODO. :) diff --git a/backends/gp32/debug-gdbstub-usb.cpp b/backends/gp32/debug-gdbstub-usb.cpp deleted file mode 100644 index 9329c5c601..0000000000 --- a/backends/gp32/debug-gdbstub-usb.cpp +++ /dev/null @@ -1,1927 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001/2004 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -/* - * - * Basic GP32 USB GDB Debug Stub - Use with Multi-firmware that supports GDB - * Mithris kindly gave me the basic stub code. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -//#define USE_PRINTF // If there is a Printf(const char *pFormat,...) implemented - -/////////////////////////////////////////////////////////////// -// Externs -extern int __text_start; -extern int __data_start; -extern int __bss_start; -#ifdef USE_PRINTF -extern void Printf(char *pFormat, ...); -#endif -/////////////////////////////////////////////////////////////// - -extern "C" { - int OpenUSB(); - void InstallISR(); -} - -struct g_Namedregisters { - unsigned int r0; - unsigned int r1; - unsigned int r2; - unsigned int r3; - unsigned int r4; - unsigned int r5; - unsigned int r6; - unsigned int r7; - unsigned int r8; - unsigned int r9; - unsigned int r10; - unsigned int r11; - unsigned int r12; - unsigned int sp; - unsigned int lr; - unsigned int pc; - unsigned int fps; - unsigned int fcpsr; -}; - -/////////////////////////////////////////////////////////////// -// Defines - - -#define _REG_R1 0 -#define _REG_R2 2 -#define _REG_R3 3 -#define _REG_R4 4 -#define _REG_R5 5 -#define _REG_R6 6 -#define _REG_R7 7 -#define _REG_R8 8 -#define _REG_R9 9 -#define _REG_R10 10 -#define _REG_R11 11 -#define _REG_R12 12 -#define _REG_FP 11 -#define _REG_IP 12 -#define _REG_SL 10 -#define _REG_SP 13 -#define _REG_LR 14 -#define _REG_PC 15 - -#define PACKET_SIZE 0x100 - -#define MODE_USER 0 -#define MODE_FIQ 1 -#define MODE_IRQ 2 -#define MODE_SUPERVISOR 3 -#define MODE_ABORT 4 -#define MODE_UNDEF 5 -#define MODE_SYSTEM 6 -#define MODE_DUNNO -1 - -/////////////////////////////////////////////////////////////// -// Global stuff - -// Register array. -int g_Registers[50] = {1, 2, 3, 4 ,5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, - 21, 22, 23, 24, 25, 26, 27, 28, 29, - 31, 32, 33, 34, 35, 36, 37, 38, 39, - 41, 42, 43, 44, 45, 46, 47, 48, 49}; - -// Register name strings, not used right now. -static char * arm_register_name_strings[] = -{"r0", "r1", "r2", "r3", /* 0 1 2 3 */ - "r4", "r5", "r6", "r7", /* 4 5 6 7 */ - "r8", "r9", "r10", "r11", /* 8 9 10 11 */ - "r12", "sp", "lr", "pc", /* 12 13 14 15 */ - "f0", "f1", "f2", "f3", /* 16 17 18 19 */ - "f4", "f5", "f6", "f7", /* 20 21 22 23 */ - "fps", "cpsr" }; /* 24 25 */ - - -// Some USB stuff -GPN_DESC g_CommDesc; -GPN_COMM g_Comm; -const char HexDigits[17] = "0123456789abcdef"; -char g_SendBuffer[256]; -char g_TempBuffer[256]; -char g_ReadBuffer[0x100]; -unsigned int g_CurrentCSPR = 0; -unsigned int g_SavedStepInstruction = 0; -unsigned int g_StepAddress = 0; -bool g_LastWasStep = false; -int g_iTrap = 0; -bool g_GDBConnected = false; -/////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////// -// Prototypes -void BreakPoint(); -int GetException(unsigned int CSPR); -unsigned int *GetNextInstruction(unsigned int *pAddr); -bool CondWillExecute(unsigned int uiCond, unsigned int CSPR); -unsigned int DecodeInstruction(unsigned int uiInstruction, unsigned int PC); - -/////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////// -// Code Begins here -/////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////// -// Open usb comms stuff -int OpenUSB() -{ - int iResult; - - g_CommDesc.port_kind = COMM_USB_D; - g_CommDesc.tr_mode = 1; - g_CommDesc.tr_buf_size = PACKET_SIZE; - g_CommDesc.sz_pkt = PACKET_SIZE; - g_CommDesc.isr_comm_ram = 0; - - - iResult = GpCommCreate(&g_CommDesc, &g_Comm); - return iResult; -} - -/////////////////////////////////////////////////////////////// -// No need for explanation -void CloseUSB() -{ - GpCommDelete(&g_CommDesc); -} - -/////////////////////////////////////////////////////////////// -// No need for explanation -int SendUSB(const void *pData, unsigned int uiSize) -{ - return g_Comm.comm_send((unsigned char *)pData, uiSize); -} - - -/////////////////////////////////////////////////////////////// -// No need for explanation -int RecvUSB(char *pBuffer, unsigned int uiSize) -{ - return g_Comm.comm_recv((unsigned char *)pBuffer, uiSize); -} - -/////////////////////////////////////////////////////////////// -// Waits for an acknowledge from the server -void WaitACK() -{ - bool bBreak = false; - int iResult; - - while(!bBreak) { - iResult = g_Comm.comm_recv((unsigned char *)g_SendBuffer, 0x100); - if (iResult > 0) { - bBreak = true; - } - } -} -/////////////////////////////////////////////////////////////// -// Formats and sends a command to the server, -// it also calculates checksum -void SendCommand(unsigned char *pCommand) -{ - int iOffset; - unsigned int iCheckSum; - - iOffset = 4; - g_SendBuffer[iOffset++] = '$'; - - iCheckSum = 0; - while(*pCommand != 0) { - g_SendBuffer[iOffset++] = *pCommand; - iCheckSum += *pCommand++; - } - - g_SendBuffer[iOffset++] = '#'; - iCheckSum = iCheckSum & 0xff; - g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0xf0) >> 4]; - g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0x0f)]; - g_SendBuffer[iOffset] = 0; - - (*(int *)&g_SendBuffer[0]) = (iOffset - 4); - SendUSB(g_SendBuffer, 0x100); - WaitACK(); -} - -/////////////////////////////////////////////////////////////// -// This function creates and sends a package which tells gdb that -// the last command was unsupported -void UnSupportedCommand() -{ - (*(int *)&g_SendBuffer[0]) = 4; - g_SendBuffer[4] = '$'; - g_SendBuffer[5] = '#'; - g_SendBuffer[6] = '0'; - g_SendBuffer[7] = '0'; - g_SendBuffer[8] = '0'; - SendUSB(g_SendBuffer, 0x100); - - WaitACK(); - -} - - -/////////////////////////////////////////////////////////////// -// This function is quite similar to the SendCommand above -// But it allows the user to set the package length. -// If the length of a package exceeds 256bytes including -// the protocol stuff and the package length you can split -// the packages by sending the package size * -1. -// The server will then merge all packages until a package -// with a length >0 is recieved. -void SendCommandSize(unsigned char *pCommand, int iSize) -{ - int iOffset; - unsigned int iCheckSum; - - iOffset = 4; - g_SendBuffer[iOffset++] = '$'; - - iCheckSum = 0; - while(*pCommand != 0) { - g_SendBuffer[iOffset++] = *pCommand; - iCheckSum += *pCommand++; - } - - g_SendBuffer[iOffset++] = '#'; - iCheckSum = iCheckSum & 0xff; - g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0xf0) >> 4]; - g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0x0f)]; - g_SendBuffer[iOffset] = 0; - - (*(int *)&g_SendBuffer[0]) = iSize; - SendUSB(g_SendBuffer, 0x100); - - WaitACK(); -} - - -/////////////////////////////////////////////////////////////// -// Writes a 32bit hexadeciman number in ascii to the string. -void HexToString(char *pString, int iNumber) -{ - pString[0] = HexDigits[(iNumber >> 28) & 0x0f]; - pString[1] = HexDigits[(iNumber >> 24) & 0x0f]; - pString[2] = HexDigits[(iNumber >> 20) & 0x0f]; - pString[3] = HexDigits[(iNumber >> 16) & 0x0f]; - pString[4] = HexDigits[(iNumber >> 12) & 0x0f]; - pString[5] = HexDigits[(iNumber >> 8) & 0x0f]; - pString[6] = HexDigits[(iNumber >> 4) & 0x0f]; - pString[7] = HexDigits[(iNumber) & 0x0f]; - -} - -/////////////////////////////////////////////////////////////// -// This does the same, but in a differend endian. -void HexToStringBW(char *pString, int iNumber) -{ - pString[6] = HexDigits[(iNumber >> 28) & 0x0f]; - pString[7] = HexDigits[(iNumber >> 24) & 0x0f]; - pString[4] = HexDigits[(iNumber >> 20) & 0x0f]; - pString[5] = HexDigits[(iNumber >> 16) & 0x0f]; - pString[2] = HexDigits[(iNumber >> 12) & 0x0f]; - pString[3] = HexDigits[(iNumber >> 8) & 0x0f]; - pString[0] = HexDigits[(iNumber >> 4) & 0x0f]; - pString[1] = HexDigits[(iNumber) & 0x0f]; - - pString[8] = 0; - -} - - -/////////////////////////////////////////////////////////////// -// equiv to strcat i imagine -void PrintToString(char *pString, char *pOtherString) -{ - while(*pOtherString != 0) { - *pString = *pOtherString; - *pString++; - *pOtherString++; - } -} - -/////////////////////////////////////////////////////////////// -// converts "ff" -> 0xff -unsigned char StringToByte(char *pString) -{ - unsigned char ucValue = 0; - - for (int i = 0; i < 2; i++) { - ucValue = ucValue << 4; - switch(pString[i]) { - case '0': - break; - case '1': - ucValue |= (0x01); - break; - case '2': - ucValue |= (0x02); - break; - case '3': - ucValue |= (0x03); - break; - case '4': - ucValue |= (0x04); - break; - case '5': - ucValue |= (0x05); - break; - case '6': - ucValue |= (0x06); - break; - case '7': - ucValue |= (0x07); - break; - case '8': - ucValue |= (0x08); - break; - case '9': - ucValue |= (0x09); - break; - case 'a': - ucValue |= (0x0a); - break; - case 'b': - ucValue |= (0x0b); - break; - case 'c': - ucValue |= (0x0c); - break; - case 'd': - ucValue |= (0x0d); - break; - case 'e': - ucValue |= (0x0e); - break; - case 'f': - ucValue |= (0x0f); - break; - - } - } - - return ucValue; -} - -/////////////////////////////////////////////////////////////// -// Sends a package with the program offsets to GDB -// Of some reason all offsets should be NULL. -void SendOffsets() -{ - char String[255]; - int a = 0;//(int)&__text_start; - int b = 0;//(int)&__data_start; - int c = 0;//(int)&__bss_start; - - PrintToString(String, "Text="); - HexToString(&String[5], a); - PrintToString(&String[5+8], ";Data="); - HexToString(&String[5+8+6], b); - PrintToString(&String[5+8+6+8], ";Bss="); - HexToString(&String[5+8+6+8+5], c); - String[5+8+6+8+5+8] = 0; - - SendCommand((unsigned char *)String); -} - -/////////////////////////////////////////////////////////////// -// This function dumps all registers to GDB -// It utilizes the SendCommandSize function to split the package. -void DumpRegisters() -{ - char Buffer[0x100]; - // Ugly hack so far. - - for (int i = 0; i < 21; i++) { - //g_Registers[i] = i; - HexToStringBW(&Buffer[i * 8], g_Registers[i]); - } - Buffer[21*8] = 0; - SendCommandSize((unsigned char *)Buffer, -1 * (21 * 8 + 4)); - for (int i = 0; i < 21; i++) { - //g_Registers[20 + i] = i; - HexToStringBW(&Buffer[i * 8], g_Registers[21 + i]); - } - Buffer[21*8] = 0; - - SendCommandSize((unsigned char *)Buffer, (21 * 8) + 4); -} - -/////////////////////////////////////////////////////////////// -// This function extracts an address from a string. -void *GetAddr(char *pBuffer) -{ - int iAddr; - int i = 0; - iAddr = 0; - - while (pBuffer[i] != ',') { - iAddr = iAddr << 4; - switch(pBuffer[i]) { - case '0': - //iAddr |= - break; - case '1': - iAddr |= (0x01); - break; - case '2': - iAddr |= (0x02); - break; - case '3': - iAddr |= (0x03); - break; - case '4': - iAddr |= (0x04); - break; - case '5': - iAddr |= (0x05); - break; - case '6': - iAddr |= (0x06); - break; - case '7': - iAddr |= (0x07); - break; - case '8': - iAddr |= (0x08); - break; - case '9': - iAddr |= (0x09); - break; - case 'a': - iAddr |= (0x0a); - break; - case 'b': - iAddr |= (0x0b); - break; - case 'c': - iAddr |= (0x0c); - break; - case 'd': - iAddr |= (0x0d); - break; - case 'e': - iAddr |= (0x0e); - break; - case 'f': - iAddr |= (0x0f); - break; - - } - i++; - } - return (void *)iAddr; -} -/////////////////////////////////////////////////////////////// -// This function does pretty much the same, but returns an int -// I know, some redundant code. -int GetBytes(char *pBuffer) -{ - int iBytes = 0; - int i = 0; - - - while ((pBuffer[i] != '#') && (pBuffer[i] != ':')) { - iBytes = iBytes << 4; - switch(pBuffer[i]) { - case '0': - //iAddr |= - break; - case '1': - iBytes |= 0x01; - break; - case '2': - iBytes |= 0x02; - break; - case '3': - iBytes |= 0x03; - break; - case '4': - iBytes |= 0x04; - break; - case '5': - iBytes |= 0x05; - break; - case '6': - iBytes |= 0x06; - break; - case '7': - iBytes |= 0x07; - break; - case '8': - iBytes |= 0x08; - break; - case '9': - iBytes |= 0x09; - break; - case 'a': - iBytes |= 0x0a; - break; - case 'b': - iBytes |= 0x0b; - break; - case 'c': - iBytes |= 0x0c; - break; - case 'd': - iBytes |= 0x0d; - break; - case 'e': - iBytes |= 0x0e; - break; - case 'f': - iBytes |= 0x0f; - break; - - } - - i++; - } - return iBytes; -} - -/////////////////////////////////////////////////////////////// -// This function reads memory and sends it back to GDB. -void SendMemory(void *pAddr, int iBytes) -{ - unsigned char *pData; - unsigned char iData; - int iBufferPos = 0; - int iBytesToSend; - char Byte; - int i; - - pData = (unsigned char *)pAddr; - - - do { - if (iBytes > 100) { - iBytesToSend = 100; - iBytes -= 100; - } else { - iBytesToSend = iBytes; - iBytes = 0; - } - iBufferPos = 0; - for (i = 0; i < iBytesToSend; i+=1) { - iData = *pData++; - g_TempBuffer[iBufferPos++] = HexDigits[(iData & 0xf0) >> 4]; - g_TempBuffer[iBufferPos++] = HexDigits[(iData & 0x0f)]; - - } - if (iBytes > 0) { - // This mean that we have not yet sent our last command. - g_TempBuffer[iBufferPos] = 0; - SendCommandSize((unsigned char *)g_TempBuffer, -1 * (i + 1 + 4)); - } - } while (iBytes > 0 ); - g_TempBuffer[iBufferPos] = 0; - SendCommand((unsigned char *)g_TempBuffer); -} - - - -/////////////////////////////////////////////////////////////// -// Does pretty much what it says. -void WriteMemory(void *pAddr, unsigned int uiBytes, char *pHexString) -{ - unsigned char *pData = ((unsigned char *)pAddr); - unsigned int uiOffset = 0; - unsigned char ucByte; - - //Printf("0x%x 0x%x", pAddr, uiBytes); - for (unsigned int i = 0; i < uiBytes ; i++) { - ucByte = StringToByte(&pHexString[uiOffset]); - //Printf("0x%x", ucByte); - *pData++ = ucByte; - uiOffset += 2; - } - /* - while(1); - unsigned int *piData = (unsigned int *)pAddr; - *piData = 0xe7ffdefe;//0xfedeffe7; - */ - -} - - -/////////////////////////////////////////////////////////////// -// Sends the required information about a trap -// TODO: correct numbers need to be placed there. -void SendBreakPoint() -{ - int iOffset = 0; - - g_TempBuffer[iOffset++] = 'T'; - g_TempBuffer[iOffset++] = '0'; - g_TempBuffer[iOffset++] = '5'; - g_TempBuffer[iOffset++] = '0'; - g_TempBuffer[iOffset++] = 'd'; - g_TempBuffer[iOffset++] = ':'; - HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_SP]); - iOffset += 8; - g_TempBuffer[iOffset++] = ';'; - g_TempBuffer[iOffset++] = '0'; - g_TempBuffer[iOffset++] = 'b'; - g_TempBuffer[iOffset++] = ':'; - HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_FP]); - iOffset += 8; - g_TempBuffer[iOffset++] = ';'; - g_TempBuffer[iOffset++] = '0'; - g_TempBuffer[iOffset++] = 'f'; - g_TempBuffer[iOffset++] = ':'; - HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_PC]); - iOffset += 8; - g_TempBuffer[iOffset++] = ';'; - g_TempBuffer[iOffset] = 0; - - SendCommand((unsigned char *)g_TempBuffer); - - - - -} - - -/////////////////////////////////////////////////////////////// -// Finds a character in a string and returns the offset. -int FindChar(char *pBuffer, char sign) -{ - int iRetVal = 0; - - while(*pBuffer != sign) { - iRetVal++; - *pBuffer++; - } - return iRetVal; -} - - -// Attibute naked. -/////////////////////////////////////////////////////////////// -// This is the ISR(Interrupt Service Routine) which handles -// All traps, it's basically a context switcher. -void ISR() __attribute__ ((naked)); -void ISR() -{ - // Lets snatch the registers! - - asm volatile(" \n" - " str r4, [%0, #0x10] \n" - " str r5, [%0, #0x14] \n" - " str r6, [%0, #0x18] \n" - " str r7, [%0, #0x1C] \n" - " str r8, [%0, #0x20] \n" - " str r9, [%0, #0x24] \n" - " str r10, [%0, #0x28] \n" - " str r11, [%0, #0x2C] \n" - " str r12, [%0, #0x30] \n" - - " str r14, [%0, #0x3C] \n" - - " @// skip 8 * 12byte(96bit) = 0x60 \n" - - " mov r4, %0 \n" - " ldmia sp!, {r0, r1, r2, r3} \n" - " str r0, [r4, #0x00] \n" - " str r1, [r4, #0x04] \n" - " str r2, [r4, #0x08] \n" - " str r3, [r4,#0x0C] \n" - - " mrs r1, SPSR \n" - " str r1, [r4, #0x48] \n" - " str r1, [r4,#0xA0] \n" - " str r1, [r4,#0xA4] \n" - - " mrs r1, CPSR \n" - " mov r2, r1 \n" - - - " @// Let us set the mode to supervisor so we can get r13 and r14 \n" - " bic r1, r1, #0x1f \n" - " orr r1, r1, #0x13 \n" - " msr CPSR_c, r1 \n" - " @// Just remember that we're in the supervisor stack aswell now \n" - " str r13, [r4,#0x34] \n" - " str r14, [r4,#0x38] \n" - " @// Lets move back to whatever mode we was in. \n" - " @// Make sure that IRQ's are turned on \n" - " bic r2, r2, #0x80 \n" - " msr CPSR_fsxc, r2 \n" - - - - - " \n" - : - : "r" (g_Registers) - : "%0", "r1", "r2", "r4"); - - - // Get Current CSPR and save LR - asm volatile(" \n" - " mrs r0, CPSR \n" - " str r0, [%0] \n" - - " str r14, [%1, #0x40] \n" - " str r0, [%1, #0x44] \n" - " str r13, [%1, #0x4C] \n" - " \n" - : - : "r" (&g_CurrentCSPR), "r" (g_Registers) - : "r0"); - - - switch(g_CurrentCSPR & 0x1f) { - case 0x10: // USER - g_iTrap = 0; - break; - case 0x11: // FIQ - g_iTrap = 1; - break; - case 0x12: // IRQ - g_iTrap = 2; - break; - case 0x13: // Supervisor - g_iTrap = 3; - break; - case 0x17: // Abort - g_iTrap = 4; - break; - case 0x1B: // Undefined/Breakpoint - // We cannot continue like this! - g_Registers[15] -= 4; - g_Registers[16] -= 4; - g_iTrap = 5; - break; - case 0x1F: // System - g_iTrap = 6; - break; - default: - g_iTrap = -1; - } - - - #ifdef USE_PRINTF - Printf("Trap@0x%x:%d", g_Registers[15], g_iTrap); - #endif - /* - switch (g_iTrap) { - case MODE_USER: - break; - case MODE_FIQ: - break; - case MODE_IRQ: - break; - case MODE_SUPERVISOR: - break; - case MODE_ABORT: - break; - case MODE_UNDEF: - break; - case MODE_SYSTEM: - break; - case MODE_DUNNO: - default: - while(1); - } - */ - SendBreakPoint(); - BreakPoint(); - - //Printf("0x%x 0x%x", g_Registers[15], g_Registers[16]); - // Okay, it's time to continue. - - - switch (g_iTrap) { - case MODE_USER: - //Printf("Dunno!!\n"); - break; - case MODE_FIQ: - //Printf("Dunno!!\n"); - break; - case MODE_IRQ: - //Printf("Dunno!!\n"); - break; - case MODE_SUPERVISOR: - //Printf("Dunno!!\n"); - break; - case MODE_ABORT: - asm volatile(" \n" - " mov r10, #0 \n" - " @Invalidate I&D cache \n" - " mcr p15, 0, r10, c7, c7 \n" - " @ restore the registers \n" - " ldr r1,[%0, #0x04] \n" - " ldr r2,[%0, #0x08] \n" - " ldr r4,[%0, #0x10] \n" - " ldr r5,[%0, #0x14] \n" - " ldr r6,[%0, #0x18] \n" - " ldr r7,[%0, #0x1C] \n" - " ldr r8,[%0, #0x20] \n" - " ldr r9,[%0, #0x24] \n" - " ldr r10,[%0, #0x28] \n" - " ldr r11,[%0, #0x2C] \n" - " ldr r12,[%0, #0x30] \n" - " ldr r14,[%0, #0x40] \n" - " ldr r0, [%0, #0x44] \n" - " msr CPSR_fsxc, r0 \n" - " ldr r0, [%0, #0x48] \n" - " msr SPSR_fsxc, r0 \n" - - " ldr r0,[%0, #0x00] \n" - " ldr r3,[%0, #0x0C] \n" - - " subs pc, lr, #0x04 \n" - - " \n" - : - :"r" (g_Registers) - :"r0"); - break; - case MODE_UNDEF: - // This will be the breakpoint i'm gonna test with. - asm volatile(" \n" - " mov r10, #0 \n" - " @Invalidate I&D cache \n" - " mcr p15, 0, r10, c7, c7 \n" - " @ restore the registers \n" - " ldr r1,[%0, #0x04] \n" - " ldr r2,[%0, #0x08] \n" - " ldr r4,[%0, #0x10] \n" - " ldr r5,[%0, #0x14] \n" - " ldr r6,[%0, #0x18] \n" - " ldr r7,[%0, #0x1C] \n" - " ldr r8,[%0, #0x20] \n" - " ldr r9,[%0, #0x24] \n" - " ldr r10,[%0, #0x28] \n" - " ldr r11,[%0, #0x2C] \n" - " ldr r12,[%0, #0x30] \n" - " ldr r14,[%0, #0x40] \n" - " ldr r0, [%0, #0x44] \n" - " msr CPSR_fsxc, r0 \n" - " ldr r0, [%0, #0x48] \n" - " msr SPSR_fsxc, r0 \n" - - " ldr r0,[%0, #0x00] \n" - " ldr r3,[%0, #0x0C] \n" - " @ The subbing has already been done! \n" - " @subs pc, lr, #0x04 \n" - " movs pc, lr \n" - " \n" - : - :"r" (g_Registers) - :"r0"); - - - break; - case MODE_SYSTEM: - //Printf("Dunno!!\n"); - break; - case MODE_DUNNO: - default: - //Printf("Dunno!!\n"); - while(1); - } - - - - -} - -/////////////////////////////////////////////////////////////// -// Returns which exception occured based on CSPR -int GetException(unsigned int CSPR) -{ - switch(CSPR & 0x1f) { - case 0x10: // USER - return 0; - case 0x11: // FIQ - return 1; - case 0x12: // IRQ - return 2; - case 0x13: // Supervisor - return 3; - case 0x17: // Abort - return 4; - case 0x1B: // Undefined/Breakpoint - return 5; - case 0x1F: // System - return 6; - default: - return -1; - } -} - - -/////////////////////////////////////////////////////////////// -// Installs the ISR address into the system RAM -void InstallISR() -{ - int *pPointer = (int *)(0x0c7ac040); - int *pPointer2 = (int *)(0x0c7ac018); - - void (*pISR)(); - - pISR = ISR; - - *pPointer = (int)pISR; - *pPointer2 = (int)pISR; - -} - -void DEBUG_Print(char *pFormat, ...) -{ - char Temp[0x100]; - va_list VaList; - int iLength; - int iOffset; - unsigned char MyChar; - - if (!g_GDBConnected) return; - - va_start(VaList , pFormat); - vsnprintf(Temp, 0x100, pFormat , VaList); - va_end(VaList); - - iLength = strlen(Temp); - if (iLength > 100) iLength = 100; - - g_TempBuffer[0] = 'O'; - iOffset = 1; - for (int i = 0; i < iLength; i++) { - MyChar = (unsigned char)Temp[i]; - g_TempBuffer[iOffset++] = HexDigits[(MyChar & 0xf0) >> 4]; - g_TempBuffer[iOffset++] = HexDigits[(MyChar & 0x0f)]; - } - g_TempBuffer[iOffset] = 0; - SendCommand((unsigned char *)g_TempBuffer); - -} - - -/////////////////////////////////////////////////////////////// -// The main thread when the GDB thread has control -void BreakPoint() -{ - unsigned int *pNextInstruction; - bool bBreakLoop = false; - int iResult; - int iMessageLength; - int iOffsetAdd; - int iNullVal = 0; - void *pAddr; - int iOffset; - int iBytes; - - - // Find out if we got here through a STEP command - if (g_LastWasStep) { - #ifdef USE_PRINTF - Printf("I:0x%x 0x%x", *((unsigned int *)(g_Registers[15] + 4)), *((unsigned int *)(g_Registers[15]))); - Printf("S: 0x%x", g_StepAddress); - #endif - if ((unsigned int)g_Registers[15] == g_StepAddress) { - // Yes it was, Lets restore the instruction. - *((unsigned int *)g_StepAddress) = g_SavedStepInstruction; - #ifdef USE_PRINTF - Printf("Restore: 0x%x", g_SavedStepInstruction); - #endif - } else { - while(1); - } - g_LastWasStep = false; - } - - - while(!bBreakLoop) { - iResult = RecvUSB(g_ReadBuffer, 0x100); - //Printf("%d\n", iResult); - - if (iResult > 0) { - // If we recieve a package we can assume that GDB is connected.. or smth..:D - g_GDBConnected = true; - // Well, we have recieved a package, lets print the contents. - iMessageLength = *(int *)&g_ReadBuffer[0]; - g_ReadBuffer[4 + iMessageLength] = 0; - //Printf("%s\n %d", &g_ReadBuffer[4], iMessageLength); - - // Let us also send an ACK '+' - (*(int *)&g_SendBuffer[0]) = 1; - g_SendBuffer[4] = '+'; - SendUSB((const void *)g_SendBuffer, 0x100); - WaitACK(); - - // I can see that i get a bunch of '+' and '-' in the messages.. lets remove them. - iOffsetAdd = 4; - while((g_ReadBuffer[iOffsetAdd] == '+') || (g_ReadBuffer[iOffsetAdd] == '-')) iOffsetAdd++; - - // Check whether it's legimit command - if (g_ReadBuffer[iOffsetAdd] == '$') { - // Well it is! - switch(g_ReadBuffer[iOffsetAdd + 1]) { - case 'H': // Set thread, we're not having any threads.. so.. just return OK - SendCommand((unsigned char *)"OK"); - break; - case 'q': // Query, there are some queries, but GDB first asks for Offsets - switch(g_ReadBuffer[iOffsetAdd + 2]) { - case 'O': // Offsets - SendOffsets(); - break; - case 'C': - SendCommand((unsigned char *)"QC0000"); - //SendBreakPoint(); - break; - - } - break; - case '?': - // This will have to be modified later to send the correct signal. - SendBreakPoint(); - break; - case 'g': - DumpRegisters(); - break; - case 'm': - pAddr = GetAddr(&g_ReadBuffer[iOffsetAdd + 2]); - iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ','); - iBytes = GetBytes(&g_ReadBuffer[iOffsetAdd + 2 + iOffset]); - SendMemory(pAddr, iBytes); - break; - case 'X': //Write memory binary, which we DON't support.. ofcourse. - UnSupportedCommand(); - break; - case 'P': // Write register - { - SendCommand((unsigned char *)"OK"); - - } - break; - case 'M': // Write memory not binary - { - pAddr = GetAddr(&g_ReadBuffer[iOffsetAdd + 2]); - iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ','); - iBytes = GetBytes(&g_ReadBuffer[iOffsetAdd + 2 + iOffset]); - iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ':'); - WriteMemory(pAddr, iBytes, &g_ReadBuffer[iOffsetAdd + 2 + iOffset + 1]); - SendCommand((unsigned char *)"OK"); - - } - break; - case 'c': // continue - { - return; - - } - break; - - case 's': // Stepping. - { - // Get the address of the next instruction. - pNextInstruction = GetNextInstruction((unsigned int *)g_Registers[15]); - - // Read whatsever there. - g_SavedStepInstruction = *pNextInstruction; - g_StepAddress = (unsigned int)pNextInstruction; - g_LastWasStep = true; - - //Printf("Curr: 0x%x", g_Registers[15]); - #ifdef USE_PRINTF - Printf("Next: 0x%x->0x%x", g_Registers[15], pNextInstruction); - #endif - //Printf("Trap: 0x%x", GetException((unsigned int)g_Registers[40])); - // Write a breakpoint instruction to the address. - *pNextInstruction = 0xe7ffdefe; - return; - - } - break; - case 'Z': // BreakPoint. - { - switch(g_ReadBuffer[iOffsetAdd + 2]) { - case '0': - // Software breakpoint, i think it's up to me to add, it, lets send OK for now. - UnSupportedCommand(); - break; - default: - // We only support software breakpoints for now, lets return unsupported. - // Actually we don't even support SW breakpoints now - UnSupportedCommand(); - break; - } - } - break; - - default: - UnSupportedCommand(); - break; - - } - } - - } - - } - -} - -/////////////////////////////////////////////////////////////// -// Tries to find the next instruction to be executed after a break -unsigned int *GetNextInstruction(unsigned int *pAddr) -{ - unsigned int uiInstruction = *pAddr; - unsigned int uiAndVal = 0; - unsigned int iNewPC = 0; - int iNewAddr = 0; - int iRegsbeforePC = 0; - unsigned int uiBaseRegister = 0; - unsigned int uiRegVal = 0; - unsigned int uiData = 0; - unsigned int uiCondMask = 0; - int iPCOffset = 0; - - unsigned int uiNewPC = DecodeInstruction(uiInstruction, (unsigned int)pAddr); - return (unsigned int *)uiNewPC; - - - // Set new PC to pAddr + 4, because we really hope that is the case...:D - iNewPC = (unsigned int)pAddr; - iNewPC += 4; // Next instruction (atleast in ARM mode, we don't support thumb yet) - - // Now it's a good point to find out if the instruction would be executed anyway. - uiCondMask = (uiInstruction & 0xf0000000) >> 28; - - if (CondWillExecute(uiCondMask, (unsigned int)g_Registers[18])) { - //Printf("Condition will execute"); - // Find out if it's a B or BL instruction. (This is the easy one) - if ((uiInstruction & 0xE000000 ) == 0xA000000) { - #ifdef USE_PRINTF - Printf("0x%x", uiInstruction); - #endif - // Okay, it's a branch instruction, lets get the address it's for - iNewAddr = uiInstruction & 0xffffff; - // We might need to sign extend this instruction. - if ((iNewAddr & 0x00800000) != 0) { - #ifdef USE_PRINTF - printf("Sign extending"); - #endif - //iNewAddr *= -1; - iNewAddr |= 0xff000000; - } - #ifdef USE_PRINTF - Printf("0x%x", iNewAddr); - #endif - iNewAddr *= 4; // Instruction size. - iNewPC = ((int)pAddr + iNewAddr + 8); - } - - // Well, it might be a ldm(ea)? - - if ((uiInstruction & 0xE000000) == 0x8000000) { - #ifdef USE_PRINTF - Printf("LDM"); - #endif - // this is a LDM/STM alright. - if ((uiInstruction & 0x100000) != 0) { - // This is a LDM instruction - // Lets see if the PC is ever loaded. - #ifdef USE_PRINTF - Printf("includes PC"); - #endif - if ((uiInstruction & 0x8000) != 0) { - // Well (damn the PC is loaded) - for (int i = 0; i < 15; i++) { - uiAndVal = 1 << i; - if ((uiInstruction & uiAndVal) != 0) iRegsbeforePC++; - } - #ifdef USE_PRINTF - Printf("%d regs", iRegsbeforePC); - #endif - /* - da = fa - ia = fd - db = ea - ib = ed - */ - // Lets find out which register is used as base for this operation. - uiBaseRegister = (uiInstruction & 0xF0000) >> 16; - uiRegVal = ((unsigned int *)g_Registers)[uiBaseRegister]; - // First, have a look at the U bit. - if ((uiInstruction & (1 << 23)) != 0) { - - // Transfer is made descending - // Which also means that the PC is closest to the base register i just found out. - // Lets check the P bit (If i'm supposed to increment before or after. - - iPCOffset = iRegsbeforePC * 4; - if (((uiInstruction) & (1 << 24)) != 0) iPCOffset += 4; - - } else { - // Transfer is done ascending - // Lets check the P bit (If i'm supposed to decrement before or after. - if (((uiInstruction) & (1 << 24)) != 0) iPCOffset = -4; - } - - - iNewPC = *(unsigned int *)((((int)uiRegVal) + iPCOffset) & ~0x03); - } - } - } - - // Check if it's a mov pc, Rn - - } - - return (unsigned int *)iNewPC; -} - -/////////////////////////////////////////////////////////////// -// Determines if uiCond will be true with this CSPR -bool CondWillExecute(unsigned int uiCond, unsigned int CSPR) -{ - - switch(uiCond) { - case 0: // EQ - // This is true if Z is set in CSPR - if ((CSPR & (1 << 30)) != 0) return true; - else return false; - case 1: // NE - // This should be true if Z is not set. - if ((CSPR & (1 << 30)) == 0) return true; - else return false; - case 2: // CS/HS - // this one should be true if C is set. - if ((CSPR & (1 << 29)) != 0) return true; - else return false; - case 3: // CC/LO - // this one should be true if C is clear. - if ((CSPR & (1 << 29)) == 0) return true; - else return false; - case 4: // MI - // this one should be true if N is set - if ((CSPR & (1 << 31)) != 0) return true; - else return false; - case 5: // PL - // this one should be true if N is clear. - if ((CSPR & (1 << 31)) == 0) return true; - else return false; - case 6: // VS - // this one should be true if V is set - if ((CSPR & (1 << 28)) != 0) return true; - else return false; - case 7: // VC - // this one should be true if V is clear. - if ((CSPR & (1 << 28)) == 0) return true; - else return false; - case 8: // HI - // This is true if C and Z is clear - if (((CSPR & (1 << 30)) == 0) && ((CSPR & (1 << 29)) == 0)) return true; - else return false; - case 9: // LS - // C clear OR Z set - if (((CSPR & (1 << 29)) == 0) || ((CSPR & (1 << 30)) != 0)) return true; - else return false; - case 10: // GE - // N set AND V set || N clear and V clear - if ((CSPR & (1 << 31)) == (CSPR & (1 << 28))) return true; - else return false; - case 11: // LT - // N != V - if ((CSPR & (1 << 31)) != (CSPR & (1 << 28))) return true; - else return false; - case 12: // GT - // Z == 0, N == V - if (((CSPR & (1 << 30)) == 0) && ((CSPR & (1 << 31)) == (CSPR & (1 << 28)))) return true; - else return false; - case 13: // LE - if (((CSPR & (1 << 30)) == 1) && ((CSPR & (1 << 31)) != (CSPR & (1 << 28)))) return true; - else return false; - case 14: // AL - return true; - default: - break; - } - - -} -// I got the idea for this layout from the singlestep.c (found in eCos) -// But i thought the code was a bit tricky to port, and i wanna learn more about this anyway so, i'll just do smth similar to that - - - -typedef struct -{ - unsigned Rm : 4; // Rm - unsigned resv2 : 1; // Reserved 2 (0) - unsigned shift : 2; // hmm.. dunno actually but probably (LSL, LSR, ASR, ROR ) - unsigned amount : 5; // Shift amount 0-31 - unsigned Rd : 4; // Rd - unsigned Rn : 4; // Rn - unsigned s : 1; // S-flag - unsigned opcode : 4; // Opcode (Mov etc) - unsigned resv1 : 3; // Reserved 1 (000) - unsigned cond : 4; // Condition - -} dpisr; // Data Processing Immediate Register Shift -#define DPISR_R1 0 -#define DPISR_R2 0 -// Example Rd, Rm, amount -typedef struct -{ - unsigned Rm : 4; // Rm - unsigned resv3 : 1; // Reserved 3 (1) - unsigned shift : 2; // (LSL, LSR, ASR, ROR ) - unsigned resv2 : 1; // Reserved 2 (0) - unsigned Rs : 4; // Rs - unsigned Rd : 4; // Rd - unsigned Rn : 4; // Rn - unsigned s : 1; // S-flag - unsigned opcode : 4; // Opcode - unsigned resv1 : 3; // Reserved 1 (000) - unsigned cond : 4; // Condition -} dprrs; // Data Processing Register Register Shift -#define DPRRS_R1 0 -#define DPRRS_R2 0 -#define DPRRS_R3 1 -// Example Rd, Rn, Rm Rs -// This intruction is unpredictable if R15 is one of the used registers anyway. -typedef struct -{ - unsigned immed : 8; // Immediate value - unsigned rotate : 4; // rotate - unsigned Rd : 4; // Rd - unsigned Rn : 4; // Rn - unsigned s : 1; // S-flag - unsigned opcode : 4; // Opcode - unsigned resv1 : 3; // Reserved 1 (001) - unsigned cond : 4; // Condition -} dpi; // Data processing immediate -// example add r0, r1, (ror , ) -#define DPI_R1 1 - -typedef struct -{ - unsigned immed : 12; // Immediate - unsigned Rd : 4; // Rd - unsigned Rn : 4; // Rn - unsigned L : 1; // L-bit (Load/Store)? - unsigned W : 1; // W-bit - unsigned B : 1; // B-bit - unsigned U : 1; // U-bit - unsigned p : 1; // P-bit - unsigned resv1 : 3; // Reserved 1 (010) - unsigned cond : 4; // Condition -} lsio; // Load/store immediate offset -// Example ldr Rd, [Rn, #] -#define LSIO_R1 2 - - -typedef struct -{ - unsigned Rm : 4; // Rm - unsigned resv2 : 1; // Reserved 2 (0) - unsigned shift : 2; // Shit type (LSL, LSR, ASR, ROR ) - unsigned amount : 5; // Shift amount (0-31) - unsigned Rd : 4; // Rd - unsigned Rn : 4; // Rn - unsigned L : 1; // L-bit (Load/Store)? - unsigned W : 1; // W-bit - unsigned B : 1; // B-bit - unsigned U : 1; // U-bit - unsigned p : 1; // P-bit - unsigned resv1 : 3; // Reserved 1 (011) - unsigned cond : 4; // Condition -} lsro; // Load/Store register offset -// Example ldr Rd, [Rn + Rm lsl 5] -#define LSRO_R1 3 -#define LSRO_R2 0 - - -typedef struct -{ - unsigned regs : 16; // Register mask - unsigned Rn : 4; // Rn - unsigned L : 1; // L-bit (Load/Store)? - unsigned W : 1; // W-bit - unsigned S : 1; // B-bit - unsigned U : 1; // U-bit - unsigned p : 1; // P-bit - - unsigned resv1 : 3; // Reserved 1 (100) - unsigned cond : 4; // Condition -} lsm; // Load store multiple -// Example: ldm r0, {r1, r2, r3} -#define LSM_R1 4 - -typedef struct -{ - unsigned offset : 24; // Branch offset - unsigned link : 1; // Link flag - unsigned resv1 : 3; // Reserved 1 (101) - unsigned cond : 4; // Condition -} bl; // Branch with link(optional) -#define BL_R1 5 - -typedef union { - dpisr DPISR; - dprrs DPRRS; - dpi DPI; - lsio LSIO; - lsro LSRO; - lsm LSM; - bl BL; - unsigned int uiInstruction; -} Instruction; - -/* -#define DPISR_R1 0 -#define DPISR_R2 0 - - -#define DPRRS_R1 0 -#define DPRRS_R2 0 -#define DPRRS_R3 1 - -#define DPI_R1 1 - -#define LSIO_R1 2 - -#define LSRO_R1 3 -#define LSRO_R2 0 - -#define LSM_R1 4 - -#define BL_R1 5 -*/ - -/* - * Data Processiong Opcode field values - */ -#define OPCODE_MOV 0xD -#define OPCODE_MVN 0xF -#define OPCODE_ADD 0x4 -#define OPCODE_ADC 0x5 -#define OPCODE_SUB 0x2 -#define OPCODE_SBC 0x6 -#define OPCODE_RSB 0x3 -#define OPCODE_RSC 0x7 -#define OPCODE_AND 0x0 -#define OPCODE_EOR 0x1 -#define OPCODE_ORR 0xC -#define OPCODE_BIC 0xE -#define OPCODE_CMP 0xA -#define OPCODE_CMN 0xB -#define OPCODE_TST 0x8 -#define OPCODE_TEQ 0x9 - -/* - * Shift field values - */ -#define SHIFT_LSL 0x0 -#define SHIFT_LSR 0x1 -#define SHIFT_ASR 0x2 -#define SHIFT_ROR 0x3 -#define SHIFT_RRX 0x3 /* Special case: ROR(0) implies RRX */ - - -unsigned int DecodeDPISR(dpisr Instr, unsigned int PC); -unsigned int DecodeDPRRS(dprrs Instr, unsigned int PC); -unsigned int DecodeDPI(dpi Instr, unsigned int PC); -unsigned int DecodeLSIO(lsio Instr, unsigned int PC); -unsigned int DecodeLSRO(lsro Instr, unsigned int PC); -unsigned int DecodeLSM(lsm Instr, unsigned int PC); -unsigned int DecodeBL(bl Instr, unsigned int PC); - - -/////////////////////////////////////////////////////////////// -// -unsigned int DecodeInstruction(unsigned int uiInstruction, unsigned int PC) -{ - Instruction myInstruction; - unsigned int uiCondMask; - - uiCondMask = (uiInstruction & 0xf0000000) >> 28; - - // This instruction can do whatever it wants, but if it doesn't execute we don't give a shit. - if (!CondWillExecute(uiCondMask, (unsigned int)g_Registers[18])) return PC + 4; - //Printf("CondWillExec"); - - myInstruction.uiInstruction = uiInstruction; - - // Start decoding.. phuu - - if ((myInstruction.DPISR.resv1 == DPISR_R1) && (myInstruction.DPISR.resv2 == DPISR_R2)) return DecodeDPISR(myInstruction.DPISR, PC); - else if ((myInstruction.DPRRS.resv1 == DPRRS_R1) && - (myInstruction.DPRRS.resv2 == DPRRS_R2) && - (myInstruction.DPRRS.resv3 == DPRRS_R3)) return DecodeDPRRS(myInstruction.DPRRS, PC); - else if ((myInstruction.DPI.resv1 == DPI_R1)) return DecodeDPI(myInstruction.DPI, PC); - else if ((myInstruction.LSIO.resv1 == LSIO_R1)) return DecodeLSIO(myInstruction.LSIO, PC); - - else if ((myInstruction.LSRO.resv1 == LSRO_R1) && - (myInstruction.LSRO.resv2 == LSRO_R2)) return DecodeLSRO(myInstruction.LSRO, PC); - else if (myInstruction.LSM.resv1 == LSM_R1) return DecodeLSM(myInstruction.LSM, PC); - else if (myInstruction.BL.resv1 == BL_R1) return DecodeBL(myInstruction.BL, PC); - - return 0; -} - -/////////////////////////////////////////////////////////////// -// -unsigned int LSL(unsigned int uiValue, unsigned int uiSteps) -{ - return uiValue << uiSteps; -} - -/////////////////////////////////////////////////////////////// -// -unsigned int LSR(unsigned int uiValue, unsigned int uiSteps) -{ - return uiValue >> uiSteps; -} - -/////////////////////////////////////////////////////////////// -// -// This one could be trickier since, i'm nor sure if a signed shift really is a signed shift. -unsigned int ASR(unsigned int uiValue, unsigned int uiSteps) -{ - unsigned int uiSignMask = 0; - - // Check if it's a negative number - if (uiValue & 0x80000000) { - // Yes, damn - uiSignMask = ((~0) << (32 - uiSteps)); - } - - return ((uiValue >> uiSteps) | uiSignMask); -} - -/////////////////////////////////////////////////////////////// -// -unsigned int ROR(unsigned int uiValue, unsigned int uiSteps) -{ - unsigned int uiRetval; - - while(uiSteps-- > 0) { - if (uiValue & 0x01) { - uiValue = (uiValue >> 1) | 0x80000000; - } else { - uiValue = uiValue >> 1; - } - } - return uiValue; -} - - -/////////////////////////////////////////////////////////////// -// -unsigned int Shift_Operand(unsigned int Rm, unsigned int amount, unsigned int shift) -{ - unsigned int uiRegisterValue; - - - - - uiRegisterValue = g_Registers[Rm]; - if (Rm == 0x0f) { - // Rm is PC, and PC is offseted by 8. - uiRegisterValue += 8; - } - - // Determine the shift mode. - //(LSL, LSR, ASR, ROR ) - switch (shift) { - case 0: // LSL - return LSL(uiRegisterValue, amount); - case 1: // LSR - return LSR(uiRegisterValue, amount); - case 2: // ASR - return ASR(uiRegisterValue, amount); - case 3: // ROR - return ROR(uiRegisterValue, amount); - default: - break; - } - return 0; -} - -/////////////////////////////////////////////////////////////// -// -// Example Rd, Rm, amount -unsigned int DecodeDPISR(dpisr Instr, unsigned int uiPC) -{ - unsigned int uiOperand = Shift_Operand(Instr.Rm, Instr.amount, Instr.shift); - unsigned int uiRnVal = g_Registers[Instr.Rn]; - - - - // Only do this i Pc is Rd - if (Instr.Rd != 0x0f) return uiPC + 4; - - // The actual value that PC contains when executing this instruction is the instruction address+8 - if (Instr.Rn == 0x0f) uiRnVal += 8; - - // Check what opcode it is! - switch (Instr.opcode) { - case OPCODE_MOV: - return uiOperand; - case OPCODE_MVN: - return ~uiOperand; - case OPCODE_ADD: - return uiRnVal + uiOperand; - case OPCODE_ADC: - return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); - case OPCODE_SUB: - return uiRnVal - uiOperand; - case OPCODE_SBC: - return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_RSB: - return uiOperand - uiRnVal; - case OPCODE_RSC: - return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_AND: - return (uiRnVal & uiOperand); - case OPCODE_EOR: - return (uiRnVal^uiOperand); - case OPCODE_ORR: - return (uiRnVal | uiOperand); - case OPCODE_BIC: - return (uiRnVal & ~uiOperand); - default: - return 0; - } -} - - -/////////////////////////////////////////////////////////////// -// -//dprrs; // Data Processing Register Register Shift -// Example Rd, Rn, Rm Rs -unsigned int DecodeDPRRS(dprrs Instr, unsigned int uiPC) -{ - unsigned int uiRmValue = g_Registers[Instr.Rm]; - unsigned int uiRsValue = g_Registers[Instr.Rs]; - unsigned int uiRnVal = g_Registers[Instr.Rn]; - if ((Instr.Rm = 0x0f)) uiRmValue += 8; - - - unsigned int uiOperand = Shift_Operand(uiRmValue, uiRsValue, Instr.shift); - - // Check if destination is PC - if (Instr.Rd != 0x0f) return uiPC + 4; - if ((Instr.Rn = 0x0f)) uiRnVal += 8; - - // Check what opcode it is! - switch (Instr.opcode) { - case OPCODE_MOV: - return uiOperand; - case OPCODE_MVN: - return ~uiOperand; - case OPCODE_ADD: - return uiRnVal + uiOperand; - case OPCODE_ADC: - return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); - case OPCODE_SUB: - return uiRnVal - uiOperand; - case OPCODE_SBC: - return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_RSB: - return uiOperand - uiRnVal; - case OPCODE_RSC: - return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_AND: - return (uiRnVal & uiOperand); - case OPCODE_EOR: - return (uiRnVal^uiOperand); - case OPCODE_ORR: - return (uiRnVal | uiOperand); - case OPCODE_BIC: - return (uiRnVal & ~uiOperand); - default: - return 0; - } - -} - -/////////////////////////////////////////////////////////////// -// -// dpi; // Data processing immediate -// example add r0, r1, (ror , ) -unsigned int DecodeDPI(dpi Instr, unsigned int uiPC) -{ - unsigned int uiOperand = (ROR(Instr.immed, Instr.rotate << 1)); - unsigned int uiRnVal = g_Registers[Instr.Rn]; - - // Check if PC is destination - if (Instr.Rd != 0x0f) return uiPC + 4; // Next instruction - if ((Instr.Rn = 0x0f)) uiRnVal += 8; - - // Check what opcode it is! - switch ((Instr.opcode)) { - case OPCODE_MOV: - return uiOperand; - case OPCODE_MVN: - return ~uiOperand; - case OPCODE_ADD: - return uiRnVal + uiOperand; - case OPCODE_ADC: - return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); - case OPCODE_SUB: - return uiRnVal - uiOperand; - case OPCODE_SBC: - return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_RSB: - return uiOperand - uiRnVal; - case OPCODE_RSC: - return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); - case OPCODE_AND: - return (uiRnVal & uiOperand); - case OPCODE_EOR: - return (uiRnVal^uiOperand); - case OPCODE_ORR: - return (uiRnVal | uiOperand); - case OPCODE_BIC: - return (uiRnVal & ~uiOperand); - default: - return 0; - } - -} - -/////////////////////////////////////////////////////////////// -// -// lsio; // Load/store immediate offset -// Example ldr Rd, [Rn, #] -unsigned int DecodeLSIO(lsio Instr, unsigned int uiPC) -{ - unsigned int uiRnValue = g_Registers[Instr.Rn]; - unsigned int uiMemValue; - - // Check if destination is PC - if (Instr.Rd != 0x0f) return uiPC + 4; - // Check if it's a LDR instruction - if (Instr.L != 1) return uiPC + 4; - - if (Instr.Rn == 0x0f) uiRnValue += 8; - - // Check if it's pre-indexed - if (Instr.p == 1){ - - if (Instr.U == 1) { - // Add offset - uiRnValue += Instr.immed; - } else { - // Sub offset - uiRnValue -= Instr.immed; - } - } - - uiMemValue = *(unsigned int *)(uiRnValue); - - return uiMemValue; - -} - -/////////////////////////////////////////////////////////////// -// -// lsro; // Load/Store register offset -// Example ldr Rd, [Rn + Rm lsl 5] -unsigned int DecodeLSRO(lsro Instr, unsigned int uiPC) -{ - unsigned int uiRnValue = g_Registers[Instr.Rn]; - unsigned int uiRmValue = g_Registers[Instr.Rm]; - unsigned int uiIndex; - unsigned int uiMemValue; - - if (Instr.Rm == 0x0f) uiRmValue += 8; - if (Instr.Rn == 0x0f) uiRnValue += 8; - - // Check if destination is PC and that it's LDR instruction - if ((Instr.Rd != 0x0f) || (Instr.L != 1)) return uiPC + 4; - - uiIndex = Shift_Operand(Instr.Rm, Instr.amount, Instr.shift); - - if (Instr.p == 1){ - - if (Instr.U == 1) { - // Add offset - uiRnValue += uiIndex; - } else { - // Sub offset - uiRnValue -= uiIndex; - } - } - - uiMemValue = *(unsigned int *)(uiRnValue); - - return uiMemValue; - - -} -/////////////////////////////////////////////////////////////// -// -// lsm; // Load store multiple -// Example: ldm r0, {r1, r2, r3} -unsigned int DecodeLSM(lsm Instr, unsigned int uiPC) -{ - unsigned int uiRnValue = g_Registers[Instr.Rn]; - unsigned int uiOffsetToPC = 0; - unsigned int uiMemValue; - - // Make sure PC is destination and it's Load instruction - if (((Instr.regs & (1 << 15)) == 0) || (Instr.L != 1)) return uiPC + 4; - - - // Check if U bit it set - if (Instr.U == 0) { - // This means that it's ascending - // Also means that the PC is closest to Rn - if (Instr.p == 1) { - // Pre decrement. - uiOffsetToPC -= 4; - } else { - uiOffsetToPC = 0; - } - } else { - // The stack is descending, that means that the PC is as far away as possible. - // Lets find out how many registers before it. - for (int i = 0; i < 15; i++) { - if ((Instr.regs & (1 << i)) != 0) uiOffsetToPC += 4; - } - - // If the P bit is set, it uses pre increment - if (Instr.p == 1) uiOffsetToPC += 4; - } - - // read from out calculated address. - uiMemValue = *(unsigned int *)((uiRnValue + uiOffsetToPC) & ~0x03); - - return uiMemValue; - -} - -/////////////////////////////////////////////////////////////// -// -// bl; // Branch with link(optional) -unsigned int DecodeBL(bl Instr, unsigned int uiPC) -{ - //Printf("Decode BL"); - unsigned int uiAddress; - - uiAddress = Instr.offset; - if (uiAddress & 0x00800000) { - uiAddress |= 0xff000000; - } - - uiAddress <<= 2; - uiAddress += 8; - - return uiPC + uiAddress; - -} diff --git a/backends/gp32/fontdata.c b/backends/gp32/fontdata.c deleted file mode 100644 index f2d833088d..0000000000 --- a/backends/gp32/fontdata.c +++ /dev/null @@ -1,284 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -const unsigned char fontresEng1[] = -{ - 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x81,0xA5,0x81,0x81,0xBD,0x81,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0xFF,0xDB,0xFF,0xFF,0xC3,0xFF,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x36,0x7F,0x7F,0x7F,0x7F,0x3E,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x3E,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x3C,0x7E,0x66,0x7E,0x18,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x3C,0x7E,0x7E,0x3C,0x18,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xFF,0xFF,0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF,0xFF,0xFF,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0F,0x07,0x0D,0x19,0x3C,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x33,0x3C,0x33,0x30,0x70,0xF0,0x70,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7F,0x63,0x7F,0x63,0x63,0x67,0xE7,0xE6,0xC0,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0xDB,0x3C,0xE7,0x3C,0xDB,0x18,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x40,0x60,0x70,0x7C,0x7F,0x7C,0x70,0x60,0x40,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x01,0x03,0x07,0x1F,0x7F,0x1F,0x07,0x03,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x33,0x00,0x33,0x33,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7F,0xDB,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x3E,0x63,0x30,0x1C,0x36,0x63,0x63,0x36,0x1C,0x06,0x63,0x3E,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x7F,0x06,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x18,0x30,0x7F,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x7F,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x08,0x1C,0x1C,0x3E,0x3E,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x7F,0x7F,0x3E,0x3E,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00,0x00, - 0x00,0x18,0x18,0x3C,0x66,0x60,0x3C,0x06,0x06,0x66,0x3C,0x18,0x18,0x00,0x00,0x00, - 0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x30,0x63,0x43,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x0C,0x06,0x06,0x06,0x06,0x0C,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x76,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x06,0x1C,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0x6C,0x7E,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x60,0x60,0x7C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x06,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x6E,0x6E,0x60,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x6C,0x78,0x70,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x63,0x77,0x7F,0x6B,0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x76,0x7E,0x6E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x04,0x06,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x60,0x3C,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, - 0x00,0x00,0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3C,0x66,0x60,0x78,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00,0x00, - 0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00, - 0x00,0x00,0x00,0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x77,0x7F,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x6C,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x6E,0x78,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x38,0x0C,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x30,0x30,0x7C,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0x18,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x7F,0x00,0x00,0x00,0x00,0x00, - 0x00,0x3C,0x66,0xC2,0xC0,0xC2,0x66,0x3C,0x18,0x0E,0x0C,0x78,0x00,0x00,0x00,0x00, - 0x00,0x00,0x66,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x06,0x0C,0x18,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x08,0x1C,0x36,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x30,0x18,0x0C,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x1C,0x36,0x1C,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x0C,0x06,0x3C,0x00,0x00,0x00, - 0x00,0x00,0x08,0x1C,0x36,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x30,0x18,0x0C,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x66,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x18,0x3C,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x63,0x63,0x08,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x00,0x00,0x00,0x00, - 0x00,0x1C,0x36,0x1C,0x00,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x00,0x00,0x00,0x00, - 0x00,0x0C,0x18,0x30,0x00,0x7F,0x33,0x30,0x3E,0x30,0x33,0x7F,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x1B,0x7E,0xD8,0xDC,0x77,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1F,0x36,0x66,0x66,0x7F,0x66,0x66,0x66,0x67,0x00,0x00,0x00,0x00, - 0x00,0x00,0x08,0x1C,0x36,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x63,0x63,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x30,0x18,0x0C,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x18,0x3C,0x66,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x30,0x18,0x0C,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x63,0x63,0x00,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00, - 0x00,0x00,0x63,0x63,0x1C,0x36,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x63,0x63,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x18,0x18,0x7E,0xC3,0xC0,0xC0,0xC3,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0x1C,0x36,0x32,0x30,0x78,0x30,0x30,0x30,0x73,0x7E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xC3,0x66,0x3C,0x18,0xFF,0x18,0xFF,0x18,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0xFC,0x66,0x66,0x7C,0x62,0x66,0x6F,0x66,0x66,0xF3,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0E,0x1B,0x18,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0xD8,0x70,0x00,0x00, - 0x00,0x00,0x0C,0x18,0x30,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0C,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0C,0x18,0x30,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0C,0x18,0x30,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3B,0x6E,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00, - 0x00,0x3B,0x6E,0x00,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x00,0x00,0x00,0x00, - 0x00,0x00,0x3C,0x6C,0x6C,0x3E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x38,0x6C,0x6C,0x38,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x60,0xE0,0x63,0x66,0x6C,0x18,0x30,0x6E,0xC3,0x06,0x0C,0x1F,0x00,0x00, - 0x00,0x00,0x60,0xE0,0x63,0x66,0x6C,0x18,0x33,0x67,0xCF,0x1F,0x03,0x03,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x3C,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x1B,0x36,0x6C,0x36,0x1B,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x6C,0x36,0x1B,0x36,0x6C,0x00,0x00,0x00,0x00,0x00,0x00, - 0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11, - 0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55, - 0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x36,0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36, - 0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, - 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x6E,0x6C,0x6C,0x6E,0x3B,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x7E,0x63,0x63,0x7E,0x60,0x60,0x20,0x00,0x00, - 0x00,0x00,0x00,0x7F,0x63,0x63,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7F,0x63,0x30,0x18,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x6C,0x6C,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x60,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3F,0x6C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x7E,0x18,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x36,0x36,0x36,0x77,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1E,0x30,0x18,0x0C,0x3E,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x03,0x06,0x7E,0xDB,0xDB,0xF3,0x7E,0x60,0xC0,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1C,0x30,0x60,0x60,0x7C,0x60,0x60,0x30,0x1C,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0xFF,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,0x7E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,0x7E,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, - 0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0xFF,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3B,0x6E,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x38,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0F,0x0C,0x0C,0x0C,0x0C,0x0C,0xEC,0x6C,0x3C,0x1C,0x00,0x00,0x00,0x00, - 0x00,0x00,0xD8,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x70,0xD8,0x30,0x60,0xC8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; diff --git a/backends/gp32/gfx_splash.h b/backends/gp32/gfx_splash.h deleted file mode 100644 index c83ecffb0e..0000000000 --- a/backends/gp32/gfx_splash.h +++ /dev/null @@ -1,4869 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -///////////////////////////////////////// -// -// Header file for GP32 -// -// convertion of gfx_splash.bmp file : -// Width = 320 -// Heigth = 240 -// GP32 Mode = 8 Bits per Pixel -// -// with GP32Converter coded by Edorul : -// http://www.ifrance.com/edorul/ -// edorul@free.fr -// -///////////////////////////////////////// - -#define gfx_splash_width 320 -#define gfx_splash_height 240 - -#define gfx_splash_palnb 256 - -#include - -GP_PALETTEENTRY gfx_splash_Pal[256] = { - 0x843, 0x88B, 0x1941, 0x110D, 0x2883, 0x30C9, 0x2945, 0x2109, 0x214D, 0x2989, 0x218F, 0x3149, 0x394D, 0x3989, 0x318D, 0x8D1, - 0x1153, 0x9D9, 0x2993, 0x29DB, 0x1A01, 0x3243, 0x3A4B, 0x3B01, 0x1A15, 0x125B, 0x3255, 0x329B, 0x3B17, 0x331D, 0x40C3, 0x4145, - 0x498B, 0x6987, 0x61C9, 0x49D1, 0x4285, 0x524D, 0x4B43, 0x530D, 0x6207, 0x624D, 0x6307, 0x6B4B, 0x4211, 0x4A55, 0x4A93, 0x4297, - 0x5251, 0x5255, 0x5293, 0x5295, 0x4ADB, 0x5313, 0x535D, 0x6AD3, 0x62D9, 0x7355, 0x6319, 0x6B5D, 0x6B9B, 0x639F, 0x7359, 0x735D, - 0x739B, 0x7B9F, 0x32E1, 0x3B63, 0x4AA3, 0x52E9, 0x4BA3, 0x53A9, 0x6BE3, 0x6BA9, 0x7BF1, 0x7C4D, 0x5C1F, 0x7417, 0x741B, 0x5C25, - 0x54AB, 0x552F, 0x6C65, 0x6CAB, 0x7D27, 0x752D, 0x54F1, 0x5D35, 0x5D79, 0x6CF1, 0x6D75, 0x6DB9, 0x7E35, 0x763B, 0x89CF, 0xB085, - 0xA909, 0xA98D, 0xB14B, 0xB1CF, 0x8207, 0x834F, 0x8A53, 0x8AD3, 0x8A95, 0x9253, 0x9295, 0x8395, 0x8359, 0x835D, 0x83D9, 0x83DD, - 0x9359, 0x93D9, 0x93DD, 0xAA11, 0xA2D7, 0xB253, 0xBA95, 0xA393, 0xAB19, 0xABDB, 0xA3DF, 0xB319, 0xB3DF, 0xC001, 0xC8C7, 0xD843, - 0xD885, 0xC909, 0xC18D, 0xD14B, 0xD9CF, 0xE001, 0xE8C7, 0xF801, 0xF885, 0xF14B, 0xD295, 0xCB19, 0xC39D, 0xDB19, 0xD3DF, 0xF295, - 0xE319, 0xEB9D, 0xF35B, 0xFBDF, 0x83E1, 0x8C4D, 0x8C15, 0x945D, 0x9D53, 0x951F, 0xAC57, 0xAC9D, 0xA595, 0xB55D, 0xD517, 0xCD5B, - 0xE59B, 0xD65B, 0xE69B, 0x8421, 0x8C65, 0x8CA3, 0x84E7, 0x9461, 0x9465, 0x9CA1, 0x94A5, 0x8CAB, 0x9D25, 0x8D6D, 0xA463, 0xA4E1, - 0xA4E5, 0xB421, 0xB4E1, 0xB4A5, 0xA4E9, 0xAD65, 0xA529, 0xAD6D, 0xADAB, 0xADAD, 0xB56B, 0xB56D, 0xB5AB, 0xB5AD, 0x94F3, 0x8DB3, - 0x8DF9, 0xADB5, 0xA5F9, 0x9E27, 0x962D, 0xB665, 0xB62D, 0xBF25, 0xB729, 0x9675, 0x8EBD, 0x9F37, 0x9F3D, 0xA675, 0xAEB9, 0xAF37, - 0xAF7D, 0xCC63, 0xC4E7, 0xD463, 0xD4E7, 0xC5A5, 0xC569, 0xC5E9, 0xC5ED, 0xD529, 0xDD6D, 0xD5E9, 0xD5EF, 0xF463, 0xE5E1, 0xEDAD, - 0xD5F1, 0xCE67, 0xCE2D, 0xCF65, 0xCF6B, 0xE623, 0xE6AB, 0xEFE5, 0xEF2F, 0xC631, 0xCE75, 0xCEB3, 0xCEB7, 0xDE31, 0xD675, 0xD6B3, - 0xDEB7, 0xD6F9, 0xDF35, 0xCFBD, 0xEEB3, 0xE6F9, 0xEF77, 0xE739, 0xEF7D, 0xEFBB, 0xEFFF, 0xFF79, 0xFFB9, 0xFFFF, 0x1, 0x1 - -}; - -unsigned char gfx_splash[76800] = { - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF6, 0x4E, 0xBC, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0xE, - 0xFD, 0xF9, 0x3A, 0xE, 0x33, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xF7, 0xF8, 0x99, 0x2, 0x15, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF7, - 0xFD, 0x94, 0xE, 0xE, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xE9, 0xEF, 0x99, 0x14, 0x17, 0x15, 0x99, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, - 0xE9, 0xE, 0xE, 0xB7, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xE9, 0xB8, 0xAC, 0x24, 0x15, 0x14, 0x17, 0x27, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, - 0xF0, 0x97, 0x27, 0x4D, 0xC6, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, 0xE, - 0xE, 0xE, 0x3A, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, - 0xB8, 0x27, 0x15, 0x2, 0x2, 0x2, 0x17, 0x24, 0x35, 0xF9, 0xFD, 0xFD, 0xF8, 0xF0, 0xF0, 0xD8, - 0x2C, 0x0, 0x6, 0x2, 0x2, 0x16, 0x4D, 0xBC, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x3A, - 0xE, 0x33, 0xF5, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, - 0xAC, 0x15, 0x2, 0x15, 0x17, 0x15, 0x17, 0x26, 0x16, 0xF2, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0x4D, - 0x2, 0x14, 0x14, 0x14, 0x2, 0x2, 0x2, 0x2, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, 0xBD, 0xBD, - 0xAC, 0x24, 0x17, 0x17, 0x15, 0x26, 0x26, 0x26, 0x24, 0xF2, 0xF9, 0xF0, 0xE9, 0xBD, 0xB6, 0x16, - 0x24, 0x24, 0x15, 0x15, 0x15, 0x17, 0x24, 0x14, 0x2, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xAC, 0x27, 0x17, 0x15, 0x15, 0x26, 0x26, 0x26, 0x24, 0xEB, 0xF7, 0xEE, 0xBD, 0xBD, 0xB6, 0x27, - 0x26, 0x26, 0x17, 0x15, 0x15, 0x24, 0x15, 0x14, 0x15, 0x2, 0x4E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xB6, - 0x27, 0x24, 0x15, 0x15, 0x2, 0x24, 0x26, 0x26, 0x26, 0x27, 0xC6, 0xEE, 0xBD, 0xBD, 0xB8, 0x35, - 0x26, 0x26, 0x15, 0x14, 0x15, 0x15, 0x15, 0x2, 0x14, 0x17, 0x24, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xB6, - 0x27, 0x15, 0x15, 0x2, 0x2, 0x2, 0x14, 0x15, 0x17, 0x26, 0x27, 0xC6, 0xD8, 0xBD, 0xBD, 0x4D, - 0x15, 0x17, 0x17, 0x16, 0x35, 0x16, 0x14, 0x14, 0x15, 0x17, 0x15, 0x24, 0xB8, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, - 0xAC, 0x27, 0x26, 0x2, 0x2, 0x0, 0x2, 0x26, 0x17, 0x26, 0x15, 0x4D, 0xD8, 0xBD, 0xBD, 0xAC, - 0x6, 0x15, 0x17, 0x27, 0xB6, 0xAA, 0x39, 0x6, 0x14, 0x17, 0x26, 0x26, 0x27, 0xEF, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, - 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xBD, - 0xB8, 0xB5, 0x4E, 0x6, 0x15, 0x14, 0x2, 0x14, 0x26, 0x26, 0x17, 0x15, 0x4D, 0xAC, 0xBC, 0x39, - 0x2, 0x14, 0x17, 0x24, 0xB5, 0xBD, 0xB7, 0x40, 0x6, 0x24, 0x26, 0x26, 0x24, 0xAC, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, - 0xBD, 0xBD, 0xB8, 0x27, 0x17, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x15, 0x2, 0x6, 0x27, 0x6, - 0x2, 0x2, 0x17, 0x24, 0xB5, 0xBD, 0xBD, 0xB6, 0x16, 0x15, 0x26, 0x17, 0x17, 0x4E, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, - 0xD8, 0xBD, 0xBD, 0x4E, 0x15, 0x17, 0x14, 0x14, 0x14, 0x17, 0x26, 0x17, 0x15, 0x14, 0x2, 0x2, - 0x2, 0x2, 0x15, 0x15, 0x4E, 0xBD, 0xBD, 0xBD, 0x6F, 0x15, 0x24, 0x14, 0x2, 0x27, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xA3, - 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xBD, 0xBD, 0xB6, 0x16, 0x14, 0x14, 0x14, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x39, 0xE9, 0xBD, 0xBD, 0xB4, 0x16, 0x24, 0x14, 0x2, 0x2, 0x35, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xA3, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, - 0xEE, 0xBD, 0xBD, 0xBD, 0x4E, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x17, 0x15, 0x14, 0x15, 0x17, - 0x17, 0x17, 0x17, 0x17, 0x39, 0xE9, 0xBD, 0xBD, 0xA9, 0x16, 0x17, 0x15, 0x15, 0x2, 0x6, 0xB8, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x41, - 0xE, 0xE, 0xE, 0xA3, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xE9, 0xBD, 0xBD, 0xB6, 0x25, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x2, 0x2, 0x2, 0x15, - 0x15, 0x17, 0x17, 0x15, 0x4E, 0xE9, 0xBD, 0xBD, 0x39, 0x2, 0x17, 0x17, 0x17, 0x15, 0x15, 0x4E, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xE, 0xAA, 0x2C, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF8, 0xEE, 0xD8, 0xBD, 0xBD, 0xA5, 0x15, 0x15, 0x14, 0x14, 0x17, 0x15, 0x14, 0x14, 0x2, 0x2, - 0x2, 0x14, 0x15, 0x16, 0xBC, 0xE9, 0xAC, 0x4E, 0x27, 0x2, 0x14, 0x17, 0x26, 0x15, 0x15, 0x4E, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xE, 0xE9, 0xBD, 0x38, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xB8, 0x4E, 0x6, 0x2, 0x14, 0x15, 0x15, 0x15, 0x14, 0x14, 0x2, - 0x2, 0x2, 0x14, 0x35, 0xD8, 0xA5, 0x16, 0x2, 0x2, 0x2, 0x14, 0x15, 0x15, 0x14, 0x2, 0x40, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xB7, 0x4E, 0x9, 0x15, 0x14, 0x2, 0x0, 0x2, 0x2, 0x2, - 0x2, 0x15, 0x16, 0xB6, 0xB8, 0x27, 0x14, 0x17, 0x2, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x27, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, - 0x33, 0x3A, 0x41, 0xA8, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF5, 0xEA, 0xD8, 0xBD, 0xB7, 0xAA, 0x35, 0x6, 0x2, 0x14, 0x14, 0x14, 0x15, - 0x15, 0x16, 0xA5, 0xB6, 0x2E, 0x6, 0x14, 0x17, 0x17, 0x15, 0x17, 0x17, 0x26, 0x26, 0x17, 0x27, - 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xBD, 0xA5, 0x35, 0x16, 0x16, 0x16, 0x16, - 0x3C, 0xB8, 0xBD, 0xB4, 0x9, 0x2, 0x2, 0x15, 0x17, 0x17, 0x26, 0x24, 0x15, 0x26, 0x15, 0x24, - 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xEA, 0xE9, 0xE9, 0xE9, 0xE9, 0xEB, 0xEB, 0xEB, - 0xEA, 0xD8, 0xBD, 0xB7, 0x35, 0x16, 0x2, 0x15, 0x24, 0x24, 0x26, 0x26, 0x15, 0x15, 0x17, 0x39, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF7, 0xF7, 0xF8, 0xF9, 0xFD, 0xFD, 0xF9, - 0xF5, 0xEA, 0xD8, 0xBD, 0xB6, 0xA9, 0x16, 0x15, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x24, 0xC6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, - 0x41, 0xE, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF7, 0xEA, 0xD8, 0xBD, 0xBD, 0xA5, 0x27, 0x27, 0x27, 0x17, 0x26, 0x26, 0x15, 0x99, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xE, 0xF7, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF2, 0xF2, 0xF2, 0xF2, - 0xF2, 0xEF, 0xE9, 0xE9, 0xEE, 0xE9, 0xD8, 0xB8, 0xBC, 0xBC, 0x4D, 0x24, 0x24, 0xB5, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, - 0x31, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xE9, 0x99, 0x4D, 0x16, 0x6, 0x9, 0x6, - 0x6, 0x6, 0x15, 0x27, 0x40, 0xB6, 0xD8, 0xE9, 0xEE, 0xF5, 0xF5, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0x31, 0x3F, 0x41, 0xF8, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xB5, 0x39, 0x16, 0x2, 0x2, 0x2, 0x2, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x2, 0x2, 0x2, 0x16, 0x4D, 0xEB, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA8, - 0xF9, 0xF0, 0xE, 0xE, 0xE, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0x99, 0x15, 0x2, 0x2, 0x14, 0x15, 0x26, 0x26, 0x24, 0x15, - 0x15, 0x17, 0x26, 0x17, 0x15, 0x15, 0x15, 0x2, 0x16, 0xC5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xB6, 0xE, 0x2C, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0x99, 0x15, 0x2, 0x2, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x15, - 0x2, 0x14, 0x24, 0x15, 0x15, 0x15, 0x17, 0x17, 0x15, 0x24, 0xB5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF5, 0xE9, 0xBD, 0x99, 0x15, 0x2, 0x14, 0x15, 0x2, 0x2, 0x15, 0x24, 0x26, 0x26, 0x24, - 0x15, 0x14, 0x15, 0x15, 0x14, 0x15, 0x17, 0x15, 0x15, 0x26, 0x15, 0x4D, 0xF9, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xE9, 0xBD, 0xB6, 0x27, 0x2, 0x15, 0x26, 0x15, 0x2, 0x2, 0x2, 0x15, 0x15, 0x17, 0x24, - 0x24, 0x24, 0x17, 0x15, 0x15, 0x17, 0x15, 0x2, 0x15, 0x26, 0x26, 0x15, 0xBC, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, - 0xEE, 0xD8, 0xBD, 0x6F, 0x2, 0x2, 0x26, 0x26, 0x15, 0x24, 0x17, 0x14, 0x15, 0x15, 0x2, 0x15, - 0x24, 0x24, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x17, 0x14, 0x14, 0x16, 0xE9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xBD, 0xBD, 0x2E, 0x0, 0x14, 0x26, 0x26, 0x15, 0x26, 0x17, 0x17, 0x17, 0x17, 0x15, 0x17, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x14, 0x15, 0x26, 0x15, 0x2C, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, - 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x38, 0xA3, 0xB4, 0xE9, 0xE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xD8, 0xBD, 0xB6, 0x16, 0x0, 0x2, 0x24, 0x17, 0x2, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x17, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x15, 0x17, 0x26, 0x15, 0x9, 0xF0, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xBD, 0xB4, 0xA3, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, - 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x0, 0x2, 0x26, 0x26, 0x26, 0x17, 0x17, 0x17, 0x15, 0x15, 0x17, - 0x2, 0x14, 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x14, 0x26, 0x26, 0x26, 0x24, 0x6, 0xB8, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x14, 0x2, 0x14, 0x26, 0x26, 0x17, 0x17, 0x17, 0x15, 0x14, 0x17, - 0x2, 0x40, 0xAC, 0xAC, 0x4D, 0x16, 0x2, 0x15, 0x14, 0x24, 0x26, 0x26, 0x17, 0x15, 0x2E, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xF9, 0xA8, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x15, 0x14, 0x15, 0x39, 0x27, - 0x4E, 0xD8, 0xD8, 0xBD, 0xBD, 0xAC, 0x27, 0x2, 0x0, 0x14, 0x26, 0x17, 0x17, 0x17, 0x15, 0xBC, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x17, 0x15, 0x14, 0x14, 0x17, 0x24, 0x14, 0x2, 0xAC, 0xF9, 0xF6, - 0xF9, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, 0xB6, 0x40, 0x2, 0x2, 0x24, 0x14, 0x15, 0x17, 0x15, 0x4E, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAA, 0x6, 0x2, 0x14, 0x14, 0x14, 0x14, 0x15, 0x14, 0x24, 0x27, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x24, 0x14, 0x2, 0x14, 0x14, 0x2E, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x4E, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xA9, 0x2, 0x14, 0x17, 0x15, 0x15, 0x14, 0x2, 0x16, - 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, - 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x2C, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xE9, 0xB8, 0xB6, 0xAC, 0x27, 0x2, 0x15, 0x26, 0x17, 0x17, 0x15, 0x15, 0x39, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, - 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, - 0xBD, 0xBD, 0xB8, 0x27, 0x2, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x15, 0x9, 0xF0, 0xF9, 0xF8, - 0xF7, 0xF7, 0x4E, 0x6, 0x6, 0x9, 0x16, 0x2, 0x15, 0x24, 0x15, 0x17, 0x26, 0x15, 0x15, 0x99, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xD8, 0xBD, 0xBD, 0x35, 0x2, 0x2, 0x2, 0x2, 0x2, 0x15, 0x24, 0x2, 0x9, 0xEF, 0xF7, 0xE9, - 0xB8, 0xBC, 0x4E, 0x2, 0x14, 0x15, 0x15, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x14, 0x6, 0xEB, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, - 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xBD, 0xBD, 0xAA, 0x6, 0x2, 0x14, 0x15, 0x6, 0x15, 0x14, 0x2, 0x2, 0xBD, 0xE9, 0x2E, - 0x2, 0x6, 0x15, 0x14, 0x14, 0x2, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0xF2, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, - 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xEA, 0xBD, 0xBD, 0xB8, 0x4E, 0x6, 0x24, 0x6, 0x14, 0x15, 0x14, 0x2, 0x2, 0x4E, 0xB6, 0x6, - 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x17, 0x17, 0x17, 0x17, 0x15, 0x17, 0x17, 0x15, 0x4E, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, - 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF5, 0xE9, 0xBD, 0xBD, 0xB8, 0x97, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x39, 0xB6, 0x9, - 0x2, 0x2, 0x2, 0x2, 0x6, 0x2, 0x15, 0x17, 0x17, 0x17, 0x26, 0x26, 0x24, 0x16, 0xF2, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, - 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xB8, 0x4E, 0x15, 0x17, 0x17, 0x17, 0x17, 0x14, 0x3C, 0xD8, 0xB6, - 0x3C, 0x35, 0x35, 0x4E, 0xAA, 0x4E, 0x2, 0x15, 0x24, 0x24, 0x26, 0x26, 0x17, 0x4D, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF5, 0xE9, 0xD8, 0xBD, 0xB8, 0xA5, 0x16, 0x15, 0x17, 0x15, 0x27, 0xE9, 0xF5, 0xF7, - 0xF5, 0xAC, 0x6, 0x6, 0x97, 0x4E, 0x2, 0x24, 0x15, 0x17, 0x26, 0x26, 0x15, 0xBC, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF7, 0xEE, 0xE9, 0xD8, 0xE9, 0xC6, 0x99, 0x4E, 0x99, 0xF2, 0xF9, 0xFD, 0xFD, - 0xF9, 0xAC, 0x2, 0x15, 0x16, 0xAA, 0x35, 0x16, 0x27, 0x27, 0x24, 0x24, 0x4D, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF0, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF2, 0x35, 0x16, 0x35, 0xD8, 0xD8, 0xBC, 0xEB, 0xF2, 0xF2, 0xF2, 0xF9, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF7, 0xEB, 0x99, 0x4E, 0x4D, 0x4D, 0x4D, 0x4E, 0xAC, 0xEF, - 0xF6, 0xF9, 0xF5, 0xEB, 0xF0, 0xF7, 0xF7, 0xF7, 0xEF, 0xC6, 0xF2, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xC6, 0x4D, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x6, - 0x16, 0x4D, 0x99, 0xEB, 0xEB, 0xEF, 0xF7, 0xEF, 0x35, 0x6, 0x24, 0x27, 0x97, 0xF6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF7, 0xF0, 0xE9, 0xB5, 0x24, 0x2, 0x14, 0x17, 0x17, 0x26, 0x26, 0x17, 0x24, 0x15, 0x2, - 0x2, 0x2, 0x2, 0x6, 0x6, 0x16, 0x4D, 0x16, 0x2, 0x14, 0x26, 0x14, 0x14, 0x27, 0xEB, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB3, 0xD6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, - 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x94, 0x31, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xEE, 0xE9, 0xB8, 0x27, 0x2, 0x15, 0x26, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x15, - 0x2, 0x14, 0x15, 0x15, 0x2, 0x2, 0x2, 0x2, 0x14, 0x17, 0x26, 0x17, 0x15, 0x17, 0x4D, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xF2, 0xF5, 0xFB, 0x67, 0x1E, 0x6C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF9, - 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, - 0xF0, 0xD8, 0xBD, 0x97, 0x2, 0x14, 0x26, 0x26, 0x15, 0x2, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, - 0x15, 0x14, 0x15, 0x14, 0x2, 0x14, 0x14, 0x15, 0x14, 0x17, 0x26, 0x15, 0x15, 0x14, 0x97, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF2, 0xEA, 0xBD, 0xEF, 0xDC, 0x66, 0x1E, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, - 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xB6, 0xF5, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xBD, 0xB6, 0x25, 0x2, 0x14, 0x15, 0x26, 0x26, 0x14, 0x14, 0x14, 0x15, 0x15, 0x17, 0x26, - 0x2A, 0x24, 0x17, 0x14, 0x14, 0x15, 0x24, 0x14, 0x15, 0x26, 0x26, 0x17, 0x15, 0x15, 0x4D, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xEB, 0xBD, 0xB6, 0xD8, 0x37, 0x4, 0x1F, 0x1E, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x33, - 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0x31, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xD8, 0xBD, 0xAC, 0x6, 0x2, 0x15, 0x26, 0x26, 0x26, 0x24, 0x15, 0x14, 0x15, 0x14, 0x15, 0x24, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x15, 0x24, 0xF2, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF6, 0xE9, 0xB4, 0xAA, 0xB6, 0x20, 0x4, 0x29, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xB6, - 0x20, 0x20, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x24, 0x26, 0x26, 0x26, 0x15, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x17, 0x17, 0x26, 0x14, 0x2, 0x25, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF4, 0xD8, 0xAA, 0x94, 0xA8, 0x30, 0x4, 0x25, 0x1E, 0xD7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xE9, 0xEA, 0xB6, - 0x4, 0x1E, 0x1F, 0x30, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE9, 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x2, 0x24, 0x26, 0x26, 0x26, 0x17, 0x14, 0x16, 0x39, 0x4D, 0x35, - 0x16, 0x15, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x14, 0x15, 0x15, 0x17, 0x15, 0x2, 0xD, 0xF5, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xBD, 0xA3, 0x41, 0xA3, 0x20, 0x6, 0x29, 0x4, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xBD, 0xB4, 0xBA, 0xA7, - 0x4, 0x1E, 0x4, 0xB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, - 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x0, 0x2, 0x26, 0x26, 0x26, 0x17, 0x4D, 0xC6, 0xD8, 0xBD, 0xBD, - 0xAC, 0x27, 0x15, 0x17, 0x17, 0x14, 0x15, 0x14, 0x14, 0x26, 0x26, 0x26, 0x24, 0x2, 0x9, 0xF0, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xBD, 0xA4, 0x41, 0x6F, 0xD, 0x6, 0x29, 0x4, 0x97, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xEA, 0xB6, 0x94, 0x94, 0xA7, - 0x1F, 0x20, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, - 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0x4D, 0x2, 0x14, 0x14, 0x2, 0x14, 0x26, 0x26, 0x15, 0x99, 0xF7, 0xF0, 0xE9, 0xBD, - 0xBD, 0xB8, 0x97, 0x24, 0x24, 0x15, 0x16, 0x2E, 0x2E, 0x24, 0x26, 0x26, 0x17, 0x2, 0x4E, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xBD, 0x94, 0x3F, 0x41, 0xD, 0x6, 0x29, 0x1F, 0x71, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFC, 0xF6, 0xF6, 0xF6, 0xF4, 0xF6, 0xF6, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFB, - 0xFD, 0xFD, 0xF5, 0xF7, 0xFD, 0xF6, 0xF4, 0xF6, 0xFD, 0xF2, 0xF4, 0xF6, 0xF6, 0xF4, 0xE2, 0xB5, - 0xA9, 0x6F, 0xB0, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xAA, 0x6F, 0x41, 0x3A, - 0x1E, 0x25, 0x20, 0xD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, - 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, - 0xBD, 0xBD, 0x35, 0x2, 0x17, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x27, 0xF2, 0xF8, 0xF5, 0xEE, - 0xE9, 0xE9, 0xE9, 0xC6, 0xC6, 0xBC, 0xB8, 0xBD, 0xBD, 0xB8, 0x39, 0x24, 0x15, 0x4D, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xBC, 0x41, 0x3C, 0x3C, 0xD, 0x4, 0x25, 0x1F, 0x71, 0xD5, 0xB5, 0xA7, 0xB0, 0xBA, 0xD8, - 0xE9, 0xE9, 0xEB, 0xD8, 0xB0, 0x40, 0x30, 0xD, 0xD, 0x20, 0x20, 0x20, 0xD, 0x20, 0xD, 0x20, - 0x20, 0x1F, 0x6, 0x6, 0x4, 0x4, 0x4, 0x4, 0xD, 0xB, 0xB, 0x40, 0xF4, 0xFD, 0xF6, 0xE0, - 0xD8, 0x6F, 0xB, 0x32, 0xD8, 0xF6, 0xF6, 0xF4, 0xE0, 0xB5, 0x72, 0x38, 0x3E, 0x25, 0x1F, 0xAF, - 0xF7, 0xF0, 0xEF, 0xF4, 0xB5, 0x1F, 0xFE, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, - 0x0, 0x0, 0xFE, 0x4, 0xB0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF5, 0xF0, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xA3, 0x41, 0x40, 0x30, - 0x1F, 0x6B, 0x37, 0xD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, - 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, - 0xBD, 0xBD, 0x2E, 0x2, 0x17, 0x17, 0x15, 0x14, 0x14, 0x17, 0x26, 0x14, 0x35, 0xF2, 0xF9, 0xF8, - 0xF7, 0xF7, 0xF8, 0xF9, 0xF8, 0xF7, 0xF0, 0xE9, 0xE9, 0xF0, 0xF2, 0xBC, 0xC6, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xEF, 0xBC, 0xA3, 0x3C, 0x38, 0xB, 0x4, 0x25, 0x28, 0x25, 0x1F, 0x0, 0xFE, 0x0, 0x0, 0x0, - 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x6, 0x6, 0x4, 0x6, 0x4, 0x4, - 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x25, 0x6C, 0x97, 0x37, 0x4, - 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0xD, 0x6E, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x0, 0x39, - 0xE2, 0xE2, 0xD7, 0x72, 0x1F, 0x4, 0x1E, 0x1F, 0x1F, 0x20, 0x1F, 0x6, 0x6, 0x20, 0x20, 0x20, - 0x1F, 0x1F, 0x25, 0xB, 0x0, 0xB, 0x20, 0x4, 0xB, 0xB, 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, - 0x5, 0x0, 0xFE, 0xFE, 0x0, 0x40, 0xFD, 0xFD, 0xFD, 0x40, 0xB0, 0xBA, 0x41, 0x3A, 0x32, 0x37, - 0x37, 0x97, 0x37, 0xB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, - 0xBD, 0xBD, 0x32, 0x0, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x24, 0x26, 0x2, 0x27, 0xC6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xBD, 0xA3, 0x3A, 0x33, 0xB, 0x6, 0x29, 0x25, 0x4, 0x0, 0x4, 0x6, 0x20, 0x20, 0x20, - 0x25, 0x20, 0x20, 0x20, 0x6, 0x6, 0xD, 0x20, 0x20, 0x25, 0x25, 0x25, 0x20, 0x25, 0x20, 0x25, - 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x20, 0x20, 0x37, 0x3E, 0x30, 0x6, 0x4, 0x4, 0x20, - 0x37, 0x25, 0x20, 0x25, 0x30, 0x20, 0x6, 0x0, 0x20, 0x25, 0x20, 0x20, 0x20, 0x25, 0x22, 0x1F, - 0x25, 0x39, 0x37, 0x1F, 0x4, 0x1F, 0x29, 0x1F, 0x1F, 0x20, 0x1F, 0x1E, 0x1F, 0x20, 0x20, 0x1F, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xB, 0x6, 0x20, 0x20, 0x25, 0x30, 0x25, 0x20, 0x20, 0x37, 0x6C, - 0xA7, 0x6C, 0x3E, 0x72, 0x37, 0x25, 0x6F, 0x6C, 0x39, 0x0, 0x4, 0x4, 0x0, 0x0, 0x4, 0xB, - 0xFE, 0x0, 0x0, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, - 0xBD, 0xBD, 0x4E, 0x2, 0x2, 0x2, 0x2, 0x15, 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x6, 0x97, - 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xB7, 0x94, 0x3A, 0x33, 0xB, 0x4, 0x30, 0x25, 0x4, 0x6, 0x20, 0x6, 0x4, 0x4, 0x1E, - 0x6, 0x6, 0x6, 0x6, 0x4, 0x6, 0x6, 0x4, 0x4, 0x6, 0x1F, 0x1F, 0x4, 0x1F, 0x6, 0x4, - 0x1F, 0x4, 0x6, 0xB, 0x6, 0xB, 0xB, 0x5, 0x20, 0x4, 0x4, 0xB, 0x37, 0x37, 0x1F, 0x25, - 0x25, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x6, 0x1F, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x25, 0x1F, - 0x1E, 0x1E, 0x4, 0x1E, 0x20, 0x1F, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x1F, 0x4, 0x1F, 0x25, 0x29, - 0x29, 0x4, 0x1F, 0x20, 0x37, 0x29, 0x0, 0x4, 0x4, 0x20, 0x20, 0xB, 0x5, 0x4, 0x4, 0x4, - 0x0, 0x4, 0x4, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xBD, 0x2C, - 0xE, 0x31, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, - 0xBD, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x17, 0x15, 0x14, 0x15, 0x15, 0x15, 0x2, 0x2, 0x2, 0x2, - 0x16, 0x99, 0xEF, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xE9, 0xB7, 0xA3, 0x3A, 0x31, 0x7, 0x4, 0x25, 0x32, 0x4, 0x0, 0xD, 0x6, 0x1F, 0x1F, 0x1F, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x25, 0x25, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x1F, 0x25, 0x1F, 0x1F, - 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x20, 0xD, 0x20, 0x6, 0x1F, 0x6, 0xB, 0x20, 0x4, 0xB, - 0x20, 0x6, 0x4, 0x1F, 0x20, 0x1F, 0x1F, 0x6, 0x6, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x1F, 0x20, - 0x1F, 0x1F, 0x22, 0x1F, 0x1E, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x25, 0x29, 0x29, 0x25, 0x20, 0x25, - 0x20, 0x1F, 0x1F, 0x20, 0x1F, 0x6, 0x6, 0x6, 0x4, 0x1F, 0x4, 0x0, 0x0, 0x6, 0x6, 0x6, - 0x6, 0x1F, 0x6, 0x4, 0x1F, 0x1F, 0x1F, 0x20, 0x1F, 0x1F, 0x20, 0xB, 0x5, 0x4, 0x4, 0x4, - 0xB, 0x37, 0x30, 0x4, 0xD7, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xE9, - 0xFD, 0xF0, 0x3C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, - 0xD8, 0xBD, 0xB8, 0xA5, 0x16, 0x14, 0x15, 0x15, 0x14, 0x15, 0x17, 0x15, 0x14, 0x14, 0x2, 0x2, - 0x0, 0x2, 0x2, 0x6, 0x16, 0x4E, 0xEF, 0xFD, 0xEB, 0x40, 0xC6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xE2, 0xB0, 0x40, 0x30, 0xD, 0x0, 0x2, 0x16, 0xD, 0x4, 0x4, 0x1F, 0x20, 0x1F, 0x25, 0x25, - 0x25, 0x30, 0x25, 0x25, 0x25, 0x25, 0x29, 0x29, 0x67, 0x29, 0x29, 0x29, 0x29, 0x30, 0x20, 0xB, - 0x39, 0x6B, 0x37, 0x29, 0x25, 0x37, 0x39, 0x30, 0x20, 0x25, 0x25, 0x20, 0x6, 0x25, 0x1F, 0x1F, - 0x1F, 0x28, 0x22, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0xB, 0x20, 0x25, 0x30, 0x20, 0x20, 0x1F, 0xD, - 0x6, 0x1F, 0x1F, 0x1F, 0x6, 0x1F, 0x25, 0x29, 0x39, 0x37, 0x39, 0x65, 0x29, 0x25, 0x39, 0x71, - 0x96, 0x71, 0x71, 0x71, 0x96, 0x96, 0x29, 0x70, 0x67, 0x70, 0x67, 0xB2, 0x6E, 0x37, 0x71, 0x29, - 0x22, 0x29, 0x29, 0x1F, 0x6, 0x1F, 0x1F, 0x1F, 0x29, 0x1F, 0x6, 0xD, 0x4, 0x4, 0x0, 0x0, - 0x6, 0x29, 0x1F, 0x1F, 0xF4, 0xF4, 0xD8, 0xEB, 0xB0, 0x6F, 0xA3, 0x94, 0x5, 0x4, 0xF4, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xB4, 0x3A, 0xF7, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xEE, 0xD8, 0xBD, 0xBD, 0xB4, 0x16, 0x2, 0x2, 0x2, 0x15, 0x24, 0x15, 0x15, 0x15, 0x14, 0x2, - 0x2, 0x2, 0x2, 0x2, 0x14, 0x2, 0x16, 0xB5, 0x39, 0x2, 0x15, 0xBC, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xFC, 0xD8, 0x72, 0xD6, 0x97, 0x39, 0x39, - 0x25, 0x25, 0x25, 0x20, 0xD, 0x0, 0x0, 0x16, 0x32, 0x25, 0x20, 0x25, 0x29, 0x25, 0x30, 0x32, - 0x30, 0xD, 0xB, 0x30, 0x25, 0x29, 0x29, 0x29, 0x29, 0x29, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x25, 0x25, 0x20, 0x25, 0x37, 0x25, 0x20, 0x20, 0x39, 0x30, 0x25, 0x25, 0xD, 0x29, 0x29, 0x29, - 0x29, 0x29, 0x29, 0x25, 0x25, 0x25, 0x25, 0x30, 0x37, 0x37, 0x37, 0x37, 0x30, 0x37, 0x20, 0x6, - 0x25, 0x39, 0x37, 0x20, 0x25, 0x37, 0x37, 0x39, 0x37, 0x37, 0x6B, 0x71, 0x6B, 0x71, 0x9B, 0xAF, - 0xB5, 0xDB, 0x68, 0x4, 0x39, 0xE6, 0xDB, 0xDA, 0xE6, 0xE6, 0xDB, 0xE8, 0xD5, 0xE6, 0xE8, 0xE6, - 0xE6, 0xE6, 0xE2, 0xD7, 0xD7, 0xB5, 0x25, 0x6, 0xB5, 0xAE, 0x72, 0x72, 0x6F, 0xA7, 0x97, 0x71, - 0x9B, 0xB2, 0xB2, 0x7A, 0xD6, 0xB, 0x0, 0x32, 0x39, 0x2C, 0x16, 0xE, 0x4, 0x4, 0xED, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x3A, 0xE, 0x31, - 0xBD, 0xF0, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0xE, 0x31, 0xAA, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xEE, 0xD8, 0xBD, 0xBD, 0xA9, 0x6, 0x15, 0x2, 0x2, 0x14, 0x2, 0x2, 0x2, 0x14, 0x2, - 0x2, 0x14, 0x14, 0x15, 0x15, 0x15, 0x2, 0x27, 0x27, 0x14, 0x17, 0x4D, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xEA, 0xEE, 0x5, 0x1E, 0xB2, 0x71, 0xB2, 0xB2, - 0xAF, 0x6E, 0x6B, 0x71, 0x6E, 0x25, 0x35, 0xB5, 0xA9, 0x6E, 0x97, 0x97, 0x6E, 0x6C, 0x6F, 0x6C, - 0x30, 0xB, 0xD, 0xA7, 0x97, 0xAF, 0xAF, 0xAF, 0x7A, 0x71, 0x6B, 0x39, 0x39, 0x37, 0x39, 0x39, - 0x37, 0x37, 0x39, 0x39, 0x72, 0x3E, 0xB, 0x4, 0xD6, 0xAE, 0x6E, 0x97, 0x6E, 0x97, 0xB2, 0xB2, - 0xB5, 0xB5, 0xB2, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xB0, 0xB0, 0xA7, 0x6C, 0x39, 0x39, 0x25, 0x6, - 0x37, 0x97, 0x97, 0x97, 0xB5, 0xE2, 0xE2, 0xED, 0xE2, 0xE2, 0xEF, 0xE6, 0xDB, 0xD5, 0xB5, 0xA9, - 0x35, 0x3E, 0xD, 0xFE, 0x6, 0x40, 0x39, 0x6C, 0xAF, 0xA9, 0xAF, 0xB5, 0x40, 0xAF, 0x6E, 0x97, - 0xA9, 0x6E, 0x39, 0x37, 0x32, 0x25, 0xFE, 0x0, 0x37, 0x37, 0x30, 0x20, 0xD, 0x20, 0x20, 0x20, - 0x6, 0x20, 0x29, 0x29, 0x37, 0x4, 0x0, 0x20, 0x20, 0x6, 0x9, 0x4, 0x0, 0xB, 0xEE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xE9, - 0xA3, 0x33, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x41, 0xB6, 0xF9, 0xFD, 0xF8, 0xBD, 0x33, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xB6, 0x35, 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x16, 0x99, 0x16, 0x17, 0x24, 0xB5, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xBD, 0xBB, 0x33, 0x4, 0x1E, 0x4, 0x4, 0x4, - 0x4, 0x0, 0x0, 0x4, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0xB, - 0xB, 0x0, 0xFE, 0xD, 0x4, 0x6, 0x6, 0x6, 0x1F, 0x1F, 0x1E, 0x1E, 0x6, 0x4, 0x5, 0x5, - 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xB, 0xB, 0x4, 0x1F, 0x1F, 0x6, 0x4, 0x4, - 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, - 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, - 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x1E, 0x4, 0x4, 0x4, 0xB, 0x4, 0xB, 0x4, 0x4, - 0x4, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, - 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x0, 0x0, 0xFE, 0x4, 0x3E, 0xFB, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF8, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xB4, 0x32, 0x6, 0x15, 0x15, 0x14, 0x14, 0x15, 0x15, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x2, 0x14, 0x15, 0x16, 0x99, 0xB5, 0x99, 0x6, 0x15, 0x4D, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xB4, 0xAA, 0xAA, 0x3A, 0x30, 0x30, 0x30, 0x20, - 0xD, 0xB, 0x5, 0x0, 0x0, 0x0, 0x4, 0x5, 0x4, 0xFE, 0x4, 0xB, 0x6, 0xB, 0x5, 0x4, - 0x4, 0x4, 0x4, 0x4, 0x5, 0x4, 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, - 0xD, 0xB, 0x6, 0x6, 0x7, 0x5, 0x5, 0xB, 0x5, 0x1F, 0x1E, 0x1F, 0x1F, 0x4, 0x1E, 0x1F, - 0x1F, 0x1F, 0x6, 0x6, 0x1F, 0x1F, 0x1F, 0x6, 0xB, 0x6, 0x1F, 0x1F, 0x4, 0x1E, 0x1E, 0x1F, - 0x1F, 0x1E, 0x1E, 0x1F, 0x1E, 0x4, 0x1E, 0x4, 0x1F, 0x1E, 0x1E, 0x1F, 0x1E, 0x1F, 0x1F, 0x1F, - 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x4, 0x1F, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x4, - 0x4, 0x4, 0x1E, 0x1F, 0x4, 0x6, 0x6, 0x4, 0x6, 0x4, 0x4, 0x5, 0x4, 0x4, 0x0, 0x0, - 0x4, 0x4, 0x4, 0x4, 0x4, 0x25, 0x20, 0x25, 0xD, 0xD, 0x6, 0xB, 0xB6, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0x3F, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xD8, 0xD8, 0xB8, 0xA5, 0x39, 0x35, 0x27, 0x16, 0x15, 0x9, 0x6, - 0x2, 0x14, 0x14, 0x14, 0x2, 0x15, 0x2, 0x14, 0x6, 0x35, 0x99, 0x24, 0x26, 0x24, 0xF2, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xB9, 0xB4, 0xA5, 0xAA, 0xB4, 0x94, 0x41, 0x33, - 0x33, 0x2C, 0xC, 0x0, 0x5, 0x0, 0x0, 0x23, 0x20, 0xD, 0x20, 0x20, 0xCC, 0xCC, 0xBF, 0xCB, - 0xE3, 0xC7, 0xC9, 0xCA, 0xCA, 0xCA, 0xC9, 0xC9, 0xC9, 0xC9, 0x5C, 0xBF, 0xF3, 0xCF, 0xCF, 0xCF, - 0xC4, 0x2F, 0xA, 0x1, 0x1, 0xE, 0x1A, 0x2F, 0x3A, 0x48, 0xA6, 0xAB, 0xAD, 0xC1, 0xC9, 0xCD, - 0xCD, 0xC1, 0xEC, 0x5A, 0xBF, 0xC9, 0xAD, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xAD, 0xCB, 0xC9, 0xC9, - 0xC9, 0xCB, 0xCB, 0xCB, 0xCF, 0xCF, 0xCE, 0xCE, 0xCE, 0xAD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC2, 0xC2, - 0xC2, 0xC2, 0xC2, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xCA, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x0, - 0x4, 0xB, 0xD, 0x4, 0x4, 0xA7, 0x6F, 0x6F, 0xA3, 0xB8, 0xE9, 0xEB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, - 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x38, 0xE9, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, 0xF0, 0xEE, 0xE9, 0xE9, 0xE9, 0xD8, 0xB8, 0xB6, 0xAC, 0xAC, - 0x4E, 0x35, 0x15, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0xD7, 0x27, 0x15, 0x27, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, 0xAA, 0xA5, 0xA3, 0x3B, 0x3A, - 0x31, 0x2E, 0xE, 0xFE, 0x0, 0x5, 0x5, 0x23, 0x30, 0x5, 0x20, 0x25, 0xC9, 0xC9, 0xC9, 0x55, - 0xC9, 0xE3, 0xC3, 0xCA, 0xCA, 0xCA, 0xC9, 0x5C, 0x5A, 0x56, 0x56, 0x56, 0x5C, 0xCE, 0xEC, 0x41, - 0x7, 0x7, 0x9, 0xE, 0x7, 0x12, 0x2D, 0x2F, 0x36, 0x52, 0xAD, 0xAD, 0xAD, 0xBF, 0xCD, 0xCD, - 0xCD, 0xC9, 0xEC, 0x59, 0xCD, 0xCD, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xBF, 0x53, 0x55, 0x52, - 0x36, 0xAD, 0xCE, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0x55, 0xC9, 0xCB, 0xCB, 0xCC, 0xCC, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x7, - 0xB, 0x20, 0x20, 0x4, 0x4, 0xB5, 0xA9, 0xB6, 0xBD, 0xE9, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xBD, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF8, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xF0, 0xE9, 0xD8, - 0xBD, 0xB8, 0xA5, 0x16, 0x6, 0x14, 0x15, 0x16, 0x39, 0xAC, 0xF7, 0xF2, 0xB5, 0xF2, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF5, 0xEE, 0xEF, 0xD8, 0xAC, 0xA3, 0x3C, - 0x33, 0x2C, 0xE, 0x0, 0x0, 0x4, 0x4, 0x30, 0x30, 0x4, 0x4, 0x5, 0xC9, 0xC9, 0x5C, 0x55, - 0x52, 0x52, 0x53, 0x50, 0x4F, 0x4F, 0x4F, 0x5C, 0x5A, 0x56, 0x56, 0x46, 0x1A, 0x3, 0x1, 0x1, - 0x1, 0x1, 0x0, 0x1, 0x1, 0xA, 0x1A, 0x34, 0x3D, 0xAD, 0xAD, 0xAD, 0xAD, 0xCD, 0xCE, 0xCE, - 0xCD, 0xC9, 0xCD, 0x50, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xD0, 0xCC, 0xCA, 0xBF, 0xBF, - 0xC0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, - 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x9, - 0xB, 0x25, 0x25, 0x4, 0x4, 0xEF, 0xD8, 0xE9, 0xEC, 0xF1, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0x3F, 0xFD, 0xFD, 0x2C, 0xEE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEF, 0xEF, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xF8, 0xF5, 0xEE, - 0xE9, 0xD8, 0xD8, 0xB8, 0x40, 0x35, 0x4E, 0x97, 0x4D, 0x4E, 0xBC, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xB6, 0x94, - 0x3A, 0x31, 0x2C, 0x0, 0x0, 0x4, 0x5, 0x37, 0x33, 0x0, 0x0, 0x0, 0x9, 0x1, 0x0, 0x7, - 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x55, 0x5C, 0x56, 0x56, 0x46, 0x0, 0x0, 0x0, 0x1, - 0x1, 0x1, 0x0, 0x0, 0x1, 0x7, 0xA, 0x2F, 0x54, 0xAD, 0xAD, 0xC4, 0xCE, 0xD0, 0xD0, 0xD0, - 0xD0, 0xD0, 0xF1, 0x4F, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x7, - 0x6, 0x25, 0x30, 0xB, 0x4, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, - 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x6, 0x16, 0x35, 0x97, 0xEF, 0xF9, 0xF2, 0xEF, 0xEB, 0xC6, - 0xAC, 0x4D, 0x99, 0x35, 0x9, 0x16, 0x3C, 0x6, 0x2, 0x2, 0x2, 0x6, 0x16, 0x99, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xAA, - 0x3B, 0x33, 0x2C, 0x7, 0x0, 0x0, 0x4, 0x30, 0x30, 0x0, 0x0, 0x0, 0x9, 0x3, 0x1, 0x0, - 0x1, 0x0, 0x1, 0x1, 0x3, 0x1, 0x1, 0x53, 0xBF, 0x56, 0x56, 0x47, 0x1, 0x1, 0x1, 0x3, - 0x3, 0x3, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0xA, 0x1A, 0x2F, 0x2F, 0x2F, 0x2F, 0x3D, 0x3D, - 0xAD, 0xD0, 0xF1, 0x43, 0xD0, 0xD0, 0xC9, 0xBF, 0xBF, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x5A, 0x5A, 0x7, - 0x4, 0x20, 0x20, 0x4, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAC, 0x15, 0x15, 0x15, 0x16, 0xAC, 0xAC, 0x16, 0x6, 0x16, 0x6, - 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x14, 0x17, 0x17, 0x17, 0x2, 0x2, 0x2, 0x99, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, - 0x41, 0x33, 0x31, 0xE, 0x7, 0x0, 0x4, 0x25, 0x25, 0x4, 0x0, 0x4, 0x12, 0x3, 0xA, 0x1, - 0x1, 0x0, 0x0, 0x1, 0x9, 0x1, 0x0, 0x4F, 0xC9, 0x56, 0x56, 0x50, 0x3, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0x8, 0x7, 0x7, 0xA, 0x1A, 0x34, 0x34, 0x36, 0x48, 0x54, 0x53, 0xAB, 0xAD, - 0xAD, 0xAD, 0xA6, 0x1A, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0x54, 0x55, 0xAD, 0xBF, 0xBF, - 0xC9, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0xB, - 0xB, 0x3E, 0x37, 0xB, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, - 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEF, 0x35, 0x27, 0x4D, 0x4D, 0x27, 0x2, 0x14, 0x24, 0x15, 0x2, - 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x17, 0x17, 0x17, 0x15, 0x14, 0x14, 0x15, 0x27, 0xF6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, - 0x6F, 0x38, 0x33, 0xE, 0x7, 0x0, 0x4, 0x20, 0x1F, 0x4, 0x4, 0x4, 0x3, 0x3, 0x1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x4F, 0xC9, 0x56, 0x56, 0x59, 0xA, 0x3, 0x3, 0x3, - 0x1, 0x1, 0x0, 0x1, 0x7, 0xE, 0x2D, 0x2F, 0x3D, 0x54, 0xC4, 0xBF, 0xAD, 0xAD, 0xAD, 0xAD, - 0xAD, 0xBF, 0x36, 0x10, 0x55, 0xAD, 0xAD, 0xAD, 0xAD, 0x4C, 0x18, 0x10, 0x12, 0x36, 0x46, 0x46, - 0x4F, 0x53, 0x55, 0x5A, 0x5C, 0xC9, 0xC9, 0xCA, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, - 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0xB, - 0xD, 0x3E, 0x33, 0xB, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, - 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF8, 0xBD, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF8, 0xF7, 0xF5, 0x99, 0x16, 0x6, 0x2, 0x2, 0x2, 0x17, 0x26, 0x26, 0x26, 0x15, - 0x2, 0x14, 0x24, 0x15, 0x14, 0x15, 0x17, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x26, 0x24, 0xB5, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, - 0x6F, 0x38, 0x31, 0x7, 0x1, 0x0, 0x2, 0xD, 0x6, 0x4, 0x4, 0x4, 0x1A, 0xA, 0x1, 0x0, - 0xE, 0x1, 0x0, 0x1, 0x7, 0x0, 0x0, 0x46, 0xCD, 0x56, 0x56, 0x59, 0x10, 0x3, 0x1, 0x9, - 0x1, 0x3, 0x1, 0x0, 0x1, 0x1, 0x3, 0x1A, 0x1A, 0x36, 0x3D, 0x48, 0x3D, 0x3D, 0x48, 0x54, - 0x55, 0xBF, 0x4C, 0x3, 0x52, 0xBF, 0xAD, 0x1A, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1D, 0x47, - 0x47, 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x55, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x58, 0x5A, 0x6, - 0x0, 0x4, 0x5, 0x4, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF5, 0xEE, 0xE9, 0xB8, 0x24, 0x15, 0x17, 0x15, 0x2, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, - 0x15, 0x14, 0x24, 0x15, 0x14, 0x15, 0x17, 0x15, 0x15, 0x17, 0x26, 0x17, 0x15, 0x26, 0x17, 0x99, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, - 0x6F, 0x38, 0x2C, 0x5, 0x0, 0x0, 0x2, 0xD, 0xD, 0x4, 0x4, 0x4, 0x3, 0xA, 0x1, 0x0, - 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1C, 0xC9, 0x51, 0x56, 0x59, 0x18, 0x3, 0x1, 0x3, - 0x3, 0x1, 0x3, 0x3, 0x3, 0x1A, 0x2F, 0x36, 0x36, 0x4C, 0x54, 0xAD, 0xAD, 0xBF, 0xC9, 0xC9, - 0xC9, 0xC9, 0x54, 0x3, 0x52, 0xC9, 0x34, 0x8, 0x52, 0x0, 0x0, 0x1, 0x3, 0x52, 0x52, 0xBF, - 0xC9, 0xCD, 0xCE, 0xCA, 0xCC, 0xD0, 0xD0, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0x5D, 0x5D, 0xCA, 0x5D, 0xCA, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x5A, 0x5A, 0x6, - 0x4, 0x0, 0x4, 0x4, 0xD, 0xED, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBB, 0xA8, 0xE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xEA, 0xD8, 0xBD, 0x4D, 0x15, 0x26, 0x26, 0x26, 0x14, 0x14, 0x14, 0x15, 0x15, 0x17, 0x26, - 0x2A, 0x24, 0x17, 0x15, 0x15, 0x17, 0x24, 0x15, 0x15, 0x26, 0x26, 0x17, 0x17, 0x26, 0x24, 0xC6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, - 0x41, 0x38, 0x30, 0x4, 0x4, 0x0, 0x0, 0xE, 0xD, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x2F, 0xCE, 0x57, 0x57, 0x5A, 0x1D, 0xA, 0x3, 0x3, - 0x1, 0x3, 0x12, 0x2C, 0xA, 0xA, 0x2E, 0x3D, 0x4C, 0x4C, 0x52, 0xAD, 0xAD, 0xAD, 0xBF, 0xC9, - 0xC9, 0xAD, 0x19, 0x11, 0x11, 0x10, 0x1, 0x3, 0x10, 0x0, 0x0, 0x1, 0x10, 0x19, 0x19, 0x18, - 0x1C, 0xCE, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x57, 0x58, 0x5B, 0x5B, 0x6, - 0x4, 0x37, 0x37, 0x6, 0x4, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xBD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xE9, 0xBD, 0xBD, 0x39, 0x15, 0x26, 0x26, 0x26, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x15, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x26, 0x26, 0x15, 0x14, 0x2, 0x4D, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, - 0x41, 0x38, 0x30, 0x4, 0x4, 0x4, 0x0, 0xE, 0x20, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x1, - 0x0, 0x1, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1A, 0xCA, 0x57, 0x57, 0x51, 0x43, 0x3, 0x3, 0x3, - 0xA, 0xA, 0x3, 0x1A, 0xA, 0xA, 0x8, 0x36, 0x52, 0x4C, 0x4C, 0x52, 0x48, 0x4C, 0x4C, 0x4C, - 0x36, 0x1A, 0x11, 0x10, 0x35, 0x2B, 0x3, 0x3, 0x3, 0xFE, 0x0, 0x1, 0x18, 0x18, 0x19, 0x1B, - 0x1B, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x5B, 0x6, - 0x6, 0x37, 0x25, 0x1F, 0x4, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x41, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xE9, 0xD8, 0xBD, 0xA9, 0x35, 0x35, 0x27, 0x24, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x17, - 0x26, 0x26, 0x15, 0x15, 0x24, 0x15, 0x15, 0x2, 0x15, 0x26, 0x15, 0x17, 0x15, 0x2, 0x4E, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, - 0x41, 0x38, 0xE, 0x4, 0x4, 0x4, 0x4, 0x30, 0x25, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x1, - 0x3, 0x1, 0x3, 0xF, 0xF, 0xF, 0x10, 0x10, 0xC9, 0x5A, 0x57, 0x57, 0x43, 0xF, 0xF, 0x10, - 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, - 0xF, 0xF, 0x10, 0x3, 0x32, 0x16, 0x3, 0x3, 0x3, 0x0, 0x1, 0x3, 0x10, 0x18, 0x18, 0x46, - 0x18, 0xCE, 0xCE, 0xCD, 0xCE, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCC, - 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x1F, - 0x21, 0x71, 0x37, 0x25, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xEA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF8, 0xF5, 0xF0, 0xF0, 0xE9, 0xD8, 0xBD, 0xBC, 0xAC, 0x27, 0x15, 0x17, 0x17, 0x15, 0x15, 0x24, - 0x15, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x2, 0x94, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, - 0x3B, 0x38, 0xE, 0x4, 0x4, 0x4, 0x0, 0x23, 0x20, 0x4, 0x4, 0x4, 0x1, 0x1, 0x0, 0x0, - 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5C, 0x5A, 0x57, 0x5A, 0x46, 0x1, 0xF, 0xF, - 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xF, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x10, 0x12, 0x10, 0x10, 0x12, 0x12, 0x55, - 0x12, 0x1D, 0x46, 0x43, 0x46, 0x4F, 0x46, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x4F, 0x50, 0x50, 0x51, - 0x55, 0x5C, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x1F, - 0x28, 0x71, 0x39, 0x20, 0x4, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x31, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xEA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xD8, 0xBC, 0xA5, 0x39, 0x35, 0x39, 0x4D, 0x4D, - 0x27, 0x2, 0x2, 0x17, 0x17, 0x14, 0x15, 0x14, 0x14, 0x17, 0x17, 0x24, 0x16, 0xB6, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, - 0x3B, 0x38, 0x2C, 0x4, 0x4, 0x0, 0x0, 0x25, 0x20, 0x4, 0x4, 0x4, 0xF, 0xF, 0xF, 0xF, - 0x1, 0x0, 0xFE, 0x1, 0x13, 0x1B, 0x42, 0x43, 0x5C, 0x5C, 0x57, 0x57, 0x56, 0x47, 0x47, 0x47, - 0x1A, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1A, 0x53, 0x53, 0x55, 0xBF, 0xBF, - 0xA, 0x3, 0x10, 0xF, 0x3, 0x10, 0x3, 0xF, 0xF, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x1B, 0xCA, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x1E, - 0x28, 0xB2, 0x37, 0xD, 0x0, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x31, 0xFD, 0xFD, 0xFD, 0x41, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, 0xF0, 0xF0, 0xEE, 0xE9, 0xE9, 0xBD, 0x4E, 0x9, - 0x2, 0x2, 0x15, 0x17, 0x17, 0x15, 0x15, 0x6, 0x9, 0x39, 0x97, 0x99, 0xF2, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, - 0x3F, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x0, 0x25, 0x20, 0x4, 0x4, 0x4, 0x10, 0xF, 0xF, 0x1, - 0x1, 0x1, 0x0, 0x1, 0x1B, 0x44, 0x46, 0x4F, 0x55, 0x5C, 0x57, 0x57, 0x56, 0x47, 0x47, 0x53, - 0x50, 0x19, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, - 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x53, 0xBF, 0xC9, 0xC9, 0xBF, - 0x1D, 0x46, 0x36, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, - 0x1B, 0x34, 0x55, 0xC0, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1E, - 0x28, 0xD5, 0xA7, 0x4, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0xE, - 0xFD, 0xF9, 0x3A, 0xE, 0x33, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, 0xFD, 0xBB, 0xE, 0xF0, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xAC, 0x15, 0x15, - 0x14, 0x14, 0x17, 0x17, 0x17, 0x24, 0x4D, 0xBC, 0xEB, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3F, 0x33, 0x2C, 0x7, 0x4, 0x0, 0x4, 0x25, 0x25, 0x4, 0x4, 0x1E, 0x1, 0x1, 0x1, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x50, 0x5C, 0x51, 0x51, 0x56, 0x10, 0xF, 0xF, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, - 0x1, 0xF, 0xF, 0xF, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x12, 0xBF, 0xBF, 0xC9, 0xBF, - 0xAD, 0xBF, 0xBF, 0xBE, 0xBE, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xA4, 0xA6, 0x53, - 0xA4, 0x52, 0x2D, 0x3, 0x10, 0x10, 0x18, 0x1B, 0x19, 0x1B, 0x1D, 0x50, 0x5A, 0x5B, 0x5A, 0x5B, - 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x4, - 0x28, 0xB5, 0x97, 0x4, 0x4, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF7, - 0xFD, 0x94, 0xE, 0xE, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xE, 0x31, 0xB6, 0xE, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xC6, 0xAC, 0xF2, 0xFD, 0xFD, 0xF7, 0xEA, 0xBD, 0xBD, 0x4D, 0x15, 0x15, - 0x14, 0x2, 0x15, 0x17, 0x15, 0x27, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, - 0x3C, 0x32, 0x2C, 0xB, 0x4, 0x0, 0x4, 0x25, 0x25, 0x4, 0x4, 0x1E, 0x0, 0x0, 0x0, 0x0, - 0x2B, 0x7, 0x2B, 0x0, 0x0, 0x0, 0x1, 0x1, 0x4F, 0x5C, 0x57, 0x51, 0x51, 0x1, 0x1, 0x1, - 0x1, 0x3, 0x3, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0x1, - 0x11, 0x19, 0x11, 0x11, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x52, 0xAD, 0xBF, 0xBF, - 0x1C, 0x3, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, - 0x1, 0x1, 0xF, 0xF, 0x10, 0x10, 0x10, 0x3, 0x2E, 0x10, 0x10, 0x19, 0x19, 0x59, 0x5A, 0x5A, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1E, - 0x28, 0xB5, 0x37, 0xD, 0x4, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, - 0xE9, 0xE, 0xE, 0xB7, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xF5, 0xF5, 0xA9, 0x6, 0x2, 0x9, 0x40, 0xEB, 0xF2, 0xE9, 0xBD, 0xBD, 0xA5, 0x16, 0x15, - 0x17, 0x15, 0x15, 0x17, 0x15, 0x2, 0x27, 0xC6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, - 0x3A, 0x32, 0xE, 0x6, 0x4, 0x0, 0x4, 0x30, 0x30, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x4, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x43, 0x5C, 0x51, 0x51, 0x51, 0x1, 0x0, 0x0, - 0x0, 0x1, 0x0, 0x0, 0x0, 0x7, 0x2B, 0x7, 0x2B, 0x7, 0x4B, 0x9, 0x0, 0x0, 0x1, 0x1, - 0x18, 0x10, 0x10, 0x10, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1A, 0xBF, 0xBF, 0xBF, - 0x1B, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, - 0x0, 0x0, 0x7, 0x27, 0x1, 0x1, 0x1, 0x1, 0x96, 0x12, 0x11, 0x11, 0x19, 0x19, 0x34, 0x36, - 0x36, 0x43, 0x46, 0x46, 0x46, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x28, 0xD5, 0x6E, 0xB, 0x4, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, 0xE, - 0xE, 0xE, 0x3A, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xEA, 0xE9, 0xD8, 0x25, 0x14, 0x2, 0x2, 0x2, 0x9, 0x4E, 0xC6, 0xD8, 0xBD, 0xB7, 0xA5, 0x35, - 0x15, 0x14, 0x17, 0x17, 0x15, 0x14, 0x2, 0x6, 0x4E, 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x33, 0xD, 0x4, 0x4, 0x0, 0x0, 0x32, 0x29, 0x4, 0x4, 0x1E, 0x8, 0x7, 0x7, 0x1, - 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0x0, 0x1, 0x1, 0x43, 0xC0, 0x51, 0x57, 0x51, 0x1A, 0x10, 0x3, - 0x10, 0x10, 0x10, 0x10, 0x3, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, - 0x10, 0x10, 0x10, 0x10, 0x12, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x36, 0xBF, 0xBF, - 0x1A, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x9, 0x16, 0x7, 0xD, - 0x0, 0x0, 0x7, 0x2B, 0x0, 0x0, 0x0, 0x0, 0x2B, 0x9, 0x3, 0x10, 0x19, 0x19, 0xBF, 0xBF, - 0xBF, 0xC0, 0xC0, 0xC0, 0x5A, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x4, - 0x28, 0xB2, 0x6B, 0x20, 0x4, 0x30, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x3A, - 0xE, 0x33, 0xF5, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xB4, 0x41, 0xFD, 0xFD, 0xAA, 0x38, 0xEE, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xD8, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x17, 0x15, 0x2, 0x2, 0x16, 0x39, 0x35, 0x2E, 0x2, 0x2, - 0x14, 0x2, 0x14, 0x17, 0x17, 0x15, 0x15, 0x14, 0x2, 0x39, 0xEF, 0xF2, 0xF2, 0xF6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x32, 0xB, 0x4, 0x4, 0x4, 0x2, 0x25, 0x29, 0x1F, 0x4, 0x6, 0x52, 0x52, 0xA6, 0x46, - 0x52, 0x36, 0x0, 0x0, 0xFE, 0x3, 0x46, 0x4F, 0x50, 0xCA, 0x57, 0x57, 0x56, 0x46, 0x46, 0x1D, - 0x43, 0x46, 0x43, 0x43, 0x43, 0x43, 0x1A, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x10, - 0x10, 0x10, 0x10, 0x1B, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x46, 0x4F, - 0x18, 0x3, 0x10, 0x10, 0x10, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x3, 0x3, 0x1, 0x1, 0x7, - 0x1, 0x0, 0x0, 0x7, 0x1, 0x1, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1, 0x12, 0x19, 0x4F, 0x59, - 0x5A, 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x29, 0x9D, 0x37, 0x25, 0x6, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE9, 0xA3, 0xFD, 0xFD, 0xD8, 0x2C, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, - 0xBD, 0xBD, 0xAC, 0x16, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14, 0x2, 0x0, 0x0, 0x2, 0x2, - 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x17, 0x15, 0x2, 0x15, 0x6, 0x9, 0x16, 0xC6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x3A, 0x2E, 0x5, 0x0, 0x4, 0x4, 0x0, 0xD, 0x20, 0x1F, 0x6, 0x4, 0xBF, 0xAB, 0xC4, 0x52, - 0x55, 0x55, 0x34, 0xF, 0x10, 0x10, 0x10, 0x10, 0x1B, 0xCC, 0x5A, 0x57, 0x57, 0x1B, 0x10, 0x11, - 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, 0x18, 0x10, 0xF, 0x1, 0x1, 0x1, 0x4F, 0x53, - 0x53, 0x52, 0x52, 0x53, 0x1B, 0x3, 0x1, 0x1, 0x1, 0x10, 0x1A, 0x13, 0x18, 0x13, 0x18, 0x18, - 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x13, 0x13, 0x1A, 0x8, 0x8, 0x3, 0x8, 0x8, - 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x12, 0x12, 0x18, - 0x1A, 0x46, 0x50, 0x50, 0x56, 0x57, 0x58, 0x57, 0x56, 0x4F, 0x4F, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x29, 0xD5, 0x71, 0xB, 0xFE, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xB6, 0xA8, 0xFD, 0xEE, 0xE, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x6, 0x14, 0x14, 0x2, 0x2, 0x2, 0x15, 0x24, 0x15, 0x15, 0x14, 0x2, 0x2, - 0x2, 0x2, 0x14, 0x15, 0x15, 0x17, 0x15, 0x17, 0x14, 0x2, 0x2, 0x15, 0x14, 0x2, 0x3C, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0xA3, - 0x33, 0x2C, 0x5, 0x4, 0x6, 0x4, 0xFE, 0x4, 0xB, 0x6, 0x4, 0x4, 0x54, 0x54, 0xAD, 0x54, - 0xC9, 0xC9, 0x4F, 0x46, 0x49, 0x53, 0x53, 0x53, 0x53, 0xCE, 0x5A, 0x57, 0x57, 0x50, 0x49, 0x47, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x3, 0x0, 0x0, 0x53, 0xC9, - 0xC9, 0xC9, 0xC9, 0x5C, 0x1B, 0x1, 0x1, 0x0, 0x0, 0x1, 0x36, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xAD, 0x55, 0xAD, 0x55, 0xBF, 0xBF, - 0xAD, 0xAD, 0xAB, 0x55, 0xAD, 0xAD, 0xAD, 0x55, 0x53, 0x53, 0x53, 0x52, 0x3D, 0x34, 0x12, 0x48, - 0x46, 0x46, 0x36, 0x1D, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x1D, 0x50, 0x5B, 0x5B, 0x5D, 0x5, - 0x29, 0xD6, 0x39, 0x1F, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, 0x2C, 0xBD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, - 0xBD, 0xBD, 0xAC, 0x16, 0x15, 0x14, 0x9, 0x6, 0x6, 0x15, 0x14, 0x2, 0x2, 0x2, 0x14, 0x2, - 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x2, 0x15, 0x15, 0x15, 0x15, 0x16, 0xF2, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, - 0x38, 0x31, 0xE, 0x5, 0x4, 0x4, 0xFE, 0xB, 0x20, 0x5, 0x4, 0x4, 0x0, 0xFE, 0x0, 0x0, - 0x1A, 0x55, 0x55, 0x55, 0xCE, 0xC2, 0xCE, 0xC2, 0xC2, 0xC9, 0x5C, 0x5A, 0x57, 0xC0, 0xC2, 0xC2, - 0xC1, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xCE, 0xAB, 0x1, 0x0, 0x12, 0xBF, - 0xC9, 0xCD, 0xCE, 0xC9, 0x1B, 0x1, 0x0, 0x0, 0x0, 0x1, 0x8, 0xAB, 0xC1, 0xC1, 0xC2, 0xC2, - 0xC1, 0xC1, 0xC1, 0xC2, 0xC2, 0xC2, 0xEC, 0xEC, 0xC2, 0xEA, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, - 0xCD, 0xCD, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xCE, 0xCF, 0xF3, 0xCF, 0xBE, - 0xBE, 0xBE, 0xBE, 0xBE, 0xAB, 0xAB, 0x53, 0x53, 0x47, 0x47, 0x49, 0x53, 0x5B, 0x5B, 0x5D, 0xB, - 0x25, 0xD7, 0x71, 0x1F, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB6, - 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, - 0xD8, 0xE9, 0xBC, 0x27, 0x16, 0x4E, 0xAC, 0xA9, 0x16, 0x14, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x14, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x99, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, - 0x33, 0x31, 0xE, 0xB, 0x4, 0x0, 0x20, 0xA7, 0x37, 0x5, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x3, 0x55, 0xBF, 0xBF, 0xC2, 0xCD, 0xBF, 0xBF, 0x5C, 0x5C, 0x5A, 0x5A, 0x5C, 0xC9, 0x55, - 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0xBF, 0x55, 0x12, 0x1, 0x0, 0x1, 0x1A, - 0xAD, 0x55, 0x55, 0xBF, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x1B, 0x1B, 0x1B, 0x59, - 0xAD, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCD, 0xBF, 0xCD, 0xC9, 0xCD, 0xCD, 0xCE, 0xCD, - 0xCD, 0xCD, 0xBF, 0xBF, 0xBF, 0xC9, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xCD, 0xCF, 0xD0, 0xD0, 0xC2, - 0xC2, 0xC2, 0xCE, 0xCE, 0xC2, 0xCE, 0xCE, 0xC9, 0xBE, 0xBE, 0xBE, 0xC0, 0x5B, 0x5B, 0x5D, 0xC, - 0x1F, 0x9D, 0x96, 0x0, 0x4, 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, - 0xF0, 0xF0, 0xF5, 0xEB, 0xC6, 0xD8, 0xBD, 0xBD, 0xB6, 0x27, 0x14, 0x14, 0x14, 0x15, 0x15, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x2, 0x14, 0x24, 0x15, 0x15, 0x17, 0x26, 0x24, 0x26, 0x26, 0x26, 0x4E, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x38, 0x31, 0x2C, 0x5, 0x4, 0x0, 0x30, 0xB0, 0x37, 0x4, 0x0, 0x4, 0x1A, 0x12, 0x12, 0x3, - 0x1, 0x1, 0x3, 0x1A, 0x4C, 0xC9, 0xCA, 0xCA, 0xC9, 0x5C, 0xC0, 0x5A, 0x5C, 0x5C, 0x5C, 0x55, - 0xBF, 0xBF, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x55, 0xBF, 0x5C, 0x43, 0x1, 0x0, 0x1, 0x3, - 0x12, 0x55, 0xC9, 0xC9, 0x1D, 0x18, 0x18, 0x18, 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x5A, - 0x36, 0x3D, 0x4C, 0x4C, 0x4F, 0x52, 0x52, 0x52, 0xA6, 0x54, 0xC9, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, - 0xCE, 0xCE, 0xBF, 0xC9, 0xC6, 0x9B, 0x9B, 0xB2, 0xAC, 0xC9, 0xCD, 0xCD, 0xCF, 0xD0, 0xD0, 0x5C, - 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5A, 0xC0, 0x5B, 0x5D, 0x5B, 0x5D, 0xC, - 0x25, 0x9D, 0x6B, 0x4, 0x25, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF8, 0xF9, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xE9, 0xE9, 0xBD, 0xA5, 0x4D, 0x97, 0xAC, 0x4E, 0x2E, - 0x9, 0x14, 0x14, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x24, 0x26, 0x24, 0x26, 0x26, 0x17, 0x4E, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x38, 0x31, 0xE, 0x4, 0x6, 0x0, 0x30, 0x72, 0x25, 0x0, 0x0, 0x4, 0xCE, 0xC9, 0xCE, 0xCD, - 0x36, 0x1, 0x1, 0x12, 0x18, 0xBF, 0xC9, 0xC9, 0xC9, 0x5C, 0xC9, 0x5C, 0x5C, 0x5C, 0xC9, 0xAD, - 0xBF, 0xC9, 0xBF, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0xAD, 0xBF, 0xBF, 0xBF, 0x12, 0x0, 0x3, 0x1B, - 0x1, 0x8, 0x55, 0xC9, 0x1D, 0x18, 0x18, 0x18, 0x12, 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x5A, - 0x1A, 0x1A, 0x2D, 0x1A, 0x2F, 0x34, 0x34, 0x34, 0x34, 0x4C, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, - 0xCD, 0xCE, 0xBF, 0xC9, 0xB4, 0x39, 0x39, 0x39, 0x48, 0xBF, 0xBF, 0xC9, 0xCF, 0xD0, 0xCC, 0x5B, - 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xC, - 0x37, 0xE6, 0x9B, 0x25, 0x29, 0x4, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF5, 0xF5, 0xF7, 0xF5, 0xF0, 0xE9, 0xD8, 0xBD, 0xB8, - 0xAC, 0x39, 0x15, 0x14, 0x14, 0x15, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x26, 0x17, 0x99, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x38, 0x32, 0xE, 0x4, 0x4, 0x0, 0x37, 0x6C, 0x20, 0x4, 0x4, 0x4, 0xBF, 0xBF, 0xBF, 0xBF, - 0x55, 0x3, 0x18, 0xC9, 0xCC, 0x5A, 0xC9, 0xC9, 0xC9, 0x5C, 0xC9, 0x5C, 0x5A, 0x5C, 0x5C, 0xBF, - 0xBF, 0xC8, 0xC3, 0xC4, 0xC7, 0xAD, 0xE1, 0x9D, 0xAD, 0xBF, 0xAD, 0xBF, 0x4F, 0x1, 0x1, 0xBF, - 0x1A, 0x0, 0x8, 0xAD, 0x36, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x34, 0x3C, 0x2F, 0x3A, 0x1D, 0x5A, - 0x4C, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCE, 0xCD, 0xCD, 0xC9, 0xCD, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, - 0xC9, 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xCF, 0xD0, 0xBF, 0x53, - 0x56, 0x59, 0x5A, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xC, - 0x4, 0x6D, 0x25, 0x1F, 0x30, 0x0, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, - 0xBD, 0xB8, 0xAC, 0x35, 0x16, 0x14, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x17, 0x26, 0x24, 0xEF, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x31, 0xE, 0x0, 0x4, 0x4, 0x39, 0x71, 0x29, 0x4, 0x0, 0x4, 0x55, 0xBF, 0xBF, 0x5C, - 0x5C, 0x1B, 0x1A, 0x53, 0xCE, 0x5A, 0xC9, 0xBF, 0xBF, 0xBF, 0xCE, 0x5C, 0x5A, 0x5C, 0xAD, 0xAD, - 0xBF, 0xAD, 0x55, 0xAD, 0xC3, 0x55, 0xC6, 0xC5, 0xAD, 0x55, 0xBF, 0xBF, 0xBF, 0xA, 0x1, 0x55, - 0xBF, 0x34, 0x1, 0xA, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xCD, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0x5A, - 0x52, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xCE, 0xCE, 0xCD, 0xCD, 0xC9, 0xC9, - 0xC9, 0xCD, 0xBF, 0xC9, 0xE9, 0xC6, 0xB8, 0xC4, 0xC9, 0xC9, 0xC9, 0xCD, 0xCF, 0xD0, 0xAD, 0x52, - 0x53, 0x53, 0x55, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5, - 0x4, 0x0, 0xB, 0x6, 0x25, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, - 0x41, 0xBD, 0xF9, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, - 0xE9, 0xD8, 0xBD, 0xB7, 0xAA, 0x35, 0x16, 0x17, 0x17, 0x17, 0x15, 0x17, 0x17, 0x17, 0x4D, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, - 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, - 0x3A, 0x33, 0xE, 0x0, 0x4, 0x4, 0x30, 0x39, 0x25, 0x6, 0x4, 0x4, 0x36, 0x36, 0x36, 0x46, - 0x46, 0x46, 0x53, 0xC9, 0xCE, 0x5A, 0x5C, 0xBF, 0xC9, 0xBF, 0xCE, 0x5A, 0x5A, 0x5C, 0x5C, 0xBF, - 0xC9, 0xC9, 0xC9, 0xC4, 0xAC, 0x54, 0xC3, 0xC3, 0xAD, 0x53, 0xBF, 0xBF, 0xBF, 0x34, 0x1, 0x52, - 0xC9, 0xBF, 0x36, 0x1, 0xA, 0x55, 0xBF, 0xBF, 0xBF, 0xC9, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0x59, - 0x52, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xBF, 0xAD, - 0xAD, 0xAD, 0xAD, 0xBF, 0x6B, 0x77, 0x65, 0x65, 0xBF, 0xC9, 0xCE, 0xCF, 0xF3, 0xF3, 0xCA, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x23, - 0x5, 0x25, 0x25, 0xB, 0x4, 0x39, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0xE, 0x38, 0xB4, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xB8, 0xAC, 0x39, 0x24, 0x15, 0x17, 0x17, 0x17, 0x27, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, - 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, - 0x3A, 0x33, 0xE, 0x4, 0x4, 0x0, 0x20, 0x37, 0x1F, 0x1F, 0x4, 0x4, 0x52, 0x53, 0x54, 0x55, - 0x55, 0xAD, 0xAB, 0x4F, 0xC9, 0xC0, 0x55, 0xBF, 0xBF, 0xBF, 0xCE, 0x5C, 0x5A, 0x5C, 0x5C, 0xBF, - 0xBF, 0xBF, 0xBF, 0xC9, 0xC4, 0xAD, 0xC9, 0xAD, 0xBF, 0x54, 0xBF, 0xBF, 0xBF, 0x4F, 0x3, 0x46, - 0xBF, 0xC9, 0xBF, 0x36, 0x1, 0x3, 0x53, 0x55, 0x55, 0xBF, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0x59, - 0x4F, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0x55, 0x55, 0xAD, 0xAD, 0xBF, 0xBF, - 0xBF, 0xC9, 0xBF, 0xBF, 0xAD, 0xAD, 0x55, 0xAD, 0xBF, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5, - 0x30, 0x97, 0x25, 0x20, 0x4, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, - 0xBD, 0x41, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEF, 0xEF, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF7, 0xE9, 0xB6, 0xB8, 0xBD, 0x97, 0x27, 0x15, 0x24, 0x27, 0x4D, 0xF2, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3C, 0x33, 0x2C, 0x5, 0x4, 0x0, 0x20, 0x39, 0x1F, 0x1F, 0x4, 0x4, 0x53, 0x53, 0x53, 0x53, - 0x53, 0x53, 0xBE, 0xC2, 0xC9, 0x5C, 0xBF, 0xBF, 0xAD, 0xBF, 0xCE, 0x5A, 0x5A, 0x5A, 0xBF, 0xAD, - 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0x55, 0x55, 0x55, 0x55, 0x36, 0x1, 0x34, - 0xCD, 0xBF, 0xBF, 0xC9, 0x52, 0x1, 0x3, 0x52, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0x59, - 0x52, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, - 0xC9, 0xC9, 0xC0, 0xC9, 0xC9, 0xBF, 0xC0, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5B, 0x5D, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5, - 0x37, 0xB5, 0x29, 0x20, 0x6, 0x37, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE9, 0xA8, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x6, 0x16, 0x35, 0x99, 0xEF, 0xF9, 0xF2, 0xF2, 0xF2, 0xEB, - 0xB6, 0x97, 0xAC, 0x35, 0x6, 0x16, 0x39, 0x2, 0x2, 0x2, 0x2, 0x6, 0x16, 0x99, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, - 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3C, 0x33, 0x2C, 0xD, 0x0, 0x0, 0x20, 0x39, 0x1F, 0x20, 0x4, 0x4, 0xBF, 0xC9, 0xC9, 0xC9, - 0xBF, 0xC9, 0xBF, 0xBF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xCE, 0x5C, 0x5C, 0x5A, 0x55, 0x46, - 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x12, 0x12, - 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0x53, 0x3, 0x1A, 0x2F, 0x52, 0xAB, 0xBF, 0xBF, 0xBF, 0xC9, 0x55, - 0x52, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCB, 0xCD, 0xCF, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5D, 0xD, - 0x37, 0xD5, 0x6B, 0x20, 0x37, 0xFE, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x15, 0x15, 0x6, 0x16, 0xAC, 0xAC, 0x24, 0x6, 0x16, 0x9, - 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x14, 0x17, 0x26, 0x17, 0x2, 0x2, 0x2, 0x99, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, - 0x3C, 0x2E, 0x2C, 0x20, 0x0, 0x4, 0x20, 0x37, 0x20, 0x20, 0x4, 0x4, 0xD0, 0xC9, 0x36, 0x1A, - 0xA, 0x3, 0x1, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1A, 0xC9, 0x5A, 0x5C, 0x5A, 0x36, 0x34, - 0x34, 0x4F, 0x53, 0x59, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x46, 0x3, - 0xCD, 0xBF, 0xC9, 0xC9, 0xCD, 0xC9, 0x34, 0x43, 0x52, 0xAD, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0x55, - 0x52, 0xC9, 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCD, 0xCF, 0xCA, 0xCA, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x25, 0xD5, 0x71, 0xB, 0x30, 0xFE, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEF, 0x39, 0x27, 0x4D, 0x35, 0x16, 0x2, 0x14, 0x24, 0x24, 0x6, - 0x15, 0x14, 0x14, 0x15, 0x2, 0x2, 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x15, 0x27, 0xF6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, - 0x3C, 0x2E, 0xE, 0x20, 0x0, 0x0, 0xB, 0x37, 0x20, 0xB, 0x4, 0x0, 0xD0, 0x4C, 0x1A, 0x12, - 0xA, 0x8, 0x1A, 0xA, 0x12, 0x12, 0x1A, 0x8, 0x8, 0x1A, 0xBF, 0xC0, 0x5C, 0x5A, 0x36, 0x2F, - 0x2D, 0x2D, 0x2F, 0x36, 0x52, 0x55, 0x59, 0x59, 0x53, 0x53, 0x52, 0x52, 0x53, 0x54, 0x54, 0x1A, - 0xAD, 0xBF, 0xBF, 0xAD, 0xBF, 0xAD, 0x36, 0x4F, 0x55, 0xBF, 0xAD, 0xBF, 0xC4, 0x9D, 0xAD, 0x5A, - 0x52, 0xC9, 0xCD, 0xCB, 0xCB, 0xCF, 0xCB, 0xCD, 0xCE, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x2, - 0x1F, 0xE6, 0x97, 0xB, 0x4, 0x6E, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF8, 0xF7, 0xF5, 0x99, 0x16, 0x6, 0x6, 0x0, 0x2, 0x2, 0x15, 0x15, 0x17, 0x26, - 0x2A, 0x24, 0x17, 0x15, 0x15, 0x17, 0x24, 0x15, 0x15, 0x15, 0x17, 0x15, 0x15, 0x26, 0x15, 0xB5, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, - 0x3A, 0x32, 0x2C, 0x25, 0x0, 0x0, 0x5, 0x37, 0x20, 0xB, 0x4, 0x0, 0x36, 0x1A, 0x12, 0xA, - 0x12, 0x12, 0x8, 0xA, 0x12, 0x2D, 0x12, 0xA, 0x8, 0x2C, 0x55, 0xC9, 0xC0, 0x5C, 0x4C, 0x34, - 0x33, 0x38, 0x38, 0x3B, 0x48, 0x48, 0xA6, 0xAD, 0x55, 0x55, 0x55, 0x55, 0x53, 0x53, 0x53, 0x48, - 0x55, 0xCE, 0xCD, 0xCD, 0xCD, 0xCD, 0x54, 0x55, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xA1, 0xC3, 0x55, - 0x2D, 0x2F, 0x36, 0x3D, 0x3D, 0x3D, 0x48, 0x3D, 0x3D, 0x46, 0x4F, 0x52, 0x52, 0x53, 0x53, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x2, - 0x4, 0xDB, 0x39, 0xB, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF5, 0xEE, 0xE9, 0xB8, 0x24, 0x15, 0x17, 0x26, 0x24, 0x17, 0x17, 0x15, 0x15, 0x15, 0x24, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x17, 0x26, 0x26, 0x14, 0x15, 0x17, 0x24, - 0xE, 0x2C, 0x2C, 0xE, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA5, - 0x3A, 0x31, 0x25, 0x5, 0x4, 0x0, 0xD, 0x37, 0x20, 0x5, 0x4, 0x4, 0x1A, 0x1A, 0xA, 0x8, - 0x8, 0x3, 0x8, 0x3, 0x3, 0x3, 0xA, 0x2C, 0x12, 0x2D, 0x55, 0xC9, 0x5C, 0x5C, 0x52, 0x3B, - 0x3C, 0x33, 0x38, 0x3D, 0xA3, 0xA3, 0xA4, 0xAD, 0xAD, 0xBF, 0xBF, 0xAD, 0x55, 0x59, 0x55, 0x55, - 0x53, 0xC9, 0xCE, 0xCE, 0xCE, 0xCD, 0x54, 0xBF, 0xBF, 0xCF, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xAD, - 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xBF, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x1F, 0xE2, 0x6E, 0xB, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xEA, 0xD8, 0xBD, 0x3A, 0x15, 0x26, 0x26, 0x26, 0x26, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x2, 0x15, 0x25, - 0x2C, 0x3A, 0xAA, 0x3A, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, - 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x30, 0xD, 0x0, 0x0, 0x0, 0xD, 0x39, 0x30, 0x1F, 0x0, 0x4, 0x2F, 0x1A, 0x12, 0x12, - 0x8, 0x8, 0x3, 0x3, 0xE, 0x2C, 0x33, 0x3C, 0x2F, 0x2F, 0x53, 0xCE, 0x5C, 0x5C, 0x52, 0x3A, - 0x2F, 0x3A, 0x48, 0xA6, 0xAD, 0xAD, 0xAD, 0xC4, 0xBF, 0xC9, 0xBF, 0xC4, 0xC4, 0xBF, 0xAD, 0xBF, - 0x59, 0x55, 0xCF, 0xCF, 0xCF, 0xCF, 0x54, 0xBF, 0xBF, 0xC9, 0xCF, 0xCD, 0xCD, 0xCD, 0xCF, 0xCE, - 0xBF, 0xC9, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5A, 0x5B, 0x5D, 0x6, - 0x6, 0xD7, 0x6E, 0x1F, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB6, - 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xE9, 0xBD, 0xBD, 0x2E, 0x2, 0x24, 0x26, 0x26, 0x26, 0x17, 0x17, 0x15, 0x14, 0x14, 0x15, - 0x15, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x15, 0x6, 0x0, 0xD, 0x2E, - 0x2C, 0x2C, 0x2C, 0x41, 0xA8, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x3A, 0x31, 0xB, 0x0, 0x0, 0x0, 0xD, 0x37, 0x37, 0x1F, 0x0, 0x4, 0x1B, 0x1B, 0x1B, 0x18, - 0x12, 0x12, 0x8, 0x3, 0x3, 0x3, 0x8, 0x1A, 0x1A, 0x2C, 0x4F, 0xCE, 0x5A, 0x5A, 0x53, 0x2F, - 0x1A, 0x2F, 0x34, 0x48, 0x52, 0xA6, 0xA6, 0xAB, 0xAD, 0xAD, 0xAD, 0xA6, 0xA6, 0xA6, 0xA6, 0xAD, - 0xAD, 0xBF, 0xAD, 0xC4, 0xC4, 0xAD, 0x4C, 0x55, 0xC9, 0x5A, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xCD, - 0x5A, 0xC9, 0xCE, 0xCE, 0xD0, 0xD0, 0xCD, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x1F, 0xD7, 0x71, 0x6, 0x0, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF5, 0xE9, 0xD8, 0xBD, 0xA3, 0x2C, 0x32, 0x27, 0x24, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, - 0x14, 0x15, 0x17, 0x26, 0x17, 0x14, 0x15, 0x14, 0x14, 0x17, 0x17, 0x26, 0x24, 0x2, 0xE, 0xE, - 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0x41, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x3A, 0x32, 0xB, 0x0, 0x2, 0x0, 0xD, 0x37, 0x25, 0x6, 0x4, 0x4, 0x1B, 0x19, 0x19, 0x10, - 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0xF, 0x10, 0x46, 0xCE, 0x5A, 0x5C, 0x53, 0x1A, - 0x18, 0x1A, 0x3B, 0x3B, 0x3B, 0x3D, 0xA5, 0x52, 0x48, 0x48, 0x52, 0xA4, 0x52, 0xA4, 0xA4, 0xA6, - 0xC4, 0xCD, 0xAD, 0xCD, 0xBF, 0xBF, 0x46, 0xBF, 0x4C, 0x5C, 0xC9, 0xC9, 0xC9, 0xC4, 0xC5, 0xC4, - 0x5A, 0xC9, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x1F, 0xD7, 0x71, 0x6, 0x0, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF8, 0xF5, 0xF0, 0xF0, 0xE9, 0xD8, 0xBB, 0xB6, 0x35, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, - 0x2, 0x14, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, 0x14, 0x24, 0x26, 0x26, 0x17, 0x14, 0x16, 0x41, - 0xAA, 0xA8, 0xA8, 0xA3, 0x33, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x41, 0xBB, 0xF7, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x33, 0x2E, 0x6, 0x0, 0x2, 0x0, 0xD, 0x39, 0x29, 0x1F, 0x4, 0x4, 0x1C, 0x1A, 0x1D, 0x18, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1A, 0x2F, 0x10, 0x11, 0x1D, 0xD0, 0x5C, 0x5C, 0x55, 0x11, - 0x19, 0x19, 0x18, 0x3D, 0x48, 0x3D, 0x48, 0xA6, 0x55, 0xBF, 0xC9, 0xBF, 0xC4, 0xBF, 0xBF, 0xBF, - 0xBF, 0xC1, 0xC4, 0xC9, 0xBF, 0x55, 0x53, 0xBF, 0x4F, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, - 0xBF, 0x52, 0x52, 0x52, 0x53, 0x50, 0x53, 0x53, 0x55, 0x55, 0x55, 0x55, 0x50, 0x53, 0x5A, 0x5C, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x5D, 0x4, - 0x4, 0xB5, 0x6B, 0x1F, 0x4, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x1, 0x7, - 0x7, 0x7, 0xE, 0x2C, 0x2C, 0x7, 0xE, 0x7, 0x0, 0x2C, 0x35, 0x16, 0x16, 0x16, 0x16, 0x15, - 0x2, 0x2, 0x2, 0x17, 0x17, 0x17, 0x15, 0x14, 0x2, 0x14, 0x15, 0x15, 0x15, 0x4D, 0x6F, 0x2C, - 0xE, 0xE, 0x2C, 0x31, 0xAA, 0x3A, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x38, 0x2C, 0x6, 0x0, 0x2, 0x2, 0x25, 0x39, 0x29, 0x1E, 0x4, 0x4, 0x36, 0x1A, 0x55, 0x12, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x2E, 0x1A, 0x10, 0x10, 0x1B, 0xCE, 0x5C, 0x5C, 0x59, 0x18, - 0x19, 0x19, 0x19, 0x19, 0x3D, 0x48, 0x54, 0x54, 0x55, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0x54, 0xAD, - 0x55, 0x55, 0x55, 0xAD, 0x54, 0x3D, 0x59, 0xAD, 0x36, 0xAD, 0x53, 0x1B, 0x1B, 0x1B, 0x1D, 0x1A, - 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x34, 0x53, 0xBF, 0xC2, 0xC0, 0xAB, 0xBF, 0xBF, 0xBF, 0xBF, - 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x4, 0xB2, 0x39, 0x1F, 0x4, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x33, 0xAA, - 0x3C, 0x2C, 0x3A, 0x3C, 0x3A, 0x38, 0x41, 0x2C, 0xE, 0xE, 0xE, 0x31, 0x3F, 0xE, 0x9, 0x2, - 0x2, 0x0, 0x2, 0x17, 0x17, 0x17, 0x15, 0x2, 0x2, 0x6, 0x16, 0x16, 0x2E, 0x33, 0x33, 0x2C, - 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0xAA, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, - 0x38, 0x25, 0x6, 0x0, 0x4, 0x4, 0x25, 0x39, 0x29, 0x1E, 0x4, 0x1E, 0x1C, 0x36, 0x59, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x1A, 0x18, 0x18, 0x10, 0xCE, 0xC0, 0x5A, 0x5A, 0x10, - 0x18, 0x19, 0x19, 0x19, 0x18, 0x19, 0x19, 0x19, 0x19, 0x11, 0x11, 0x19, 0x1A, 0x18, 0x1A, 0x1C, - 0x19, 0x19, 0x19, 0x42, 0x1D, 0x1B, 0x59, 0x12, 0x1A, 0x55, 0x53, 0x1A, 0x1A, 0x1A, 0x53, 0x36, - 0x46, 0x1B, 0x1B, 0x1C, 0x1C, 0x1B, 0x42, 0x4F, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xD, - 0x1F, 0x9B, 0x37, 0x6, 0x4, 0x6F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x38, 0xA3, 0x38, - 0x3F, 0xA3, 0x38, 0x2C, 0x33, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x3F, 0xE, 0x2, 0x15, - 0x17, 0x15, 0x15, 0x17, 0x17, 0x15, 0x9, 0x2E, 0x3A, 0x2C, 0x31, 0x33, 0x31, 0x31, 0x31, 0x2C, - 0x33, 0x38, 0x31, 0xE, 0x2C, 0x41, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, - 0x33, 0x25, 0x6, 0x4, 0x4, 0x0, 0x25, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0xC9, 0xC9, 0x55, 0xC9, - 0xCD, 0xC9, 0xCE, 0xD0, 0xC9, 0xC9, 0xCB, 0xCC, 0xCC, 0xCC, 0x53, 0xC9, 0xC9, 0x5A, 0x1C, 0x10, - 0x10, 0x18, 0x12, 0x10, 0x10, 0x12, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1A, 0x1A, 0x12, 0x12, 0x12, - 0x1A, 0x1B, 0x4F, 0x36, 0x36, 0x36, 0x53, 0x1B, 0xBF, 0x53, 0xBF, 0xAD, 0xBF, 0xBF, 0x55, 0xBF, - 0xC9, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xAD, 0x52, 0x4F, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x6, 0x71, 0x29, 0x4, 0x4, 0xA9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xA3, - 0xE, 0xE, 0x33, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x2C, 0x3F, - 0x41, 0x33, 0x41, 0xAA, 0x2E, 0x16, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0x38, 0x2C, 0x6, 0x14, 0x17, - 0x17, 0x17, 0x17, 0x17, 0x14, 0x15, 0x4E, 0x3A, 0x31, 0x2C, 0x2C, 0xB6, 0x3A, 0x2C, 0x2C, 0x31, - 0x33, 0x33, 0x38, 0xE, 0x2C, 0x3A, 0x33, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, - 0x33, 0xB6, 0xE9, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, - 0x32, 0x25, 0x4, 0x0, 0x6, 0x0, 0x25, 0x37, 0x29, 0x1E, 0x1E, 0x1F, 0xCE, 0xC9, 0x55, 0xC9, - 0xC9, 0xC9, 0xC9, 0xCE, 0xC9, 0xC9, 0xCB, 0xCB, 0xCB, 0xCE, 0xCB, 0xBF, 0xCA, 0x46, 0x43, 0x1B, - 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x1A, 0x55, 0xC9, 0xC9, 0xCA, 0xC9, 0xC9, 0xCE, 0xCE, 0xC9, - 0xC9, 0xC0, 0xC9, 0xC9, 0xC9, 0x46, 0x50, 0x1B, 0xCD, 0xAD, 0x5C, 0xC9, 0xC9, 0xCD, 0x55, 0xC9, - 0xCB, 0xC9, 0xC9, 0xC9, 0xCD, 0xD0, 0xF3, 0xF3, 0xCD, 0xBF, 0xBE, 0xBF, 0xBF, 0xBF, 0xC0, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x4, 0x37, 0x37, 0x1F, 0x4, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xE, - 0xE, 0xE, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF5, 0xF5, 0xE, 0x2C, 0x33, 0x33, - 0xE, 0x3F, 0x3C, 0x25, 0x2, 0x2, 0x2, 0x9, 0x16, 0xE, 0x2C, 0x3F, 0x38, 0x9, 0x2, 0x14, - 0x15, 0x17, 0x17, 0x17, 0x15, 0x2, 0x16, 0x16, 0x2C, 0x2C, 0x2C, 0xB6, 0xE, 0xE, 0x2C, 0x2C, - 0x31, 0x33, 0x33, 0x2C, 0x33, 0xA3, 0x33, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, - 0x33, 0x3A, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x2E, 0x25, 0x6, 0x0, 0x4, 0x0, 0x30, 0x67, 0x29, 0x1E, 0x1E, 0x1F, 0xC9, 0xC9, 0xA6, 0x9D, - 0x9F, 0x9F, 0xA1, 0xA1, 0xA2, 0xA1, 0xA2, 0xA1, 0xC4, 0xC9, 0xCB, 0xBF, 0xC9, 0x1A, 0x5A, 0x55, - 0x18, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0xC9, 0xCC, 0xCC, 0xCB, 0xCB, 0xC9, 0xCB, 0xCE, - 0xCE, 0xCE, 0xCD, 0xCB, 0xBF, 0x50, 0x55, 0x1B, 0xCD, 0xBF, 0x5C, 0xC9, 0xC9, 0xCD, 0x55, 0xC9, - 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xCF, 0xF3, 0xFA, 0xCD, 0x55, 0x55, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5D, 0x6, - 0x4, 0x3E, 0x37, 0x1F, 0x1E, 0xB2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xAA, - 0xF9, 0xFD, 0xEA, 0x3F, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xE9, 0xE9, 0xE, 0x3A, 0x41, 0x41, - 0x2C, 0x2C, 0x2C, 0x16, 0x15, 0x15, 0x14, 0x2, 0x2, 0xD, 0x3C, 0x9, 0x2C, 0x3C, 0x2E, 0x6, - 0x2, 0x2, 0x15, 0x15, 0x15, 0x14, 0x2, 0x2, 0x16, 0x2C, 0x2C, 0xB4, 0x3A, 0x2C, 0x2C, 0x33, - 0x33, 0x31, 0x2C, 0x31, 0x33, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xD8, 0x3A, 0x3A, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0x94, 0x38, - 0x2C, 0x20, 0xD, 0x0, 0x6, 0x0, 0x25, 0x37, 0x29, 0x1F, 0x1E, 0x1F, 0xC9, 0xCE, 0x52, 0x52, - 0x52, 0x52, 0x54, 0x52, 0x54, 0x54, 0x54, 0x55, 0xC9, 0xC9, 0xC9, 0xBF, 0x55, 0x43, 0x5B, 0x50, - 0x43, 0x19, 0x1B, 0x1B, 0x4D, 0x1B, 0x42, 0xAD, 0xCF, 0xD0, 0xD0, 0xD0, 0xD0, 0xC9, 0xCB, 0xCF, - 0xCB, 0xCF, 0xCE, 0xCE, 0x55, 0x59, 0xC9, 0x36, 0xBF, 0x55, 0xBF, 0xC9, 0xC4, 0xCD, 0x55, 0x55, - 0xAD, 0xBF, 0xC9, 0xC9, 0xCD, 0xF3, 0xFA, 0xFA, 0xD0, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x97, 0x37, 0x1F, 0x1E, 0xB2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xBD, 0xE, 0xA3, 0x33, 0xE, - 0x31, 0x3C, 0x2C, 0x2, 0x2, 0x14, 0x2, 0x2, 0x0, 0x2, 0x6, 0x9, 0x6, 0x9, 0x2, 0x0, - 0x0, 0x0, 0x2, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x15, 0x2C, 0xE, 0x38, 0xA3, 0x3C, 0x31, - 0x2C, 0xE, 0x2C, 0x38, 0x33, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE9, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, 0x94, 0x38, - 0x2C, 0x25, 0xD, 0x4, 0x6, 0x0, 0x4, 0x1F, 0x22, 0x1F, 0x1E, 0x1E, 0xBF, 0xCE, 0x54, 0x9D, - 0x9D, 0x9D, 0x9F, 0x9F, 0x9D, 0x9D, 0x9D, 0x9D, 0xC4, 0xCA, 0xC9, 0xBF, 0xAD, 0x50, 0x5A, 0x4F, - 0x1D, 0x1B, 0x1B, 0x1B, 0x36, 0x1B, 0xAD, 0xF3, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xC3, - 0xC9, 0xC9, 0xCB, 0xC9, 0x52, 0x5A, 0xC9, 0x4C, 0xC9, 0xBF, 0x5C, 0xCD, 0xC9, 0xCD, 0x53, 0x53, - 0xBF, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0xCA, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xD, - 0x6, 0x25, 0xB, 0x6, 0x6, 0xAE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0x3C, - 0xF5, 0xFD, 0xFD, 0xFD, 0xEE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xBD, 0xBD, 0xBB, 0xBB, 0xE, 0x33, 0x38, 0x3A, - 0x33, 0x2C, 0x2C, 0x6, 0x15, 0x15, 0x15, 0x15, 0x6, 0x14, 0x2, 0x0, 0x0, 0x0, 0x2, 0x2, - 0x0, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x2, 0x2, 0x6, 0x35, 0xA8, - 0x3C, 0xE, 0x38, 0xB4, 0x41, 0x1, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, - 0xE, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, 0x94, 0x38, - 0x2C, 0x2C, 0xD, 0xB, 0x0, 0x0, 0x4, 0x4, 0x20, 0x1E, 0x4, 0x1E, 0x54, 0xCD, 0x53, 0xAD, - 0xAD, 0x55, 0xAD, 0xAD, 0xAD, 0xBF, 0xC9, 0xC9, 0xC9, 0xCA, 0xC9, 0xBF, 0xCE, 0x4F, 0x46, 0xBF, - 0x55, 0xBF, 0xC9, 0xC9, 0xCA, 0xCE, 0xF3, 0xF3, 0xF3, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC0, 0xCD, - 0xCD, 0xCD, 0xCD, 0xCD, 0x46, 0x5C, 0xC9, 0xBF, 0xCD, 0xBF, 0x5C, 0xC9, 0xC9, 0xCE, 0x55, 0xAD, - 0xBF, 0xBF, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xD, - 0x4, 0x4, 0x4, 0x4, 0x1F, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xE, - 0x2C, 0xFD, 0xFD, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBB, 0xBB, 0x31, 0xA5, 0x31, 0x31, - 0x2C, 0x33, 0x32, 0x14, 0x26, 0x26, 0x26, 0x24, 0x15, 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x15, 0x15, 0x14, 0x16, 0xE, - 0x38, 0xAA, 0x94, 0x31, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, - 0xF7, 0x41, 0xF0, 0x31, 0xEE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x31, 0x2C, 0x20, 0x20, 0xFE, 0x0, 0x20, 0x25, 0x22, 0x1E, 0x1E, 0x1E, 0xC4, 0xCD, 0xBF, 0x96, - 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0x9D, 0x99, 0x99, 0xAD, 0xCA, 0xCA, 0xBF, 0xCC, 0xCB, 0xD0, 0x5C, - 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xF3, 0xF3, 0xCD, 0xBF, 0xC9, 0xCD, 0xCD, 0xC9, 0x55, 0x53, - 0x4F, 0x52, 0x52, 0x52, 0x1D, 0x5A, 0x4F, 0x4F, 0xCE, 0xC9, 0x5C, 0xCD, 0xCE, 0xD0, 0x55, 0x53, - 0x55, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xB, - 0x1F, 0x20, 0xB, 0x6, 0x1F, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, - 0x3F, 0xFD, 0xFD, 0xFD, 0x38, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0x33, 0xA3, 0x38, - 0xE, 0x0, 0xD, 0x15, 0x26, 0x15, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, - 0x14, 0x2, 0x14, 0x14, 0x2, 0x14, 0x24, 0x17, 0x15, 0x2, 0x15, 0x26, 0x26, 0x26, 0x15, 0x9, - 0x9, 0x7, 0x9, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, - 0xE9, 0xD8, 0xF5, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3F, - 0x33, 0x2C, 0x20, 0xD, 0x0, 0x0, 0x37, 0x3E, 0x25, 0x1F, 0xB, 0x4, 0xC4, 0xCD, 0xBF, 0x55, - 0xCB, 0xCE, 0xD0, 0xCE, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0x5C, 0xD0, 0xC9, 0x5C, 0x5C, - 0xC9, 0xCA, 0xCB, 0xCD, 0xC9, 0xCD, 0xCD, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xBF, - 0xC9, 0xC2, 0xC2, 0xC2, 0x46, 0xC0, 0xCE, 0xCE, 0xCE, 0xCD, 0xC9, 0xF3, 0xF3, 0xF3, 0xCE, 0xCE, - 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xB, - 0x1F, 0x29, 0x20, 0x1F, 0x1F, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0x2C, 0xE, 0x31, - 0x38, 0xE, 0x6F, 0x16, 0x15, 0x35, 0x40, 0x3C, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x24, 0x24, 0x24, 0x26, 0x26, 0x26, 0x4D, - 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, - 0xE, 0x41, 0xAA, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xAA, 0x41, - 0x33, 0x30, 0xD, 0x4, 0x7, 0xFE, 0x32, 0x37, 0x20, 0x5, 0x5, 0x4, 0xCF, 0xC4, 0xC9, 0x5C, - 0x55, 0xC9, 0xD0, 0xD0, 0xC9, 0xBF, 0x54, 0x53, 0x53, 0x52, 0x55, 0x53, 0xCE, 0x5C, 0x5A, 0x5C, - 0xC4, 0x52, 0x36, 0x36, 0x52, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCD, 0xD0, 0xD0, 0xD0, - 0xD0, 0xC9, 0xD0, 0xBF, 0x50, 0xCC, 0xF3, 0xD0, 0xD0, 0xD0, 0xC9, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, - 0xCC, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0x1F, 0x37, 0xB, 0x4, 0x4, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0x2C, 0x3C, 0x2C, 0x2C, - 0xE, 0x7, 0xAA, 0xA5, 0xA3, 0x94, 0x94, 0x41, 0x40, 0x16, 0x15, 0x24, 0x15, 0x16, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x17, 0x26, 0x17, 0x39, - 0xEE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xB4, 0x33, 0xE, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, - 0x38, 0x31, 0xD, 0xD, 0x4, 0x4, 0x3E, 0x6B, 0x25, 0x4, 0x4, 0x4, 0xF3, 0xCD, 0xCE, 0x5C, - 0x5C, 0x5C, 0x5A, 0x55, 0x1A, 0x1A, 0x3, 0x3, 0x10, 0x1A, 0x36, 0x36, 0xC9, 0xC9, 0x5C, 0x5A, - 0x48, 0x36, 0x1C, 0x1C, 0x4C, 0x54, 0xBF, 0xCD, 0xCF, 0xD0, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, - 0xD0, 0xC9, 0xD0, 0x52, 0x5A, 0xCC, 0xD0, 0xD0, 0xD0, 0xD0, 0xC0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x37, 0x6, 0xFE, 0x71, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xE, 0x41, 0xA8, 0x3C, - 0x2C, 0xE, 0xBB, 0xB7, 0xB6, 0xAA, 0xA5, 0xA3, 0xA3, 0xA3, 0x40, 0x35, 0x39, 0x40, 0x39, 0x16, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x17, 0x26, 0x26, 0x17, 0x17, 0x26, 0x17, 0x39, - 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x3B, 0x2C, 0xD, 0x20, 0x0, 0x0, 0x3E, 0x6E, 0x25, 0x4, 0x4, 0x4, 0xCE, 0xC9, 0xCE, 0xC9, - 0x5C, 0x5C, 0x5C, 0x4F, 0xA, 0x1A, 0x18, 0x12, 0x1A, 0x1B, 0x36, 0x36, 0xC9, 0xC9, 0x5C, 0x5A, - 0x46, 0x3D, 0x3D, 0x3D, 0x3D, 0x4C, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x55, 0xC9, 0xCD, - 0xCD, 0xBF, 0xCE, 0x46, 0x5A, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0x5C, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x37, 0x20, 0x20, 0xD5, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, - 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xE, 0x2C, 0x2C, 0x41, - 0xA3, 0x2C, 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xB7, 0xB7, 0xBD, 0xB7, 0xB6, 0xB4, 0xAA, 0xA8, 0xA3, - 0x4E, 0x35, 0x9, 0x6, 0x2, 0x14, 0x17, 0x17, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x17, 0x99, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x3A, 0x2C, 0x25, 0x25, 0x0, 0x0, 0x3E, 0x6E, 0x25, 0x1E, 0x4, 0x4, 0xC9, 0xC9, 0xC9, 0xD0, - 0x5C, 0x5C, 0x50, 0x1A, 0x3, 0xA, 0x12, 0x18, 0x1C, 0x1C, 0x36, 0x36, 0xBF, 0xC9, 0x5C, 0x5A, - 0x46, 0x3D, 0x4C, 0x48, 0x52, 0x52, 0x52, 0x52, 0x52, 0x54, 0x53, 0x55, 0x54, 0x55, 0xAD, 0x55, - 0xAD, 0xAD, 0xC1, 0x1D, 0x5A, 0xBF, 0xC9, 0xC9, 0xD0, 0xD0, 0x5C, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x6, - 0x1F, 0x39, 0x20, 0x4, 0x6, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, - 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xE9, 0x2C, 0x31, 0x2C, 0x2C, - 0x2C, 0xE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xF5, 0xF5, 0xF7, 0xF5, 0xF0, 0xEE, 0xE9, 0xBD, 0xB7, - 0xB6, 0xB4, 0xA5, 0x35, 0x9, 0x6, 0x15, 0x17, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x24, 0xEB, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, - 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, - 0x38, 0x2C, 0x25, 0x20, 0x0, 0x0, 0x6C, 0x39, 0x20, 0x1E, 0x4, 0x4, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x36, 0x12, 0x3, 0xA, 0x3, 0x18, 0x12, 0x1A, 0x34, 0x36, 0x36, 0x55, 0xC9, 0x5C, 0x5A, - 0x46, 0x36, 0x3D, 0x48, 0x52, 0xAB, 0x55, 0xBF, 0xBF, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, - 0xAD, 0xAD, 0xBF, 0x1D, 0x5A, 0xBF, 0xC9, 0xBF, 0xCD, 0xC9, 0xBF, 0xCE, 0xCD, 0xCC, 0xCC, 0xCC, - 0xCC, 0xD0, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x6B, 0x25, 0x6, 0x0, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEE, 0x2C, 0xE, 0x2C, 0x2C, - 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, - 0xE9, 0xD8, 0xBD, 0xB8, 0xAA, 0x35, 0x16, 0x15, 0x17, 0x17, 0x15, 0x15, 0x17, 0x26, 0x4D, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, - 0x33, 0x30, 0xD, 0x5, 0x4, 0x4, 0x6C, 0x39, 0x20, 0x1E, 0x4, 0x1E, 0xE, 0x7, 0x3, 0x1, - 0x3, 0x3, 0xA, 0xA, 0x1A, 0xA, 0x18, 0x1A, 0x1B, 0x34, 0x36, 0x36, 0x53, 0xC9, 0x5C, 0x5A, - 0x4F, 0x3D, 0x3D, 0x3D, 0x52, 0xA6, 0x54, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, - 0xAD, 0xAD, 0xAB, 0x46, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0xAD, 0x55, 0xBF, 0xBF, 0xC9, 0xCE, 0xCE, - 0xCE, 0xC9, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xC0, 0xC0, 0xC0, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x39, 0x20, 0x25, 0x1F, 0x39, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x31, - 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xBB, 0xAC, 0x39, 0x24, 0x15, 0x17, 0x17, 0x17, 0x27, 0xF6, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, - 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, - 0x33, 0x25, 0x6, 0x4, 0x4, 0x4, 0x37, 0x37, 0x20, 0x1F, 0x4, 0x1E, 0x2C, 0x2C, 0x8, 0x3, - 0x3, 0x3, 0x3, 0x3, 0x3, 0xA, 0x1A, 0x1A, 0x2F, 0x36, 0x36, 0x34, 0x52, 0xC9, 0x5C, 0x59, - 0x34, 0x36, 0x3B, 0x3D, 0x36, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x52, 0xAB, 0xAD, 0xBF, 0x36, - 0x8, 0xAD, 0x3D, 0x50, 0xBF, 0xAD, 0xAD, 0xBF, 0xBF, 0xAD, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, - 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC2, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, - 0x1F, 0x97, 0x25, 0x6, 0x6, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x2C, - 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xE9, 0xD8, 0xBD, 0xB8, 0x97, 0x4D, 0x4D, 0x99, 0xF6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, 0x3A, - 0x32, 0x25, 0x6, 0x4, 0xB, 0x4, 0x30, 0x25, 0x25, 0x1F, 0x4, 0x1E, 0x2C, 0x2F, 0xA, 0xA, - 0x3, 0xA, 0xA, 0x1A, 0x12, 0x12, 0x1A, 0x1A, 0x2F, 0x36, 0x2F, 0x34, 0x4F, 0xC9, 0x5C, 0x50, - 0x1A, 0x3B, 0x3D, 0x3D, 0x3D, 0x48, 0x54, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xA6, 0x1, - 0x8, 0x52, 0x2F, 0x56, 0xAD, 0xAD, 0xAD, 0xBF, 0xCD, 0xC1, 0xBF, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, - 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, - 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x6, 0xB5, 0x6E, 0x6, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x31, 0x2C, 0x2C, - 0x3F, 0x7, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF5, 0xF0, 0xF0, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x30, 0x25, 0x4, 0x4, 0x5, 0x4, 0x30, 0x30, 0x20, 0xB, 0x4, 0x4, 0x1A, 0xA, 0xA, 0x1A, - 0x1C, 0x36, 0x36, 0x36, 0x1A, 0x1A, 0xA, 0x3, 0x7, 0xA, 0xA, 0x2F, 0x3D, 0xCE, 0x5A, 0x1D, - 0x12, 0x3B, 0x3D, 0x3D, 0x48, 0x54, 0xAD, 0xBF, 0xBF, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, 0x1, 0x8, - 0x8, 0x36, 0x12, 0x57, 0xBF, 0xBF, 0xBF, 0xCD, 0xCD, 0xC1, 0x55, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, - 0xCE, 0xF3, 0xF3, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x1E, 0xA7, 0x3E, 0x1F, 0x1F, 0x20, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x3A, - 0xAA, 0xE, 0x33, 0xB6, 0x41, 0x3A, 0x3A, 0x31, 0x2C, 0x2C, 0x31, 0x33, 0x2C, 0x1, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, 0x3A, - 0x32, 0x30, 0x5, 0x4, 0x5, 0x4, 0x25, 0x25, 0x20, 0x1F, 0x4, 0x4, 0x2F, 0x12, 0x12, 0x1A, - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1C, 0x34, 0x2F, 0x1A, 0x12, 0x2F, 0x2D, 0x36, 0xCE, 0x5A, 0xA, - 0x8, 0x3B, 0x3D, 0x3D, 0x52, 0xAD, 0xAD, 0xAD, 0xAB, 0xA6, 0xA6, 0xA6, 0x52, 0x7, 0x3, 0x3, - 0x3, 0x7, 0x8, 0x43, 0x3D, 0x36, 0x36, 0x3D, 0x3D, 0x3D, 0x36, 0x34, 0x34, 0x34, 0x34, 0x36, - 0xCD, 0xC9, 0xCD, 0xCE, 0xD0, 0xCE, 0xCE, 0xCD, 0xCE, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x4, 0xAF, 0x39, 0xB, 0x4, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0x31, 0x41, 0x31, 0xA8, - 0x2C, 0x2C, 0xE, 0x3A, 0x3A, 0x38, 0x3A, 0x31, 0x2C, 0x2C, 0x31, 0x33, 0x38, 0x2C, 0x0, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, - 0x33, 0x2C, 0xB, 0x4, 0x4, 0x4, 0x30, 0x25, 0x20, 0xB, 0x0, 0x4, 0x1A, 0x1A, 0x1A, 0x12, - 0xA, 0x12, 0x1A, 0x36, 0x36, 0x34, 0x34, 0x2F, 0x1A, 0x1A, 0x1A, 0x2F, 0x2F, 0xCE, 0x50, 0x0, - 0x7, 0x3D, 0x3B, 0x3D, 0x48, 0x52, 0xAB, 0xA6, 0x3, 0xF, 0x1, 0x1, 0x12, 0x1D, 0x18, 0x3, - 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x1, 0x0, 0xF, 0xF, 0xF, 0x10, 0x10, 0x19, - 0xBF, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x50, 0x51, 0x5A, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x4, 0xB2, 0x6B, 0xD, 0x4, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, - 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEE, 0x41, 0x1, 0xA5, 0x3A, - 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x33, 0xE, 0x2C, 0x2C, 0x2C, 0x33, 0x38, 0x31, 0xE, 0x7, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, - 0x33, 0x2C, 0xE, 0x5, 0x4, 0x0, 0x30, 0x25, 0x20, 0xB, 0x0, 0x4, 0x2F, 0x1C, 0x1C, 0x1C, - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x2F, 0x34, 0x2F, 0x34, 0x34, 0x34, 0x34, 0x2F, 0xC9, 0x43, 0x0, - 0x1, 0x3D, 0x36, 0x3A, 0x36, 0x3D, 0x48, 0xA, 0x1, 0x1, 0x0, 0xFE, 0x52, 0x55, 0x10, 0x0, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x1, 0xF, 0x10, 0x11, 0x43, - 0xBF, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x4F, 0x0, 0x3, 0x10, 0x10, 0x10, 0x1B, 0x42, 0x43, 0x43, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x4, 0xD5, 0x97, 0xB, 0x4, 0xE6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, - 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEA, 0xF7, 0x94, 0x0, 0x2C, - 0x2C, 0x2C, 0xE, 0x2C, 0x31, 0x31, 0x2C, 0x2C, 0x2C, 0x31, 0x31, 0x31, 0x2C, 0x2C, 0x3C, 0x33, - 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x33, 0x2C, 0x2C, 0xB, 0x4, 0x0, 0x30, 0x25, 0x20, 0x5, 0x0, 0x4, 0xA, 0x3, 0x3, 0x1, - 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, - 0x1, 0xF, 0xF, 0xF, 0xF, 0x1, 0x0, 0x1, 0x0, 0xFE, 0xFE, 0x0, 0x52, 0x59, 0x1, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x10, 0x42, - 0x36, 0x53, 0x54, 0x1B, 0x52, 0x19, 0x43, 0x1B, 0x1B, 0x1D, 0x1D, 0x43, 0x1D, 0x1D, 0x1B, 0x1D, - 0x1B, 0x1D, 0x1B, 0x1B, 0x1A, 0x1, 0x1, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x3, 0x3, 0x5B, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x1E, 0xD7, 0x97, 0x6, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xE9, 0xEA, 0xEE, 0x3F, 0xE, - 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x7, 0xA8, 0xA8, 0xB4, 0x41, 0x31, 0xB4, 0x38, - 0x7, 0x0, 0x9, 0xE, 0xE, 0xE, 0x31, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0xE, 0x2C, 0xE, - 0xE, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x38, 0x31, 0x2C, 0x5, 0x4, 0x4, 0x30, 0x37, 0x20, 0x5, 0x4, 0x4, 0x8, 0x10, 0x3, 0x1, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0xF, 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x52, 0x50, 0x0, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xA, 0x1A, 0x1A, 0x1A, 0x12, 0x12, 0x1B, 0x1D, - 0xF, 0x10, 0x1, 0xF, 0x1, 0x10, 0x1, 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x46, 0x46, 0x50, - 0x50, 0x59, 0x56, 0x51, 0x57, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x1F, 0xDB, 0xA9, 0x4, 0x4, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, - 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xD8, 0xE9, 0x3F, 0x0, 0x2C, 0x2C, 0x38, 0xA3, 0x33, 0x3F, - 0xA8, 0x31, 0xE, 0xE, 0xE, 0x41, 0x3F, 0x2C, 0x33, 0x31, 0x2C, 0x38, 0x38, 0x2C, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, - 0x38, 0x31, 0xE, 0x4, 0x5, 0x4, 0x20, 0x30, 0x20, 0x6, 0x4, 0x4, 0x53, 0x53, 0x50, 0x47, - 0x49, 0x45, 0x1B, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x52, 0x46, 0x0, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x12, 0x53, 0x54, 0x54, 0xB9, 0xAD, 0x53, 0x1B, - 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x3, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x12, 0x47, 0x49, 0x49, 0x49, 0x47, 0x49, 0x46, - 0x42, 0x44, 0x42, 0x42, 0x1B, 0x1D, 0x1B, 0x42, 0x1D, 0x50, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x1F, 0xDB, 0x97, 0x4, 0x4, 0xD5, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, - 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, 0x41, 0x0, 0x2C, 0x2C, 0x33, 0xAA, 0x7, - 0x7, 0x38, 0xA3, 0x38, 0x33, 0xA3, 0x2C, 0x33, 0x33, 0x31, 0x3A, 0xB4, 0xAA, 0x33, 0x31, 0x2C, - 0x2C, 0x33, 0x33, 0x33, 0x2C, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x38, 0x31, 0xE, 0x0, 0x7, 0x4, 0xD, 0x25, 0x25, 0xB, 0x4, 0x4, 0xEC, 0xEC, 0xC2, 0xC1, - 0xC1, 0xC1, 0xC1, 0xC1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xA, 0x52, 0x42, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x52, 0x54, 0xAD, 0xA1, 0x99, 0x53, 0x1A, - 0xFE, 0xFE, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xAB, 0xBE, 0xBE, 0xBE, 0xC1, 0xC2, - 0xC2, 0xC2, 0xCE, 0xCE, 0xC0, 0xC0, 0xC0, 0xC2, 0xC0, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x1F, 0xD5, 0x97, 0xB, 0x6, 0x6B, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, - 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xE9, 0x41, 0x0, 0x2C, 0xE, 0xAA, 0x7, - 0x7, 0xE, 0x2C, 0x41, 0xA3, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0xAA, 0xAA, 0x94, 0x3A, 0xA3, 0x33, - 0x3F, 0x31, 0x33, 0x33, 0x2C, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, - 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x38, 0x33, 0xE, 0x0, 0x4, 0x4, 0x20, 0x30, 0x29, 0x6, 0x4, 0x4, 0x48, 0x3D, 0x3D, 0x3D, - 0x3B, 0x3B, 0x3A, 0x3B, 0x7, 0x0, 0x1, 0x0, 0x1, 0x3, 0x8, 0xA, 0xA, 0x1, 0xFE, 0xFE, - 0x0, 0x12, 0x1A, 0x2D, 0x12, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1A, 0x53, 0x1B, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x34, 0x54, 0xAD, 0xE1, 0xAD, 0x53, 0x44, - 0x1B, 0x7, 0x0, 0x3, 0x0, 0x1, 0x1, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xBE, 0xC2, 0xC2, 0xC2, 0x5D, - 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5A, 0x6, - 0x6, 0xAF, 0x97, 0x20, 0x1F, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, - 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, - 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xE9, 0x3F, 0x0, 0x2C, 0x3A, 0x7, - 0x7, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x33, 0x3A, 0x38, 0x33, 0x38, 0x31, 0x94, 0x2C, 0x3A, - 0xB6, 0x33, 0x38, 0xA3, 0xA3, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, - 0x3A, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x30, 0x29, 0x25, 0x1E, 0x4, 0x4, 0x2F, 0x1A, 0xA, 0x3, - 0x3, 0xA, 0x3, 0x1, 0x3, 0xA, 0x1A, 0x12, 0x2F, 0x34, 0x34, 0x34, 0x36, 0xA, 0xFE, 0x0, - 0x0, 0x1A, 0x4C, 0x48, 0x2F, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1B, 0x53, 0x10, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x53, 0x55, 0xA6, 0x54, 0x53, 0x53, - 0xB9, 0xC9, 0xBF, 0x46, 0xBF, 0x43, 0x55, 0x59, 0x5A, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x50, 0x3, 0x1, 0x1, 0x0, 0x1, 0x36, 0xC2, 0xC2, 0xCE, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x1F, - 0x1E, 0x71, 0x39, 0x25, 0x25, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, - 0xF7, 0xF7, 0xF5, 0xEE, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xD8, 0x3A, 0xE, 0x2C, 0x9, - 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, - 0x31, 0x2C, 0x2C, 0xE, 0xE, 0x31, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, - 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, - 0x3B, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x20, 0x29, 0x25, 0x1F, 0x4, 0x4, 0xA, 0x3, 0x3, 0x3, - 0x1, 0x1, 0x1, 0x3, 0x7, 0x7, 0x7, 0x3, 0xA, 0xA, 0x3, 0xA, 0xA, 0x7, 0xFE, 0x0, - 0x0, 0x3, 0xA, 0x8, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1C, 0x53, 0x1, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x36, 0xAD, 0x9D, 0x54, 0x53, 0xA, - 0x4C, 0xCC, 0xCA, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x50, 0x50, 0x50, 0x50, 0x56, 0x57, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x1F, - 0x1F, 0x71, 0x39, 0xD, 0x39, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, - 0x3A, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x4, 0x1F, 0x25, 0x20, 0x6, 0x4, 0x1, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x2A, 0x16, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, - 0x1, 0x1, 0x1, 0x1, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0xFE, 0x36, 0x53, 0x1, 0xFE, 0xFE, - 0x24, 0x1F, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x53, 0x55, 0xAD, 0x50, 0x1B, - 0x1A, 0x4F, 0x50, 0x50, 0x50, 0x53, 0x51, 0x50, 0x51, 0x51, 0x50, 0x50, 0x50, 0x50, 0x4F, 0x50, - 0x50, 0x50, 0x4F, 0x46, 0x46, 0x47, 0x46, 0x46, 0x42, 0x42, 0x42, 0x50, 0x5A, 0x5B, 0x58, 0x58, - 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x5A, 0x5B, 0x5B, 0x5B, 0x58, 0x6, - 0x4, 0x97, 0x3E, 0x6, 0x6B, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x7, - 0x9, 0x7, 0x31, 0x1, 0x7, 0xE, 0x2C, 0x9, 0x7, 0x7, 0x7, 0x7, 0xE, 0x7, 0x7, 0x7, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x2C, 0x31, 0xE, 0x7, 0x7, 0x7, 0x7, 0x9, 0x9, - 0x7, 0x7, 0x7, 0x7, 0x0, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x32, 0xD, 0x0, 0x5, 0x0, 0x4, 0x6, 0x25, 0x20, 0x6, 0x4, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x2B, 0x95, 0xD, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, - 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0xFE, 0x0, 0x4F, 0x53, 0x0, 0xFE, 0xFE, - 0x2B, 0x2A, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x4C, 0x53, 0x54, 0x4F, 0xBF, - 0xB9, 0x3, 0x1, 0xF, 0xF, 0x10, 0x10, 0xF, 0x10, 0xF, 0xF, 0xF, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x19, 0x43, 0x57, 0x58, - 0x58, 0x5A, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x29, 0xB2, 0x6E, 0x1F, 0x39, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x94, 0x0, 0xE, - 0xB4, 0x3A, 0x41, 0xE, 0x2C, 0x9, 0x7, 0x33, 0xB4, 0x41, 0x2C, 0x94, 0xB4, 0x3C, 0x33, 0x2C, - 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0x31, 0x38, 0xA8, 0xAA, 0x33, 0xB4, 0xE, 0x41, 0x33, 0x33, 0x33, - 0x3A, 0xE, 0x2C, 0x2C, 0xAA, 0x7, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x3A, 0x2C, 0x7, 0x0, 0x5, 0x0, 0x25, 0x29, 0x25, 0x1F, 0x4, 0x4, 0x0, 0x0, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x2, 0x4B, 0x27, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x0, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0x0, 0x4F, 0x4F, 0x0, 0xFE, 0x0, - 0x95, 0x2B, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x55, 0x55, 0x53, 0xA, - 0x1, 0xF, 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0x3, - 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0x11, 0x11, 0x42, 0x50, - 0x47, 0x1A, 0x52, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x1F, 0x25, 0x6, 0x1F, 0x37, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x0, 0x2C, 0xE, - 0xE, 0xA3, 0xA8, 0x3C, 0x41, 0xA8, 0x31, 0xE, 0xE, 0x3A, 0xAA, 0x41, 0x2C, 0x2C, 0xE, 0x2C, - 0x2C, 0xE, 0x2C, 0x33, 0x33, 0x33, 0x3C, 0x31, 0x38, 0x3C, 0x33, 0xE, 0xB6, 0x3F, 0x33, 0x3F, - 0xB7, 0x3F, 0x2C, 0x3F, 0x41, 0x31, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x33, 0x2C, 0x6, 0x0, 0x5, 0x0, 0x39, 0x6E, 0x29, 0x1F, 0x4, 0x4, 0xFE, 0x6, 0x2A, 0x0, - 0x2A, 0x16, 0x1F, 0x2A, 0x0, 0x24, 0x4B, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, - 0x1, 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x3, 0x53, 0x46, 0x0, 0xFE, 0x0, - 0x95, 0x25, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x4F, 0x55, 0x53, 0x3, - 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xA, 0x4D, 0x2E, 0x0, 0x3C, 0x4D, 0xA, 0x35, 0x4D, 0x2E, 0x0, 0x1, 0x3, 0x18, 0x18, 0x12, - 0x44, 0x4A, 0xF1, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x1F, - 0x1E, 0x6, 0x4, 0x1F, 0x37, 0x25, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x2C, - 0xE, 0x38, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x31, 0x3F, - 0xA5, 0x2C, 0xE, 0xE, 0xE, 0x7, 0x3A, 0x3F, 0x9, 0xE, 0x2C, 0x2C, 0x2C, 0x31, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x31, 0x33, 0x31, 0x38, 0x2C, 0x2C, 0x31, 0x3C, 0x41, 0xAA, 0x2C, 0x31, 0x2C, - 0x2C, 0x3A, 0xAA, 0xAA, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x33, 0x2C, 0x6, 0x0, 0x5, 0x0, 0x39, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0x27, 0x4B, 0x0, - 0x9, 0x7, 0x1, 0x7, 0x0, 0x1, 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, - 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x3, 0x52, 0x43, 0x0, 0xFE, 0x0, - 0x24, 0x6, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1A, 0x55, 0x50, 0x3, - 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x18, 0x1B, - 0x59, 0x5D, 0x5B, 0x58, 0x50, 0x1D, 0x56, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x1F, 0x39, 0x25, 0x1F, 0x37, 0x29, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, - 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0x9, 0x3A, 0x33, - 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x94, 0x2C, 0x7, 0xE, 0xE, 0x2C, 0x31, 0x2C, 0x2C, - 0x2C, 0xE, 0xE, 0x3C, 0x3C, 0x38, 0x33, 0xE, 0x2C, 0x2C, 0x2C, 0x41, 0x31, 0x2C, 0x2C, 0xE, - 0x2C, 0x31, 0xA3, 0x2C, 0x31, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, - 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x3A, 0x2E, 0xB, 0x0, 0xB, 0x0, 0x37, 0x35, 0x25, 0x1F, 0x6, 0x1E, 0xFE, 0x2, 0x2, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x12, 0x53, 0x1B, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x53, 0x4F, 0x3, - 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x10, 0x10, - 0x1, 0x3, 0x1B, 0x46, 0x3, 0x10, 0x43, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, - 0x4, 0x6E, 0x39, 0x4, 0x6B, 0x29, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xBD, - 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xE9, 0xE9, 0xE, 0x3F, 0x38, - 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x2C, 0x2C, 0x33, 0x3A, 0x7, 0x7, 0x7, 0xE, 0x31, 0xA3, 0x31, - 0x2C, 0xE, 0xE, 0xAA, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x33, 0x2C, 0xE, 0x2C, - 0x2C, 0xA3, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, - 0xEA, 0xFD, 0x3C, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, 0x94, - 0x38, 0x2E, 0xE, 0x0, 0xB, 0x4, 0x37, 0x37, 0x29, 0x1F, 0x4, 0x4, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x2B, 0x2A, 0x0, - 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x1A, 0x55, 0x12, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1B, 0x53, 0x1B, - 0x1A, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x4F, 0x4F, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x36, 0x36, 0x46, 0x36, 0x34, 0x34, 0x12, - 0x12, 0x34, 0x34, 0x34, 0x49, 0xBF, 0xC0, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x6, - 0x4, 0x6C, 0x37, 0x1E, 0x71, 0x37, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x33, - 0xFD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xE, 0xA3, 0x31, - 0x2C, 0x33, 0x38, 0x33, 0x38, 0x2C, 0x2C, 0x33, 0xA3, 0xE, 0x7, 0x7, 0x7, 0x3C, 0x31, 0xA8, - 0xA8, 0xE, 0x38, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x38, 0x3A, 0x2C, 0x2C, 0x2C, - 0x41, 0xB7, 0xA3, 0x31, 0x2C, 0x38, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, - 0xFD, 0xBD, 0x38, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x31, 0x2C, 0x0, 0x6, 0x4, 0x37, 0x39, 0x37, 0x1F, 0x4, 0x4, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x6, 0x4B, 0x25, 0xFE, - 0xFE, 0xFE, 0x0, 0x1, 0x1, 0xF, 0x1, 0xF, 0x0, 0x0, 0x1D, 0x55, 0xE, 0x2B, 0x25, 0x0, - 0x1, 0x1, 0x1, 0xF, 0x1, 0xF, 0xF, 0x10, 0x11, 0x11, 0x11, 0x19, 0x19, 0x19, 0x50, 0x5C, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, - 0xCC, 0xD0, 0xCC, 0xCC, 0xCE, 0xCC, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xCC, 0xCC, 0xF3, 0xCF, - 0x52, 0xAB, 0xC1, 0xB9, 0xAB, 0xA3, 0x1A, 0x1A, 0x1B, 0x5A, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x1F, - 0x4, 0x6E, 0x37, 0x1F, 0x9B, 0x39, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xE, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, 0xBB, 0xBB, 0x2C, 0x3C, 0xE, - 0x2C, 0x33, 0x33, 0x33, 0x31, 0x31, 0x33, 0x94, 0xA3, 0xE, 0x2C, 0xE, 0xA3, 0x2C, 0x7, 0x0, - 0xE, 0x3F, 0xAA, 0x31, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0x38, 0x31, 0x3C, 0xAA, 0xA3, 0x33, 0x33, - 0xA3, 0xE, 0x3C, 0xAA, 0xA3, 0x38, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xF0, 0x33, 0xEA, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, - 0x3C, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x39, 0x39, 0x29, 0x1E, 0x4, 0x4, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, - 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, 0x1, 0x1, 0x1, 0xFE, 0x1D, 0x55, 0x2E, 0x95, 0x25, 0x1, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0x10, 0x11, 0x11, 0x19, 0x42, 0x50, 0x5C, - 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0xCB, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCB, 0xCB, 0xD0, 0xD0, 0xD0, 0xD0, 0xF3, 0xD0, 0xD0, 0xF3, 0xD0, - 0xF3, 0xC4, 0x0, 0x0, 0x3, 0xBE, 0xBE, 0xBE, 0xBF, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x1F, - 0x4, 0x97, 0x6B, 0x1E, 0x65, 0x0, 0x39, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0xA3, 0x38, - 0xE, 0x31, 0x38, 0x31, 0x2C, 0x33, 0x3A, 0x38, 0x3A, 0x31, 0x2C, 0x41, 0xA3, 0xE, 0xE, 0x7, - 0x7, 0x0, 0xE, 0xAA, 0xAA, 0x38, 0x2C, 0x2C, 0x2C, 0x31, 0x33, 0x31, 0x2C, 0x31, 0xA3, 0xB4, - 0x2C, 0x2C, 0x2C, 0x2C, 0x38, 0xAA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, - 0xE, 0xA3, 0xFD, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3C, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x39, 0x6B, 0x22, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0x0, 0xFE, - 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0x3, 0x3, 0x3, 0x3, 0x43, 0x4F, 0xA, 0x12, 0x10, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x18, 0x1A, 0x18, 0x10, 0x12, 0x18, 0x18, 0x19, 0x1B, 0x47, 0x1D, 0x1C, - 0x36, 0x4F, 0x5C, 0xCA, 0xCE, 0xCD, 0xCB, 0xCB, 0xC9, 0x5C, 0xC9, 0xC9, 0xCA, 0xCA, 0xCC, 0xCC, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xF3, 0xF3, - 0xF3, 0xD0, 0x12, 0x3, 0x3, 0x59, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x6, - 0x4, 0x71, 0x65, 0x1E, 0x1F, 0xD7, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, - 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x7, 0x31, 0x94, - 0xAA, 0x3A, 0x2C, 0x2C, 0x2C, 0x38, 0x41, 0x3A, 0x38, 0x33, 0x33, 0xAA, 0x2C, 0x2C, 0x2C, 0x2C, - 0x9, 0x7, 0x7, 0x0, 0x38, 0xB7, 0x31, 0x31, 0x2C, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x2C, 0xE, - 0x7, 0x7, 0xE, 0xA3, 0x3A, 0xE, 0x9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3C, 0x33, 0x2C, 0x4, 0x6, 0x4, 0x6B, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0x0, - 0x12, 0x1B, 0x42, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x13, 0x0, 0xFE, - 0xFE, 0x1, 0x47, 0x4F, 0x4F, 0x50, 0x50, 0x53, 0x46, 0x4F, 0x50, 0x4F, 0x4F, 0x50, 0x50, 0x53, - 0x53, 0x53, 0x55, 0x55, 0x55, 0xAD, 0x55, 0x55, 0x53, 0x55, 0x55, 0x55, 0xAD, 0x5C, 0x47, 0x44, - 0x34, 0x34, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x8, 0x8, 0x12, 0x12, 0x12, 0x46, 0xCC, - 0xCA, 0xCB, 0xCB, 0xCB, 0xCD, 0xBF, 0xBF, 0xC9, 0xCB, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, - 0xF3, 0xD0, 0x36, 0x36, 0x34, 0x1D, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x42, 0x1D, 0x1D, 0x6, - 0x4, 0x6B, 0x6B, 0x1E, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, - 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x7, 0x33, 0x2C, - 0x38, 0x41, 0xA8, 0x3A, 0x33, 0xB6, 0xA3, 0x3A, 0x31, 0x2C, 0x41, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, - 0x2C, 0xE, 0xE, 0x9, 0x33, 0xA3, 0x31, 0x31, 0x38, 0xE, 0x0, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, - 0xD8, 0xF0, 0x2C, 0xB6, 0xA8, 0x3F, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, - 0x3C, 0x33, 0x2C, 0x0, 0x6, 0x4, 0x6E, 0x6B, 0x29, 0x1E, 0x4, 0x4, 0xFE, 0xFE, 0xFE, 0x12, - 0xBE, 0xC2, 0xEC, 0xCE, 0xCE, 0xEC, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC1, 0xC1, 0xA4, 0x0, - 0xFE, 0x8, 0x53, 0x52, 0x53, 0x50, 0x50, 0x55, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x52, 0x4F, 0x50, - 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0xC4, 0xC4, 0x55, 0xAD, 0xC0, 0x55, 0xBE, - 0xBE, 0xC1, 0xC1, 0xC1, 0xBE, 0xBE, 0xC1, 0xC1, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xC1, 0xCC, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xBF, 0xAD, 0xBF, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, - 0xF3, 0xD0, 0x46, 0x46, 0x46, 0x1A, 0x3, 0xA, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x2D, 0x6, - 0x4, 0x7A, 0x39, 0x1F, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, - 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0xA3, 0xA3, - 0x38, 0x2C, 0x31, 0x94, 0xA5, 0x38, 0xE, 0xE, 0x2C, 0x41, 0x3F, 0x41, 0xA3, 0x2C, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x33, 0x41, 0x3A, 0x33, 0x31, 0x31, 0x1, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, - 0xD8, 0xF0, 0xE, 0xB4, 0x2C, 0xA3, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, - 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3C, 0x33, 0xE, 0x0, 0x6, 0x0, 0x6B, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0x7, - 0xAB, 0xCD, 0xF1, 0x36, 0xA, 0x7, 0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x7, 0x7, 0x0, - 0xFE, 0x12, 0x53, 0x52, 0x50, 0x53, 0x53, 0x55, 0x4F, 0x52, 0x52, 0x53, 0x53, 0x50, 0x4F, 0x4F, - 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x9D, 0x9C, 0x52, 0xAD, 0xC0, 0xBF, 0xEC, - 0xF1, 0xCE, 0xD0, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCD, 0xBF, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, 0xCB, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xC9, 0xBF, 0xBF, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCA, 0xC0, 0xC9, 0xBF, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0x6, - 0x4, 0x9B, 0x6B, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, - 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x0, 0x9, 0x31, - 0xA8, 0x38, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x3A, 0x41, 0x3F, 0x2C, 0x33, 0x94, 0xA3, 0x2C, - 0x2C, 0xE, 0x2C, 0xB4, 0x33, 0x31, 0x31, 0x2C, 0x7, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBB, 0xBD, - 0xD8, 0xF0, 0x7, 0x2C, 0x38, 0x2C, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, - 0x3A, 0x33, 0xE, 0x0, 0x6, 0x0, 0x39, 0x6E, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, - 0x0, 0x3, 0xA, 0x3, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0x1A, 0x52, 0x4F, 0x4F, 0x4F, 0x53, 0x53, 0x52, 0x52, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, - 0x52, 0x4F, 0x4F, 0x4F, 0x52, 0x52, 0x53, 0x53, 0x52, 0xE1, 0xC7, 0x52, 0x55, 0xC0, 0x50, 0x5C, - 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0xD0, 0xCC, 0xCB, 0xC9, 0x52, 0x53, 0x55, 0xBF, 0xC9, 0xCB, 0xCB, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCA, 0xCA, 0xC0, 0xCD, 0xEC, 0xF1, 0xF1, 0xF1, 0xEC, 0xEC, 0xF1, 0xF1, 0xF1, 0xB, - 0x1E, 0x96, 0x65, 0x1F, 0x39, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0x0, 0xE, - 0x31, 0xAA, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0xA8, 0x2C, 0x3C, 0x41, 0x3C, 0x41, 0x41, 0xA3, - 0x41, 0xE, 0x41, 0x41, 0xE, 0x2C, 0xE, 0x0, 0xE9, 0xE9, 0xE9, 0xE9, 0xD8, 0xBD, 0xBD, 0xBD, - 0xD8, 0xF0, 0x31, 0x41, 0xE, 0x7, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x38, 0x32, 0x6, 0x0, 0x4, 0x0, 0x39, 0x6B, 0x29, 0x1F, 0x4, 0x1E, 0x1, 0x18, 0x1D, 0x43, - 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1D, 0x1D, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, - 0x1A, 0x36, 0x4F, 0x4F, 0x4F, 0x50, 0x53, 0x53, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, - 0x52, 0x53, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x53, 0x55, 0xC0, 0x50, 0xC9, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xBF, 0x52, 0x52, 0x53, 0x53, 0x55, 0xBF, 0xCB, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCF, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCA, 0xCA, 0xCA, 0xCE, 0xF1, 0xF1, 0xF1, 0xF1, 0xEC, 0xEC, 0xF1, 0xC2, 0x5D, 0xB, - 0x4, 0x96, 0x65, 0x20, 0x9B, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x9, - 0x9, 0x2C, 0xE, 0xE, 0xE, 0x9, 0x9, 0x2C, 0xE, 0xE, 0xE, 0x9, 0x2C, 0x2C, 0xE, 0x2C, - 0x2C, 0xE, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xEE, 0xD8, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0x3F, 0xAA, 0x3A, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x33, 0x30, 0x20, 0x4, 0x6, 0x0, 0x29, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0xFE, 0x0, 0x3, - 0x1B, 0x46, 0x50, 0x55, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0x53, 0x4F, 0x4F, 0x53, 0x53, 0x55, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x55, 0xC0, 0x50, 0xBF, - 0xC9, 0xCD, 0xCB, 0xCD, 0xC9, 0xCB, 0xC9, 0xC9, 0x55, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x55, 0xBF, - 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xBF, 0xCB, 0xCB, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCA, 0xCA, 0xCA, 0xCE, 0xCA, 0xCA, 0x5D, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5D, 0xD, - 0x4, 0x97, 0x6B, 0x20, 0x6B, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBD, 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x9, 0x7, 0xE, 0xA5, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, - 0x33, 0x2C, 0x20, 0x4, 0x6, 0x4, 0x25, 0x6B, 0x29, 0x1F, 0x1E, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x1A, 0x1D, 0x46, 0x53, 0x55, 0x5A, 0x5C, 0xCA, 0xCA, - 0x5D, 0x53, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0xE1, 0x9D, 0x52, - 0x4F, 0x52, 0x4F, 0x4F, 0x55, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x55, 0xC0, 0x46, 0x36, - 0x53, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xBF, 0x52, 0x52, 0x52, 0x52, 0x52, 0x55, 0xAD, - 0xBF, 0xC4, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xBF, 0xC9, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xD0, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xE, - 0x4, 0x9B, 0x71, 0x25, 0x29, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, - 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0x2C, 0x3A, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3C, - 0x33, 0x2C, 0x20, 0x4, 0x4, 0x4, 0x25, 0x6B, 0x29, 0x1F, 0x1E, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x1A, 0x3D, 0x54, 0x55, 0x5D, 0x5D, - 0x5C, 0x53, 0x53, 0x53, 0x53, 0x55, 0x55, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, 0x4E, 0x3A, 0x52, - 0x52, 0x52, 0x52, 0x53, 0xAB, 0x52, 0x53, 0xAB, 0x53, 0x53, 0x53, 0x53, 0xAD, 0x5A, 0x49, 0x49, - 0x44, 0x36, 0x53, 0xCA, 0xCB, 0xCC, 0xCB, 0xCB, 0xBF, 0x55, 0x53, 0x52, 0x52, 0x52, 0x52, 0x55, - 0xAD, 0xEC, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0x9E, 0xC4, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCE, 0x59, 0x51, 0x51, 0x50, 0x50, 0x56, 0x5B, 0x5B, 0x5D, 0xC, - 0xB, 0xB2, 0x71, 0x1F, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0xB8, 0x41, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x3A, 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, - 0x33, 0x30, 0xD, 0x4, 0x5, 0x0, 0x25, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x8, 0x34, 0x52, 0x55, 0xCB, 0xD0, 0xD0, 0xD0, 0xC9, 0x5D, 0x5C, - 0x5C, 0x55, 0x55, 0x55, 0xAD, 0xBF, 0xBF, 0x52, 0x53, 0x53, 0x55, 0x55, 0x53, 0x55, 0x55, 0x53, - 0x53, 0x53, 0x55, 0x55, 0xAD, 0x52, 0x55, 0x53, 0x55, 0x55, 0x55, 0x55, 0xBF, 0xC0, 0x55, 0xC1, - 0xCD, 0xCE, 0xCE, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xBF, 0xBF, 0x55, 0x53, 0x52, 0x52, 0x53, - 0x54, 0xE9, 0xB2, 0xD5, 0xE5, 0x9B, 0x9A, 0xAF, 0x9B, 0xD5, 0xE5, 0x6B, 0xC4, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCD, 0x2D, 0x1A, 0x13, 0x13, 0x13, 0x1B, 0x5A, 0x5B, 0x5B, 0xB, - 0x20, 0xD5, 0x71, 0x6, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, - 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xEE, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, - 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, - 0xEE, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x0, 0xA3, 0x31, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xF9, 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, - 0x33, 0x30, 0xB, 0x4, 0x5, 0x0, 0x20, 0x37, 0x29, 0x1F, 0x4, 0x1E, 0x0, 0x0, 0xFE, 0x0, - 0x0, 0x8, 0x36, 0xAD, 0xCF, 0xFA, 0xF3, 0xD0, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xC9, 0x5C, 0x5D, - 0x5C, 0xCA, 0x4F, 0x7, 0x5B, 0x47, 0x1, 0x1A, 0x5D, 0x59, 0xA, 0x55, 0x5D, 0xC8, 0x9D, 0x5C, - 0x55, 0xBF, 0xF3, 0xD0, 0xCE, 0xBF, 0xC9, 0xBF, 0xBF, 0x5C, 0xC9, 0xC9, 0xCE, 0xC0, 0x59, 0xBF, - 0xC9, 0xCD, 0xC9, 0xC4, 0xC9, 0xCD, 0xCD, 0xCD, 0xAD, 0xCD, 0xCD, 0xCD, 0xC9, 0xBF, 0xAD, 0xAB, - 0xAD, 0xC6, 0x9B, 0xB2, 0xD5, 0x9D, 0x9A, 0x9B, 0xAF, 0xB5, 0xDE, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCE, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x5B, 0x5B, 0x5B, 0xB, - 0x20, 0xD5, 0x71, 0x6, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, - 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xF5, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, - 0x33, 0x30, 0x6, 0x4, 0x5, 0x0, 0x20, 0x39, 0x25, 0x1F, 0x4, 0x1E, 0x7, 0x2F, 0x48, 0xB9, - 0xCE, 0xC9, 0xAD, 0xBF, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xCB, 0xCB, 0xD0, 0xD0, 0xCB, 0x5C, 0x5D, - 0x5C, 0x5D, 0x46, 0x0, 0x51, 0x50, 0x0, 0x3, 0x5A, 0x5A, 0x0, 0x0, 0x53, 0xCF, 0xC8, 0x5C, - 0x55, 0xBF, 0xD0, 0xF3, 0xCE, 0xAD, 0xC9, 0xAD, 0x55, 0x55, 0xBF, 0xC9, 0xCE, 0xC0, 0x50, 0x54, - 0xC9, 0xCC, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC4, 0xC9, - 0xC9, 0xC6, 0x9B, 0xB2, 0xD5, 0x9F, 0x9A, 0x9B, 0xAF, 0xB5, 0xE5, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xCC, 0xCC, 0xD0, 0xCE, 0xC0, 0xCA, 0xC0, 0xC0, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x25, 0xB5, 0x6E, 0x4, 0xDB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x31, 0xA8, 0x38, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, - 0x33, 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, - 0x33, 0x30, 0x5, 0x4, 0x5, 0x0, 0x20, 0x39, 0x25, 0x1F, 0x4, 0x1E, 0xFA, 0xFD, 0xFA, 0xFA, - 0xF3, 0xD0, 0xC9, 0xAD, 0xBF, 0xCB, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0x5C, 0x5D, 0x5C, 0x5D, - 0x5C, 0x4F, 0x1, 0x1, 0x50, 0x57, 0x0, 0x3, 0x5A, 0x5A, 0x1, 0x1, 0x10, 0xBF, 0xAD, 0x5C, - 0x55, 0xBF, 0xD0, 0xF3, 0xD0, 0xBF, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0xBF, 0xCD, 0xC9, 0x46, 0x34, - 0x1A, 0x36, 0xC9, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xCE, 0xCB, 0xC9, 0xC9, 0xC9, 0xCB, 0xC4, 0xCF, - 0xC4, 0xC6, 0x9B, 0xAF, 0xDE, 0x9D, 0x9A, 0x97, 0xAF, 0xAF, 0xE5, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, - 0xF3, 0xF3, 0xD0, 0xD0, 0xF3, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x7, - 0x20, 0xAF, 0x6E, 0xFE, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x38, - 0xA3, 0xB4, 0xE9, 0xE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0x38, 0xAA, 0xA8, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xB6, 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, - 0x33, 0x2C, 0x23, 0x4, 0x5, 0x0, 0x1F, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFA, 0xFA, 0xFA, 0xFA, - 0xFA, 0xF3, 0xD0, 0xCF, 0xAD, 0x4C, 0x46, 0x50, 0x51, 0x5C, 0x5D, 0xCA, 0xCA, 0xCA, 0x5C, 0x5D, - 0xCA, 0x4F, 0x46, 0x1B, 0x50, 0x5B, 0x1, 0x0, 0x55, 0x5A, 0x1A, 0x1B, 0x50, 0x8, 0x7, 0x53, - 0x55, 0xBF, 0xCE, 0xD0, 0xF3, 0xC9, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0x55, 0xC9, 0xC2, 0xAB, 0xC1, - 0xC1, 0xC1, 0xCE, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xD0, 0xCB, 0xC9, 0xC9, 0xBF, 0xC9, 0xCB, 0xCB, - 0xC9, 0xC6, 0x9B, 0x9B, 0x9F, 0x9D, 0x9A, 0x97, 0xAF, 0xAF, 0xDE, 0x6B, 0x54, 0xD0, 0xF3, 0xFA, - 0xFA, 0xF3, 0xD0, 0xD0, 0xF1, 0x34, 0x46, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5A, 0x12, - 0x31, 0xD5, 0x71, 0x0, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, - 0xBD, 0xB4, 0xA3, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x7, 0x2C, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, - 0x3A, 0x31, 0x23, 0x4, 0x5, 0x0, 0xB, 0x37, 0x29, 0x20, 0x4, 0x1E, 0xFA, 0xFA, 0xF3, 0xFA, - 0xC6, 0x41, 0xE, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x1D, 0x50, 0x5C, 0x5C, 0x5C, - 0x5C, 0x5D, 0x5A, 0x34, 0x50, 0x5D, 0x3, 0x0, 0x51, 0x5C, 0x53, 0x47, 0x5B, 0x53, 0x5A, 0x55, - 0x55, 0x5C, 0xCE, 0xF3, 0xF3, 0xCC, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0x55, 0xBF, 0xC2, 0x53, 0xC9, - 0xCE, 0xCC, 0xCC, 0xD0, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xD0, 0xCE, 0xC9, 0xBF, 0xBF, 0xBF, 0xC9, - 0xC9, 0xC6, 0x9B, 0x9B, 0x9D, 0x9D, 0x9A, 0x6E, 0x97, 0xA9, 0xD5, 0x39, 0x54, 0xD0, 0xFA, 0xFA, - 0xFA, 0xF3, 0xD0, 0xD0, 0xCD, 0xC1, 0xC2, 0x5D, 0x5B, 0x5B, 0x58, 0x57, 0x58, 0x5A, 0x5A, 0x8, - 0xC, 0x25, 0x1F, 0x5, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x9, 0x9, - 0xE, 0xE, 0x9, 0x9, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x7, 0x9, 0xE, 0x9, 0x9, 0x7, 0x2C, - 0x31, 0xE, 0xE, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x31, 0x2C, 0xE, 0xE, 0x2C, - 0xE, 0xE, 0x7, 0x2C, 0x38, 0xA3, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x41, 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, - 0x3A, 0x33, 0xE, 0x4, 0x5, 0x0, 0x5, 0x30, 0x30, 0x20, 0x4, 0x4, 0xCF, 0xA6, 0x33, 0x0, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x36, 0x54, 0xAD, 0x5C, - 0xCA, 0x5D, 0x5C, 0x1, 0x1B, 0x5D, 0x12, 0x0, 0x52, 0x5C, 0xC9, 0x51, 0x5A, 0xA, 0x53, 0x55, - 0x55, 0x5C, 0xD0, 0xF3, 0xD0, 0xD0, 0x5C, 0xBF, 0xC9, 0xC9, 0xC9, 0xBF, 0xBF, 0xC9, 0x4F, 0xBF, - 0xD0, 0xCC, 0xCC, 0xCC, 0xD0, 0xF3, 0xF3, 0xD0, 0xF3, 0xF3, 0xCE, 0xC9, 0xCA, 0xC9, 0xBF, 0xBF, - 0xBF, 0xCD, 0x96, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x77, 0x77, 0x9A, 0x71, 0x55, 0xD0, 0xFA, 0xFA, - 0xFA, 0xF3, 0xCA, 0xCE, 0x5D, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x5A, 0x5A, 0x23, - 0x5, 0x1F, 0x4, 0xD, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, - 0xBB, 0xF7, 0xFD, 0xFD, 0xF9, 0xA8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x7, 0x0, - 0x7, 0x1, 0x0, 0x0, 0x38, 0x3A, 0x3A, 0x3A, 0x7, 0x0, 0x7, 0x7, 0x7, 0x7, 0x1, 0x7, - 0x3A, 0xE, 0x3A, 0x41, 0x33, 0xE, 0x2C, 0x31, 0x2C, 0xE, 0x2C, 0x2C, 0x41, 0xAA, 0x41, 0x31, - 0x2C, 0x2C, 0x2C, 0x2C, 0xAA, 0x31, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xB7, 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, - 0x3A, 0x33, 0xE, 0x0, 0x4, 0x4, 0xB, 0x37, 0x30, 0x20, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0xA, 0x3A, 0xB4, 0xEC, 0xD0, 0xCB, 0xCB, 0xD0, 0xCF, 0x5C, - 0xCA, 0x5A, 0x1A, 0x3, 0x1A, 0x5D, 0x1D, 0x0, 0x4F, 0x5D, 0xCA, 0x5A, 0x56, 0x1, 0xF, 0x46, - 0x55, 0x5C, 0xD0, 0xF3, 0xF3, 0xF3, 0xC9, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0x46, 0xA, - 0xA, 0x1C, 0xAD, 0x5C, 0xCB, 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, - 0xBF, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0xD0, 0xFA, 0xFA, - 0xFA, 0xEC, 0x4F, 0x4F, 0x46, 0x46, 0x47, 0x59, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0xC, - 0x32, 0xB2, 0x29, 0x20, 0x6, 0xE2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, - 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x1, - 0x7, 0x7, 0x7, 0x0, 0x7, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, - 0x7, 0x7, 0x3F, 0x33, 0x0, 0x7, 0xE, 0xE, 0x2C, 0x2C, 0x2C, 0x3F, 0x94, 0x38, 0x3C, 0xA3, - 0x94, 0x31, 0xE, 0x94, 0x33, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, - 0xA3, 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, - 0x3B, 0x33, 0xD, 0x0, 0x4, 0x4, 0xB, 0x30, 0x30, 0x20, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0x0, - 0x7, 0x2D, 0x94, 0xB6, 0xF0, 0xF8, 0xFA, 0xCF, 0xF3, 0xFA, 0xFA, 0xF3, 0xC9, 0xCB, 0xCF, 0x5C, - 0xCA, 0x5C, 0x52, 0x52, 0x4F, 0x5D, 0x46, 0x0, 0x46, 0xCA, 0x5C, 0x5C, 0x51, 0x56, 0x10, 0x1, - 0x1B, 0xBF, 0xD0, 0xD0, 0xD0, 0xD0, 0xC9, 0xC9, 0xAD, 0xC9, 0xC9, 0xC4, 0xC9, 0xCE, 0x55, 0xBE, - 0xC1, 0x48, 0x3A, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x8, 0x1A, 0x55, 0x5C, 0xC9, 0xCB, 0xC9, 0xCB, 0xCE, 0xC9, 0xCC, 0xCA, 0xD0, 0xFA, 0xFA, - 0xFA, 0xF1, 0xBF, 0xBE, 0xBF, 0xC2, 0xC0, 0xC0, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x57, 0x5A, 0xC, - 0xB, 0x9B, 0x37, 0xB, 0x25, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x1, - 0x7, 0x7, 0x1, 0x7, 0x7, 0x7, 0x1, 0x1, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x1, - 0x7, 0x7, 0x1, 0x1, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x38, 0xB4, 0x3A, 0xA3, 0xE, 0x31, - 0x3C, 0xA3, 0xAA, 0x41, 0x7, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x31, 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBB, 0xA3, - 0x3A, 0x32, 0xB, 0x0, 0x6, 0x0, 0x0, 0x5, 0x30, 0x25, 0x4, 0x1E, 0x1, 0x33, 0xA4, 0xE9, - 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFA, 0xFA, 0xF3, 0xF3, 0xD0, 0xF3, 0xFA, 0xF3, 0xF3, 0xF3, 0x5C, - 0xCA, 0xCA, 0xCA, 0x4F, 0x1C, 0x5D, 0x50, 0x0, 0x36, 0xF3, 0xCC, 0xCA, 0xC9, 0x59, 0x57, 0x43, - 0x3, 0x3, 0x46, 0x5C, 0x5C, 0xBF, 0x5C, 0x5C, 0x5C, 0xC9, 0xC9, 0xCD, 0xBF, 0xCE, 0xBF, 0x3B, - 0x2E, 0x7, 0x1, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x55, 0x55, 0x5C, 0xCA, 0x5C, 0xCA, 0xCA, 0xD0, 0xFA, 0xFA, - 0xF3, 0xC0, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x5B, 0x58, 0x58, 0x57, 0x5A, 0xC, - 0x20, 0x9B, 0x6B, 0x25, 0x29, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xBD, 0x2C, - 0xE, 0x31, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xE, 0xE, 0x0, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0xE, 0xE, 0xE, 0x7, - 0x0, 0x7, 0x7, 0x7, 0x1, 0x7, 0x7, 0x7, 0x7, 0x7, 0x3C, 0x3F, 0xA5, 0x3A, 0xA3, 0xA3, - 0x33, 0x3C, 0x38, 0x2C, 0x2C, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, - 0x38, 0x31, 0xB, 0x4, 0x4, 0x0, 0xFE, 0x5, 0x30, 0x25, 0x1E, 0x1E, 0xFA, 0xFA, 0xFA, 0xFD, - 0xFA, 0xFD, 0xFA, 0xFA, 0xFA, 0xFD, 0xFA, 0xFA, 0xF3, 0xF3, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCC, 0xCA, 0x46, 0x3, 0x3, 0x5D, 0x5B, 0xA, 0x1C, 0xF3, 0xF3, 0xD0, 0xCC, 0xCA, 0x55, 0x51, - 0x56, 0x10, 0xF, 0x1C, 0x5C, 0xBF, 0x5C, 0x5C, 0x5C, 0xC9, 0xCD, 0xAC, 0xBF, 0xCE, 0x5A, 0x3, - 0x7, 0x1, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x3, 0xBF, 0xC9, 0xCA, 0xCC, 0xD0, 0xF3, 0xCA, - 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0xB, - 0x25, 0x9B, 0x37, 0x5, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xE9, - 0xFD, 0xF0, 0x3C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xEA, 0xEA, 0xEA, 0xEA, 0xE, 0x7, 0x7, - 0x7, 0x7, 0x7, 0xE, 0xE, 0xE, 0xE, 0x9, 0xE, 0x7, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x2C, 0x2C, 0xE, - 0x2C, 0x31, 0x7, 0x2C, 0x2C, 0x2C, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, - 0x3A, 0x32, 0xB, 0x0, 0x4, 0x4, 0xB, 0x38, 0x25, 0x25, 0x4, 0x1E, 0xD0, 0xF3, 0xFA, 0xFA, - 0xFA, 0xFA, 0xFA, 0xF7, 0xC6, 0xA5, 0x52, 0x4F, 0x53, 0x55, 0xC9, 0xCE, 0xC9, 0xC4, 0xAD, 0xAD, - 0xAD, 0xCB, 0x55, 0x4F, 0x36, 0x5A, 0x5D, 0x5A, 0x1C, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xC9, 0xAD, - 0x55, 0x5B, 0x1D, 0x3, 0x50, 0x5C, 0x5C, 0x5C, 0xC9, 0x5C, 0xCB, 0xE3, 0xC4, 0xCE, 0x5C, 0x43, - 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0x7, - 0x20, 0x9D, 0x37, 0x20, 0x20, 0x27, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xB4, 0x3A, 0xF7, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, - 0xF5, 0xF9, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, 0x94, - 0x33, 0x2E, 0xB, 0x0, 0x5, 0x4, 0x25, 0x6E, 0x37, 0x1F, 0x4, 0x1E, 0xCD, 0xD0, 0xD0, 0xCD, - 0xAD, 0x3D, 0x2D, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0xA, 0x47, 0xC1, 0x49, 0x1A, 0x1A, 0x35, - 0x36, 0xC9, 0x5C, 0x5A, 0x52, 0x55, 0x5C, 0xCA, 0x5C, 0xCC, 0xD0, 0xD0, 0xD0, 0xF3, 0xC9, 0xC9, - 0x5C, 0x5A, 0x5B, 0x59, 0x51, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, 0xC9, 0xC4, 0x5C, 0xCE, 0x5D, 0x46, - 0xCA, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, - 0x5B, 0x5B, 0x58, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x7, - 0xD, 0x9B, 0x37, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x3A, 0xE, 0x31, - 0xBD, 0xF0, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xEA, - 0xF7, 0xFD, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0x94, - 0x38, 0x32, 0xE, 0x0, 0x5, 0x0, 0xB, 0x37, 0x29, 0x1F, 0x1E, 0x1E, 0x52, 0x2F, 0xA, 0x1, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0xA, 0x2E, 0xA, 0x34, 0xBF, 0xBF, 0x36, 0x1A, 0x1C, - 0x36, 0xC9, 0x5C, 0x5A, 0x52, 0x4C, 0x3D, 0x4E, 0x52, 0xC9, 0xCA, 0xCB, 0xCB, 0xCA, 0xC9, 0x5C, - 0x5C, 0x5C, 0x1A, 0x5A, 0x5A, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, 0xCB, 0xE3, 0xC3, 0xCE, 0xC0, 0x1D, - 0x55, 0xC4, 0xBF, 0xBF, 0xC9, 0xCA, 0xCC, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x5A, 0xE, - 0x20, 0x9B, 0x37, 0x20, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xE9, - 0xA3, 0x33, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, - 0xF5, 0xF9, 0x0, 0xE, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, - 0x3A, 0x31, 0xE, 0x0, 0x4, 0x0, 0x6, 0x37, 0x20, 0x1F, 0x1E, 0x4, 0x7, 0x0, 0x0, 0x0, - 0x7, 0x0, 0x1, 0x0, 0x0, 0x9, 0xE, 0xA, 0x16, 0xA, 0x1A, 0x49, 0xEC, 0x47, 0x1A, 0x1C, - 0x4C, 0x5C, 0x5C, 0x5C, 0x53, 0x4C, 0x3D, 0x36, 0x52, 0x55, 0xC9, 0xCD, 0xCB, 0xC9, 0x54, 0xAD, - 0x55, 0x5C, 0x1C, 0x46, 0x5C, 0x5C, 0xC9, 0xC9, 0xC9, 0xCB, 0xCB, 0xC9, 0xC9, 0xCE, 0x5C, 0x7, - 0x1, 0x1, 0x2C, 0x4C, 0xCD, 0xC9, 0xC4, 0x55, 0xAD, 0x5C, 0x5C, 0x5C, 0x5C, 0x55, 0x5A, 0x5A, - 0x5A, 0x57, 0x51, 0x51, 0x51, 0x57, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x5A, 0x5A, 0x58, 0x5A, 0x5A, 0x7, - 0x20, 0x9B, 0x25, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF8, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, - 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, - 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xE9, 0xE9, 0xBD, 0xBD, 0xBD, - 0xEA, 0xF7, 0x0, 0x7, 0x9, 0xE, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, - 0xA3, 0xBD, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, - 0x3B, 0x33, 0x2C, 0x4, 0x6, 0x4, 0x25, 0x6E, 0x25, 0x1F, 0x4, 0x1E, 0x8, 0x1, 0x1, 0x1, - 0x3, 0x3, 0x1, 0x1, 0x0, 0x3, 0x3, 0x3, 0x3, 0x3, 0xA, 0x1B, 0xBE, 0xCD, 0x46, 0x1A, - 0x36, 0x5C, 0x5C, 0x5C, 0x55, 0x52, 0x36, 0x1B, 0x1A, 0x1B, 0x12, 0x2C, 0x9, 0x0, 0xFE, 0xFE, - 0xFE, 0x53, 0x46, 0x1D, 0x5D, 0x5A, 0x5A, 0x5C, 0xCD, 0xCE, 0xD0, 0xCD, 0x5C, 0xCD, 0x5C, 0x1B, - 0x1A, 0x12, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x3, 0xF, 0x3, 0x3, 0x3, 0x3, 0x12, 0x50, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x20, 0x79, 0x20, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, - 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, - 0xE9, 0xF5, 0x0, 0x1, 0x1, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xB6, 0x41, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3B, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x25, 0x71, 0x29, 0x1F, 0x1E, 0x1E, 0x2D, 0x1A, 0xA, 0xA, - 0xA, 0xA, 0xA, 0xA, 0x1, 0x1, 0x3, 0x3, 0x3, 0x1A, 0x1C, 0x1A, 0x46, 0xC1, 0xEC, 0x49, - 0x12, 0x12, 0x1C, 0x1D, 0x36, 0x3D, 0x1, 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0xFE, - 0x0, 0x1C, 0xBF, 0x1A, 0xCA, 0x5A, 0xCA, 0xCA, 0xD0, 0xD0, 0xF3, 0xD0, 0xD0, 0xD0, 0x5C, 0x49, - 0x4A, 0x49, 0x49, 0x44, 0x1B, 0x2D, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, - 0x34, 0x34, 0x1B, 0x34, 0x34, 0x34, 0x2D, 0x8, 0x1, 0x12, 0x1B, 0x1D, 0x46, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, - 0x20, 0x9B, 0x25, 0x20, 0x29, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB7, - 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, - 0x3B, 0x33, 0x2C, 0x0, 0x4, 0xFE, 0x30, 0x6E, 0x28, 0x1F, 0x1E, 0x4, 0x12, 0xE, 0x3, 0x3, - 0x3, 0x3, 0x3, 0x1, 0x0, 0x0, 0x3, 0x1A, 0x36, 0x1C, 0x1C, 0x1A, 0x1A, 0x36, 0xBF, 0xF1, - 0xC2, 0xAB, 0x46, 0x1B, 0x12, 0x12, 0x8, 0x8, 0x8, 0x0, 0x43, 0x43, 0x43, 0x43, 0x1B, 0x10, - 0x0, 0x1, 0x5C, 0x5C, 0x5A, 0x51, 0x5C, 0x5C, 0xCA, 0xD0, 0xF3, 0xD0, 0xD0, 0xF3, 0x5C, 0xAB, - 0xBE, 0xBE, 0xAB, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x49, 0x49, 0xAB, 0x5A, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, - 0xC, 0x9B, 0x30, 0x20, 0x29, 0x28, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA3, - 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, - 0x3C, 0x33, 0xE, 0x0, 0x4, 0x0, 0x39, 0x97, 0x28, 0x1F, 0x1E, 0x1E, 0x12, 0x8, 0x8, 0x3, - 0x3, 0xA, 0x1A, 0xA, 0x1, 0x0, 0x3, 0xA, 0x1A, 0x1C, 0x1C, 0x1C, 0x1A, 0x1A, 0x1C, 0x52, - 0xAD, 0xEC, 0xF1, 0xEC, 0xCE, 0xC1, 0xC1, 0xC1, 0xC1, 0xAB, 0x5A, 0x5C, 0x5C, 0x5C, 0x5C, 0x5A, - 0x50, 0x10, 0x36, 0xCA, 0x5A, 0x46, 0x18, 0x50, 0x5C, 0xCC, 0xD0, 0xF3, 0xD0, 0xF3, 0xC9, 0xBF, - 0xBF, 0xCD, 0xBF, 0xCD, 0xC1, 0xC2, 0xC2, 0xC2, 0xC1, 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, - 0xBE, 0xBE, 0xC1, 0xC1, 0xC1, 0xC1, 0xF1, 0xCE, 0xCE, 0xC2, 0xC2, 0xCE, 0xC0, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, - 0x5, 0x71, 0x32, 0xC, 0x29, 0x1F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, - 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, - 0xD8, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, - 0x3C, 0x32, 0xB, 0x0, 0x5, 0x0, 0x39, 0x6F, 0x22, 0x21, 0x1E, 0x1E, 0x8, 0x7, 0x3, 0x9, - 0x3, 0xA, 0x3, 0x3, 0xA, 0xA, 0x3, 0xA, 0x18, 0x1B, 0x1A, 0x1C, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x4F, 0x5A, 0x56, 0x51, 0x36, 0x1D, 0x1B, 0x1B, 0x34, 0x51, 0x5C, 0xCA, 0xCA, 0x5C, 0xCA, - 0xCA, 0x5D, 0x1B, 0x5C, 0x5A, 0x5A, 0x42, 0x10, 0x51, 0xC9, 0xCC, 0xF3, 0xF3, 0xF3, 0xCA, 0xBF, - 0xC2, 0xCE, 0xEC, 0xF7, 0xF1, 0xF1, 0xF1, 0xEC, 0xCE, 0xCE, 0xEC, 0xEC, 0xCD, 0xCD, 0xCD, 0xC2, - 0xC1, 0xC1, 0xC1, 0xC2, 0xC1, 0xEC, 0xCE, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, - 0x5, 0x97, 0x37, 0xD, 0x37, 0x1F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, - 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, - 0xE, 0xE, 0xE, 0x9, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x2C, 0xE, 0xE, 0xE, - 0xE, 0xE, 0xE, 0x2C, 0x31, 0x2C, 0x2C, 0xE, 0x31, 0x31, 0x2C, 0xE, 0x2C, 0x7, 0x7, 0x7, - 0x7, 0x9, 0x0, 0x7, 0x7, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, - 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x38, 0x25, 0x1F, 0x4, 0x4, 0x0, 0x39, 0xA7, 0x28, 0x1F, 0x1E, 0x1E, 0x8, 0x7, 0xA, 0x2C, - 0x1A, 0x12, 0xA, 0x1A, 0x12, 0xA, 0xA, 0x1A, 0x1A, 0x18, 0x1B, 0x1A, 0x1C, 0x1A, 0x1C, 0x1C, - 0x34, 0x4C, 0x5C, 0x51, 0x50, 0xF, 0x10, 0x11, 0x11, 0xF, 0x1B, 0x46, 0x1A, 0x36, 0x50, 0x5C, - 0xCA, 0xCA, 0x5C, 0x50, 0xCA, 0x5C, 0x5C, 0x50, 0x43, 0xA, 0x52, 0xD0, 0xF3, 0xF3, 0xCE, 0xF1, - 0xF1, 0xF1, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, - 0x4, 0xA7, 0x39, 0x20, 0x65, 0x1E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x3F, - 0x2C, 0x2C, 0x7, 0x0, 0x7, 0xE, 0xE, 0x31, 0x38, 0x33, 0xE, 0x41, 0x38, 0x3F, 0xA5, 0x2C, - 0x31, 0xA3, 0xB4, 0x41, 0x2C, 0xE, 0xE, 0x3C, 0xA8, 0xE, 0xA3, 0xA3, 0x3A, 0x7, 0x7, 0x0, - 0x0, 0x7, 0x7, 0x7, 0x9, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, - 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, - 0x33, 0x25, 0x1F, 0x4, 0x6, 0x0, 0x39, 0x9B, 0x28, 0x1F, 0x1E, 0x1E, 0x8, 0x8, 0xA, 0x12, - 0x1A, 0x1A, 0xA, 0xA, 0x12, 0x12, 0x10, 0xF, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0xF, 0xF, - 0xF, 0x11, 0x11, 0x10, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x43, 0x1B, 0x1, 0x0, 0x0, 0x0, - 0x3, 0x53, 0x5A, 0x50, 0xCA, 0xCA, 0xCA, 0x5C, 0x5D, 0xC0, 0xCA, 0xCC, 0xF3, 0xFA, 0xD0, 0xCE, - 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0xFE, 0xAE, 0x3E, 0x20, 0x6B, 0x1E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, - 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x2C, 0x3C, - 0xA3, 0x2C, 0x7, 0x1, 0x7, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x3C, 0x3C, 0xE, 0xB4, 0xB6, 0x3A, - 0x38, 0xA8, 0x38, 0x2C, 0x2C, 0xE, 0xE, 0x7, 0x38, 0x33, 0x0, 0x7, 0xE, 0x7, 0x7, 0x7, - 0x7, 0x1, 0x0, 0x0, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x3A, - 0x31, 0x30, 0x1F, 0x4, 0x6, 0x0, 0x3E, 0xAF, 0x28, 0x1F, 0x4, 0x1E, 0xF, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x3, 0x1, 0x1, 0x1, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x46, 0x1A, 0x1, 0x0, 0x1, 0x0, - 0x0, 0x1A, 0x5A, 0x1B, 0x53, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xD0, 0xF3, 0xCE, 0xC9, - 0xC9, 0xC9, 0xCD, 0xC9, 0xAD, 0x43, 0x43, 0x43, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0xFE, 0xBC, 0xA9, 0x20, 0x71, 0x1E, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, - 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x33, 0x2C, - 0x41, 0xA8, 0x33, 0x7, 0x7, 0x7, 0x7, 0xE, 0x38, 0x41, 0x31, 0xE, 0x31, 0x33, 0x38, 0x3A, - 0x33, 0x38, 0x31, 0x31, 0x33, 0x33, 0x2C, 0xE, 0xE, 0xA8, 0x0, 0x7, 0x7, 0x1, 0x7, 0xE, - 0xE, 0x7, 0x7, 0x0, 0x0, 0x1, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x31, 0x30, 0x6, 0x4, 0x4, 0x0, 0x6C, 0x9B, 0x22, 0x1F, 0x4, 0x1E, 0x1, 0x1, 0x1, 0x1, - 0xF, 0xF, 0xF, 0x1, 0x0, 0xFE, 0x3, 0x4F, 0x53, 0x59, 0x53, 0x53, 0x12, 0x0, 0xFE, 0xFE, - 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x46, 0xA, 0x0, 0x1, 0x1D, 0x0, - 0x0, 0x1, 0x55, 0x1D, 0xA, 0x2F, 0x2F, 0x34, 0x53, 0x55, 0x52, 0x3D, 0x36, 0x36, 0x2F, 0x12, - 0x1A, 0x1A, 0x1B, 0x13, 0x12, 0x46, 0x4F, 0x4F, 0x4F, 0x55, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0xD, - 0xFE, 0xE0, 0xBA, 0x20, 0x9B, 0x1F, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF8, 0xF8, 0xE, 0x2C, 0x2C, - 0x2C, 0x38, 0xA3, 0xB6, 0xA3, 0x33, 0x3C, 0x41, 0x3A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x38, 0xAA, - 0x38, 0x33, 0x31, 0x38, 0x38, 0x33, 0x33, 0xE, 0xE, 0xAA, 0x9, 0x9, 0x7, 0x1, 0x1, 0x7, - 0x9, 0xE, 0xE, 0x7, 0x1, 0x1, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x3A, - 0x33, 0x2C, 0x6, 0x4, 0x4, 0x0, 0x6B, 0x9B, 0x29, 0x1F, 0x4, 0x4, 0x1, 0x1, 0x1, 0x1, - 0x1, 0xF, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0xF, - 0xF, 0xF, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x46, 0x3, 0x0, 0x1, 0x4C, 0x4B, - 0x0, 0x0, 0xA, 0xA, 0x3, 0x46, 0x52, 0x52, 0x47, 0x47, 0x50, 0x5C, 0x5A, 0x5A, 0x5A, 0x5C, - 0x5C, 0x5C, 0x5C, 0x5C, 0x53, 0x5C, 0xCA, 0xCA, 0xBF, 0x53, 0x55, 0xCA, 0xCC, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, - 0x0, 0xED, 0xD7, 0x1F, 0x9B, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xEE, 0xEA, 0xEA, 0x7, 0x31, 0x2C, - 0x2C, 0xE, 0x2C, 0x31, 0x33, 0x33, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0xB6, - 0x31, 0x2C, 0x33, 0x38, 0x38, 0x33, 0x31, 0x2C, 0x31, 0xB6, 0x33, 0x2C, 0xE, 0x7, 0x7, 0x7, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, - 0x2F, 0x2C, 0x6, 0x4, 0x4, 0x4, 0x37, 0x9B, 0x29, 0x1E, 0x4, 0x4, 0x0, 0x0, 0x2A, 0x6, - 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x8, 0x43, 0x1, 0x0, 0x1, 0x36, 0x27, - 0x0, 0x0, 0x0, 0x8, 0x4F, 0x4F, 0x4F, 0x4F, 0x47, 0x47, 0x55, 0xC9, 0xCB, 0xCA, 0xCB, 0xD0, - 0xCE, 0xCE, 0xCB, 0xCB, 0xC9, 0x5C, 0xCA, 0xCA, 0xCE, 0xCC, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, - 0x0, 0xD8, 0xBA, 0x1F, 0x71, 0x1F, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, - 0xE, 0x31, 0xB6, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0x7, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0xB4, - 0x33, 0x2C, 0x33, 0x38, 0x3A, 0x33, 0x2C, 0x33, 0x38, 0x94, 0x3A, 0x2C, 0x2C, 0x2C, 0xE, 0x9, - 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, 0x3F, - 0x2F, 0x2C, 0x4, 0x4, 0x6, 0x4, 0x20, 0xB2, 0x37, 0x4, 0x4, 0x1E, 0x0, 0x25, 0x4B, 0x0, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x46, 0x0, 0xFE, 0x0, 0x3, 0x42, - 0x1, 0x0, 0x0, 0x1, 0x4F, 0x53, 0x53, 0x53, 0x47, 0x46, 0x50, 0xC9, 0xCE, 0xCE, 0xCE, 0xCC, - 0xCE, 0xD0, 0xD0, 0xCC, 0xCE, 0xCC, 0xD0, 0xD0, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, - 0xFE, 0xD8, 0xB0, 0x20, 0x71, 0x1F, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, - 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0x7, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x31, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x3A, - 0xAA, 0xA3, 0x33, 0x33, 0x31, 0x2C, 0x31, 0x33, 0x38, 0x38, 0x3A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, - 0xE, 0x9, 0x7, 0x1, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x3F, - 0x34, 0x2C, 0x4, 0x4, 0x6, 0x4, 0x1F, 0xD5, 0x6B, 0x4, 0x1E, 0x1E, 0xFE, 0x0, 0x0, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0x1, - 0x1B, 0x3, 0x0, 0x1, 0x1B, 0x50, 0x56, 0x51, 0x46, 0x43, 0x50, 0xC0, 0xCE, 0xD0, 0xD0, 0xD0, - 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, - 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x6, - 0x20, 0xFB, 0xBA, 0x25, 0x6B, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, - 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x0, 0xE, 0x2C, - 0x2C, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, - 0xE, 0x33, 0xA8, 0xA3, 0x33, 0xE, 0x41, 0xB4, 0x3A, 0x3A, 0x31, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, - 0x2C, 0x2C, 0x2C, 0x7, 0x7, 0x0, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, 0x3F, - 0x38, 0x30, 0x4, 0x4, 0x4, 0x4, 0x4, 0xD5, 0x71, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x2B, 0x16, 0x24, 0x6, 0x16, 0x9, 0x16, 0x7, 0x24, 0x7, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, - 0x0, 0x1A, 0x0, 0x0, 0x3, 0x5A, 0x5C, 0x5C, 0x46, 0x43, 0x3, 0x18, 0x1D, 0x46, 0x4C, 0x54, - 0xBF, 0xBF, 0xC9, 0xC9, 0xCC, 0xCC, 0xCC, 0x5C, 0x53, 0x53, 0x59, 0x59, 0x50, 0x50, 0x50, 0x50, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x56, 0x56, 0x50, 0x51, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1F, - 0xB, 0xAF, 0x39, 0xB, 0x37, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, - 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0x0, 0x7, - 0x7, 0x2C, 0x7, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x2C, 0x2C, - 0xE, 0x7, 0x7, 0x7, 0x2C, 0x2C, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, - 0x7, 0x7, 0x7, 0x7, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, - 0x33, 0xE, 0x4, 0x6, 0x4, 0x4, 0x0, 0x9B, 0xB2, 0x4, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x98, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0x1A, 0x36, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0x0, 0x1A, 0x0, 0x0, 0x1, 0x1D, 0x59, 0x59, 0x43, 0x43, 0x8, 0x3, 0x3, 0xF, 0x10, 0x10, - 0x2F, 0xCD, 0xCE, 0xCE, 0xCE, 0xCD, 0xCE, 0x12, 0x3, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x18, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x12, 0x12, 0x12, 0x50, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x1F, - 0xFE, 0x0, 0x4, 0xB, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, - 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, - 0xD8, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x31, 0xB, 0x0, 0x6, 0x4, 0x4, 0x4, 0x6C, 0x9B, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x2, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x1D, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0x12, 0x0, 0x0, 0x0, 0x1, 0x53, 0x5A, 0x42, 0x4F, 0x46, 0x36, 0x36, 0x36, 0x34, 0x1A, - 0x12, 0x1A, 0x34, 0x34, 0x36, 0x46, 0x34, 0x12, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x3D, 0x3D, - 0x3D, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x36, 0x46, 0x4F, 0x50, 0x57, 0x5A, 0x5B, 0x5B, - 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, - 0xB, 0x29, 0x32, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, 0xBD, - 0xE9, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, 0x3A, - 0x31, 0xB, 0x4, 0x6, 0x4, 0x4, 0x0, 0x5, 0x20, 0x1F, 0x1E, 0x4, 0x0, 0x0, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0x12, 0xFE, 0x0, 0x0, 0x0, 0x12, 0x5A, 0x43, 0x50, 0x59, 0x55, 0x55, 0x59, 0x53, 0x53, - 0x53, 0x34, 0x34, 0x34, 0x34, 0x34, 0x12, 0x1A, 0x4F, 0x52, 0x52, 0x52, 0x52, 0x55, 0x52, 0x52, - 0x52, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5C, 0x36, 0x1B, 0x1B, 0x1B, 0x1A, 0x59, - 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, - 0x0, 0x9B, 0x6E, 0xFE, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, - 0xEA, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x41, 0x38, - 0x30, 0xD, 0x6, 0x4, 0x4, 0x5, 0xFE, 0x0, 0x1F, 0x1F, 0x1F, 0x1E, 0x46, 0x4F, 0x4F, 0x46, - 0x46, 0x46, 0x4F, 0x46, 0x43, 0x43, 0x1D, 0x1A, 0x3, 0xFE, 0xFE, 0xFE, 0x0, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x0, 0xFE, 0x12, 0x0, 0x0, 0x0, 0x0, 0x12, 0x34, 0x1, 0x1, 0x1, 0x1, 0x1, - 0x0, 0x12, 0x1, 0x1, 0x1, 0x1, 0x1, 0x43, 0x43, 0x55, 0x5C, 0x5C, 0x5C, 0xC0, 0xC0, 0xC0, - 0xBF, 0xC9, 0xCA, 0xC0, 0xC0, 0xCA, 0x36, 0x34, 0xC9, 0xC9, 0xC9, 0xC0, 0xC9, 0xC9, 0x5A, 0x5C, - 0x5C, 0x55, 0x55, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0x5C, 0xBF, 0x5C, 0x5A, 0x5A, 0xCC, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, - 0x4, 0xAF, 0x3E, 0x0, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, - 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, - 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xE9, 0xEA, - 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x41, 0x38, - 0x2C, 0x2C, 0xD, 0x4, 0x4, 0x4, 0x4, 0x39, 0x71, 0x1F, 0x1E, 0x1E, 0xCA, 0xCA, 0x5C, 0x5C, - 0xCA, 0xC9, 0xCA, 0xCA, 0x5C, 0x5C, 0x5C, 0xC9, 0x4C, 0xFE, 0xFE, 0xFE, 0xA, 0x5C, 0x5C, 0x5C, - 0x5C, 0xBF, 0x1, 0xFE, 0x34, 0x8, 0x0, 0x0, 0x0, 0x12, 0x1A, 0x1, 0x1, 0xF, 0xF, 0xF, - 0x1, 0x2F, 0x96, 0x18, 0x11, 0x11, 0x19, 0x42, 0x43, 0x55, 0xC9, 0xC9, 0xCE, 0xCB, 0xCE, 0xC9, - 0xCD, 0xCD, 0xCF, 0xCF, 0xCE, 0xD0, 0x54, 0x36, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, - 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCA, 0xCB, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, - 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x23, - 0x5, 0xAF, 0x37, 0xB, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF7, - 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, - 0x2C, 0x2C, 0xD, 0x4, 0x4, 0x4, 0x20, 0xDB, 0xB5, 0x1E, 0x4, 0x1E, 0xC9, 0xC9, 0xC9, 0x5C, - 0xC9, 0xC9, 0xCC, 0xCC, 0xCA, 0xC9, 0x5C, 0x5C, 0x55, 0x0, 0xFE, 0xFE, 0x0, 0x5C, 0x5C, 0x5C, - 0x5C, 0x5C, 0x12, 0x0, 0x43, 0x1A, 0x0, 0x0, 0x0, 0xA, 0x3, 0x1, 0x1, 0xF, 0xF, 0xF, - 0xF, 0xF, 0x10, 0x10, 0x11, 0x11, 0x11, 0x43, 0x43, 0x55, 0xC9, 0xCD, 0xCE, 0xCE, 0xCE, 0xD0, - 0xD0, 0xCD, 0xCE, 0xCC, 0xCC, 0xCC, 0xBF, 0x3D, 0xCB, 0xCB, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xD0, - 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, - 0x4, 0xAF, 0x37, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, - 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, - 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, - 0x33, 0x2C, 0xD, 0x2, 0x6, 0x4, 0x4, 0xD5, 0xB2, 0x4, 0x4, 0x1E, 0xCB, 0xCB, 0xE4, 0xC6, - 0xCA, 0xC9, 0xCA, 0xCC, 0xCC, 0xC9, 0xC9, 0xC9, 0xC9, 0x36, 0xFE, 0xFE, 0xFE, 0x36, 0x5C, 0xC9, - 0xC9, 0xC9, 0x46, 0x0, 0x43, 0x46, 0x1, 0x0, 0x0, 0x1, 0x1, 0xA, 0x95, 0x2E, 0xF, 0xF, - 0xF, 0xF, 0xF, 0xF, 0x10, 0x10, 0x11, 0x47, 0x43, 0x55, 0xC9, 0xCD, 0xCD, 0xC2, 0xCD, 0xCE, - 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xC0, - 0x5D, 0xC0, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5A, 0x58, 0x5B, 0x7, - 0x4, 0x71, 0x6C, 0x0, 0xD7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, - 0x33, 0x2C, 0x7, 0x4, 0xB, 0x4, 0x4, 0xD5, 0xB5, 0x4, 0x4, 0x4, 0xCC, 0xCC, 0xC8, 0xC3, - 0xC9, 0xC9, 0xC9, 0x5C, 0x5C, 0xC9, 0xBF, 0x55, 0xAD, 0x53, 0x12, 0xFE, 0xFE, 0x0, 0x1A, 0x55, - 0x55, 0x55, 0x53, 0x0, 0x43, 0x5A, 0x12, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, - 0xF, 0xF, 0xF, 0xF, 0xF, 0x10, 0x10, 0x59, 0x42, 0x59, 0x59, 0xBF, 0xCD, 0xCD, 0xCD, 0xCE, - 0xD0, 0xD0, 0xCC, 0xCC, 0xCE, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, - 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x4, - 0x4, 0x79, 0x6B, 0x6, 0x29, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, - 0x33, 0x31, 0xC, 0x4, 0x4, 0x4, 0x4, 0xDB, 0xD5, 0x4, 0x4, 0x4, 0xCC, 0xCA, 0xC6, 0xC3, - 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, 0xBF, 0xBF, 0x55, 0x55, 0x1, 0xFE, 0x0, 0x1, 0x46, - 0x5C, 0x5C, 0x5C, 0x12, 0x36, 0x5A, 0x5A, 0x1A, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, - 0x3, 0x27, 0x2E, 0xA, 0x4B, 0x32, 0x12, 0x5C, 0x1B, 0x59, 0x59, 0xC1, 0xBF, 0xAD, 0xAD, 0xAD, - 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, - 0x4, 0x9B, 0x29, 0x20, 0x29, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBB, 0xA3, - 0x3A, 0x33, 0xE, 0x5, 0x4, 0x4, 0x1F, 0xE6, 0xB2, 0x4, 0x4, 0x1E, 0xCA, 0xC9, 0x5C, 0x5A, - 0x5C, 0xC9, 0x5C, 0xCA, 0xCC, 0xCA, 0xC9, 0x5C, 0xC9, 0x55, 0x5A, 0x46, 0x10, 0x1, 0x0, 0x1, - 0x3, 0x1B, 0x1B, 0x18, 0x18, 0x43, 0x1D, 0x12, 0x1, 0x1D, 0x43, 0x43, 0x36, 0x46, 0x46, 0x46, - 0x46, 0x52, 0x4F, 0x4F, 0x52, 0x4F, 0x53, 0xBF, 0x18, 0x50, 0x56, 0xBF, 0xC2, 0xCD, 0xCD, 0xCD, - 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x5B, 0x58, 0x5A, 0x5A, 0xE, - 0x0, 0x79, 0x6B, 0x6, 0xD5, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xAA, - 0x3C, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xDB, 0xB2, 0x4, 0x4, 0x1E, 0x5C, 0x5C, 0x5C, 0x5C, - 0x5C, 0x5C, 0xBF, 0xCA, 0xCA, 0xC9, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, 0xBF, 0x49, 0x44, 0x13, 0x13, - 0x10, 0x10, 0xF, 0x10, 0x10, 0x3, 0x1, 0x3, 0x3, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, - 0xBF, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xBF, 0x12, 0x7, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x1A, 0x1B, 0x1A, 0x1A, 0x1B, 0x34, 0x34, 0x1D, 0x36, 0x46, 0x46, 0x46, 0x46, 0x55, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x5A, 0x7, - 0x4, 0x9B, 0x6B, 0xD, 0x1F, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, - 0x3C, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xDB, 0xD5, 0x4, 0x4, 0x1E, 0x54, 0x53, 0x53, 0x55, - 0x5A, 0x5A, 0x55, 0x53, 0x55, 0x55, 0x55, 0x53, 0x53, 0x52, 0x53, 0x53, 0x52, 0x4A, 0xBE, 0x4A, - 0x49, 0x49, 0x45, 0x45, 0x45, 0x44, 0x12, 0x34, 0x3, 0xC9, 0x5C, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, - 0xBF, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xBF, 0x55, 0x53, 0x55, 0x53, 0x53, 0x53, 0x53, 0x53, - 0x53, 0x53, 0x53, 0x53, 0x52, 0x52, 0x4F, 0x4F, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x46, 0x50, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x5B, 0x5B, 0x5A, 0x5A, 0x7, - 0x4, 0x9A, 0x28, 0xD, 0x9B, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, - 0x41, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xE6, 0xD5, 0x4, 0x4, 0x1E, 0x2F, 0x1A, 0x1C, 0x46, - 0x45, 0x45, 0x44, 0x13, 0x13, 0x13, 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x12, 0x12, 0x44, 0x49, - 0xBE, 0xBE, 0xC1, 0xC1, 0xC1, 0xC2, 0xBF, 0xBF, 0x3, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, - 0xBF, 0xC9, 0xC9, 0xCE, 0xCD, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCE, 0xCB, 0xCE, 0xCE, 0xCE, 0xCE, - 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x9, - 0x6, 0x77, 0x67, 0xB, 0x28, 0x29, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xBB, - 0xA3, 0x3A, 0x32, 0xB, 0x4, 0x0, 0x6, 0xDB, 0xB2, 0x4, 0x1E, 0x1F, 0x1C, 0x1A, 0x1A, 0x1A, - 0x1A, 0x44, 0x49, 0x4A, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, - 0xC1, 0xC1, 0xBE, 0xBE, 0xBE, 0xBF, 0x5C, 0xC9, 0x46, 0xAD, 0xC9, 0xC9, 0xE7, 0x9D, 0xBF, 0xBF, - 0xAD, 0xBF, 0xC9, 0xBF, 0xC9, 0xC9, 0xCD, 0xC0, 0xC9, 0x5C, 0xBF, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, - 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCE, 0xCE, 0xD0, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, - 0x4, 0x79, 0x37, 0x6, 0x9D, 0x1F, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, - 0x94, 0x3A, 0x33, 0xD, 0x5, 0x4, 0x1F, 0xDB, 0xB2, 0x1E, 0x1F, 0x22, 0x1A, 0x1A, 0x1A, 0x8, - 0x3, 0x3, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x12, 0x1A, 0x1A, 0x1A, 0x2F, 0x34, - 0x36, 0x3D, 0x46, 0x3D, 0x59, 0x59, 0x5C, 0xC9, 0x5C, 0xBF, 0xBF, 0xBF, 0xAD, 0x54, 0xBF, 0x5A, - 0x5C, 0xBF, 0x5C, 0xBF, 0xBF, 0x5C, 0xC9, 0xC0, 0xC0, 0x5C, 0xBF, 0xC9, 0xCD, 0xCD, 0xCE, 0xCE, - 0xCA, 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x57, 0x58, 0x5B, 0x58, 0x58, 0x5B, 0x6, - 0x4, 0x9B, 0x37, 0xB, 0x9D, 0x65, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, - 0xA5, 0x3C, 0x33, 0xC, 0x4, 0x4, 0x1F, 0xDB, 0x9D, 0x4, 0x1F, 0x28, 0x1A, 0xA, 0xA, 0xA, - 0xA, 0x1, 0x1, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x8, 0x1A, 0x12, - 0x2D, 0x34, 0x34, 0x34, 0x55, 0xC0, 0x59, 0x53, 0x55, 0xC9, 0xCB, 0xCF, 0xCB, 0xCE, 0xCD, 0xCD, - 0xCB, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCD, 0xC9, 0xC9, 0x5C, 0xC9, 0xBF, 0xBF, 0xCB, 0xC9, 0xBF, - 0xBF, 0xCA, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x5A, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x5A, 0x5B, 0x6, - 0x4, 0xB5, 0x97, 0x1F, 0xB2, 0x65, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, - 0xA5, 0x3C, 0x33, 0xC, 0x4, 0x4, 0x1E, 0xE6, 0xD5, 0x4, 0x1F, 0x1F, 0x2F, 0x1A, 0xA, 0x3, - 0x7, 0x1, 0x3, 0x3, 0x3, 0x8, 0x3, 0x3, 0x8, 0xA, 0xA, 0x8, 0x8, 0xA, 0xA, 0x1A, - 0x2F, 0x34, 0x34, 0x2F, 0x53, 0xC0, 0x5A, 0x52, 0x52, 0xAD, 0xCF, 0xCF, 0xD0, 0xD0, 0xD0, 0xF3, - 0xF3, 0xF3, 0xF3, 0xF3, 0xC4, 0xCF, 0xCF, 0xCE, 0xC0, 0xC9, 0xC9, 0xBF, 0xBF, 0xAD, 0xAD, 0xBF, - 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCC, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x57, 0x57, 0x57, 0x58, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0xB, - 0x4, 0xE2, 0xAF, 0x20, 0xB2, 0x29, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, - 0xA5, 0x3C, 0x38, 0xC, 0x4, 0x4, 0x4, 0xDB, 0x9D, 0x4, 0x6, 0x1F, 0x1A, 0x3, 0x3, 0x3, - 0x1, 0x1, 0x8, 0x3, 0xA, 0x12, 0x8, 0x3, 0x1, 0x3, 0x3, 0x12, 0xA, 0x1A, 0x2E, 0x1A, - 0x1A, 0x2F, 0x34, 0x2F, 0x4F, 0xC0, 0x5A, 0x52, 0x52, 0x52, 0xAD, 0xC9, 0xC9, 0xCD, 0xCE, 0xCE, - 0xD0, 0xCE, 0xCE, 0xCE, 0xC9, 0xBF, 0xC9, 0xCD, 0xC0, 0xCE, 0xCD, 0xC9, 0xCD, 0xCD, 0xCD, 0xCE, - 0xCE, 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, 0xCD, 0xCE, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x5B, 0xB, - 0x4, 0xDB, 0x97, 0x20, 0xD5, 0x29, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, - 0xAA, 0x3C, 0x33, 0xC, 0x5, 0x4, 0x4, 0xD7, 0xB5, 0x4, 0x6, 0x6, 0x1A, 0xA, 0x1A, 0x3, - 0x1, 0x3, 0x8, 0x1, 0x3, 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1A, 0x1A, 0x1A, 0x2E, 0x1A, - 0x2F, 0x34, 0x36, 0x34, 0x46, 0x5C, 0x5C, 0x53, 0x4C, 0x52, 0x48, 0x48, 0x48, 0x52, 0xA6, 0xA6, - 0x5C, 0xBF, 0xC4, 0xCD, 0xC9, 0xBF, 0xBF, 0xC9, 0xCD, 0xCE, 0xCD, 0xC9, 0xC9, 0xCD, 0xCE, 0xCE, - 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x5B, 0x5B, 0x5, - 0x1F, 0xE2, 0x9B, 0x25, 0xB2, 0x29, 0xE6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xB7, 0xBD, 0xF5, 0xF8, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, - 0xA8, 0x3C, 0x33, 0xC, 0x5, 0x4, 0x4, 0xD5, 0xD5, 0x6, 0x6, 0x6, 0x1A, 0xA, 0x12, 0x3, - 0x3, 0x8, 0x8, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x12, 0x1A, 0x2D, 0x34, - 0x3D, 0x36, 0x3B, 0x36, 0x36, 0x5C, 0x5C, 0x53, 0x52, 0x54, 0x54, 0xAD, 0xBF, 0xBF, 0xBF, 0xAD, - 0xC9, 0xC9, 0xC9, 0xBF, 0xBF, 0xC9, 0xBF, 0xC9, 0xCD, 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, - 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0xB, - 0x6, 0xE1, 0x97, 0x20, 0x71, 0x1F, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xF0, 0xA3, 0x7, 0x38, 0xA3, 0xB4, - 0xF0, 0xF8, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, - 0xA8, 0x3C, 0x33, 0xB, 0x4, 0x4, 0x4, 0xB5, 0xD5, 0x6, 0x6, 0xD, 0x1A, 0xA, 0x1A, 0x7, - 0x1, 0x1, 0x1, 0x8, 0x8, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0xA, 0x1A, 0x1A, 0x2F, 0x34, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x5C, 0xC0, 0x55, 0x54, 0x54, 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0xAD, - 0xC9, 0x5C, 0xC9, 0xC9, 0xC9, 0xCD, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCD, 0xC9, 0xCD, 0xCE, 0xCE, - 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x6, - 0x6, 0xFC, 0xB5, 0x25, 0x71, 0x1F, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x94, 0x2C, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xD8, 0x2C, 0x0, 0xF, 0x8, 0x2D, - 0x3B, 0xA3, 0xB6, 0xEA, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, - 0xA4, 0x3A, 0x33, 0x5, 0x4, 0x4, 0x0, 0xAF, 0xB5, 0x4, 0x6, 0x6, 0x1A, 0xA, 0x3, 0x7, - 0x8, 0x3, 0x1, 0x1, 0x3, 0x8, 0x8, 0xA, 0xA, 0x3, 0xA, 0x3, 0x1A, 0x12, 0x1A, 0x1A, - 0x36, 0x36, 0x36, 0x36, 0x4C, 0xC9, 0xC0, 0x5A, 0xC9, 0xCF, 0xCD, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, - 0xCA, 0xCA, 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, - 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x20, - 0xB, 0xD7, 0x6E, 0x20, 0x71, 0x28, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0x2C, 0xB6, 0xA3, 0x31, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0x1, 0x1, - 0x8, 0x12, 0x2D, 0x41, 0xB7, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, - 0xA3, 0x3A, 0x33, 0x7, 0x5, 0x4, 0xFE, 0x72, 0x97, 0x2, 0x6, 0xD, 0x2F, 0x1A, 0x12, 0x2C, - 0x2D, 0xA, 0x8, 0x1, 0x1, 0x3, 0x8, 0x3, 0xA, 0x3, 0x3, 0x2E, 0x2E, 0x1A, 0x1A, 0x1C, - 0x36, 0x4C, 0x52, 0x4C, 0x4C, 0x5C, 0x5C, 0x5A, 0xAD, 0xC4, 0xAD, 0xC4, 0xAD, 0xC4, 0xC9, 0xCF, - 0xC9, 0xCA, 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, - 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x20, - 0xFE, 0x0, 0x6, 0xB, 0x39, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0x41, 0x33, 0xAA, 0x38, 0xF9, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0x0, 0x0, - 0x0, 0x1, 0x1, 0x8, 0x3B, 0xB7, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, 0xB7, - 0x94, 0x38, 0x25, 0xD, 0x4, 0x0, 0x0, 0x5, 0x20, 0xD, 0x25, 0xD, 0x2D, 0x12, 0xA, 0x7, - 0xA, 0x8, 0x1, 0x1, 0x1, 0x3, 0x8, 0x8, 0xA, 0xA, 0x3, 0xA, 0x12, 0xA, 0x12, 0x34, - 0x36, 0x4C, 0x4C, 0x3D, 0x4C, 0x5C, 0xC0, 0x5A, 0xAD, 0x54, 0x54, 0x54, 0x54, 0xA6, 0x54, 0xAD, - 0xC9, 0x5C, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, - 0xC9, 0xCD, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCC, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x25, - 0x4, 0x37, 0x39, 0x1F, 0x1F, 0xDB, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0x31, 0xBB, 0xFD, 0xFD, 0xBB, 0x3A, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x8, 0x2D, 0x2C, - 0x1, 0x0, 0x0, 0x0, 0x8, 0x3B, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF4, 0xF4, 0xF7, 0xE9, 0xB0, - 0x6F, 0x30, 0xB, 0x4, 0x4, 0x4, 0x4, 0xFE, 0x0, 0xD, 0x25, 0xD, 0x1A, 0xA, 0xA, 0x9, - 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x3, 0xA, 0x1A, 0x12, 0x12, 0x12, 0x1A, 0x1C, 0x36, - 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x55, 0x5C, 0x5C, 0xC4, 0x55, 0x54, 0x54, 0x54, 0xAD, 0xC4, 0xBF, - 0xC9, 0x5C, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, - 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xD0, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, - 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x20, - 0x1F, 0xD7, 0x97, 0xB, 0xD, 0xE0, 0xE0, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x41, 0xEC, 0xF0, - 0xB7, 0x41, 0x2C, 0x1, 0x0, 0x12, 0xAA, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF5, 0xE2, 0x22, 0x4, 0x4, 0x4, 0x1E, - 0x4, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x4, 0xFE, 0x0, 0x4, 0x0, 0x0, 0x4, 0x0, 0x0, - 0xFE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, - 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, - 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x4, 0xFE, 0x5, 0x5, - 0x4, 0x0, 0x0, 0xFE, 0x0, 0x4, 0x0, 0xFE, 0x4, 0xFE, 0x0, 0x0, 0x4, 0x5, 0x5, 0x5, - 0x0, 0x4, 0x5, 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x1E, - 0x4, 0x0, 0x4, 0x0, 0x0, 0x4, 0x4, 0x0, 0x6, 0xFE, 0x6, 0x4, 0xFE, 0x0, 0x0, 0x0, - 0xFE, 0x39, 0x25, 0xFE, 0x0, 0xB, 0x0, 0x4, 0x4, 0xB, 0x25, 0xBC, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA3, 0xE9, 0xD8, - 0xE9, 0xF0, 0xE9, 0xB4, 0x8, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xBD, 0xB5, 0x64, 0x77, 0x79, 0x70, 0x67, - 0x3E, 0x6C, 0x3E, 0x38, 0x3E, 0x20, 0x20, 0xB3, 0xF6, 0xAE, 0x3E, 0x6E, 0x6C, 0x6F, 0x25, 0x4, - 0x37, 0x97, 0xA7, 0xA7, 0xA9, 0x97, 0x97, 0x71, 0x39, 0x39, 0x37, 0x37, 0x39, 0x39, 0x39, 0x37, - 0x39, 0x37, 0x39, 0x23, 0x1, 0x23, 0xA8, 0xA8, 0x6E, 0x72, 0x72, 0x72, 0xB2, 0xB3, 0xAF, 0x9B, - 0x96, 0x96, 0x96, 0x97, 0x71, 0x6B, 0x6B, 0x71, 0x39, 0x37, 0x39, 0x29, 0x4, 0x4, 0x39, 0x71, - 0x37, 0x6B, 0xD5, 0xE1, 0xD5, 0xD5, 0xE6, 0xE6, 0xF4, 0xF4, 0xE2, 0xB5, 0xAF, 0x3E, 0x25, 0x25, - 0x0, 0xFE, 0x25, 0x6E, 0x37, 0x39, 0x71, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x65, 0x39, - 0x39, 0x32, 0x25, 0x2, 0xFE, 0x4, 0x39, 0x1F, 0x6, 0xD, 0xD, 0x6, 0xB, 0x6, 0x4, 0x4, - 0x1E, 0xD5, 0x39, 0x0, 0xFE, 0x6F, 0x20, 0x4, 0x1F, 0x4, 0x0, 0x38, 0xF7, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF9, 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA3, 0xEA, 0xBD, - 0xB6, 0xB6, 0xBD, 0xF7, 0x33, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xA4, 0x72, 0x64, 0x64, 0x21, 0x21, 0x22, - 0x20, 0x20, 0x20, 0x23, 0x30, 0x4, 0xFE, 0x30, 0xAE, 0x25, 0x6, 0x25, 0x20, 0x37, 0x25, 0xB, - 0x25, 0x32, 0x25, 0x25, 0x25, 0x6, 0x6, 0x1F, 0xD, 0xB, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, - 0x1E, 0x6, 0x20, 0x20, 0xB, 0x30, 0x30, 0xB, 0x16, 0x6, 0x6, 0x1F, 0x20, 0x25, 0x25, 0x1F, - 0x1F, 0x1F, 0x1F, 0x20, 0x25, 0x20, 0x25, 0x29, 0x25, 0x20, 0x25, 0x29, 0x1F, 0x1F, 0x37, 0x37, - 0x1F, 0x20, 0x39, 0x6B, 0x39, 0x37, 0x6B, 0x71, 0x6B, 0x6E, 0x6B, 0x97, 0xD5, 0xB5, 0xB5, 0xF4, - 0x30, 0x6, 0xA7, 0xF4, 0xD5, 0xE1, 0xE6, 0xE8, 0xE8, 0xE8, 0xE6, 0xE6, 0xE6, 0xE6, 0xE1, 0xE6, - 0xE1, 0xD5, 0xE2, 0xA5, 0x6, 0x20, 0xE6, 0xB2, 0x6E, 0xA7, 0x97, 0x3E, 0x39, 0x25, 0x1F, 0x25, - 0x37, 0xFC, 0xE0, 0x0, 0xB, 0xFC, 0xF4, 0xB2, 0x6E, 0x25, 0x4, 0x32, 0xEF, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF0, 0xF7, - 0xEA, 0xB7, 0xB4, 0xF0, 0x31, 0x3, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA4, 0x41, 0x6C, 0x66, 0x21, 0x1F, 0x20, 0x1E, - 0x5, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x5, - 0x6, 0x6, 0x4, 0x4, 0x6, 0x4, 0x4, 0x1E, 0x4, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x1F, - 0x1E, 0x1F, 0x6, 0x6, 0x20, 0x6, 0x6, 0x1F, 0x6, 0x6, 0x6, 0x1F, 0x1F, 0x4, 0x1F, 0x1F, - 0x1F, 0x1F, 0xB, 0xB, 0x20, 0x20, 0x20, 0xB, 0x20, 0xB, 0x20, 0x20, 0x1F, 0x4, 0x20, 0x1F, - 0x4, 0x4, 0x6, 0x1F, 0x1E, 0x4, 0x4, 0x20, 0x0, 0x4, 0x4, 0x0, 0x4, 0x30, 0x30, 0x25, - 0x37, 0x4, 0x37, 0x6C, 0x20, 0x29, 0x25, 0x25, 0x29, 0x29, 0x22, 0x22, 0x22, 0x29, 0x22, 0x67, - 0x1F, 0x20, 0x37, 0x25, 0xB, 0x1F, 0x39, 0x29, 0x37, 0x25, 0x32, 0x25, 0xB, 0x6, 0x0, 0x4, - 0x20, 0xF4, 0xAF, 0x4, 0x4, 0x6E, 0x20, 0x37, 0x25, 0xB, 0x6, 0x2C, 0xEF, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x33, 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF5, 0xFD, - 0xFD, 0xF0, 0xB6, 0xF0, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xAA, 0x48, 0x40, 0x29, 0x22, 0x37, 0x37, 0x25, - 0x20, 0xD, 0xE, 0x7, 0x0, 0x0, 0x0, 0x20, 0x1F, 0x4, 0x4, 0x6, 0x4, 0x6, 0xB, 0xB, - 0x1F, 0x1F, 0x6, 0x4, 0x6, 0x20, 0x20, 0x1F, 0x4, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x29, 0x20, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x6, 0x1F, 0x25, 0x25, 0x25, 0x25, 0x1F, 0x20, 0x25, - 0x25, 0x20, 0x25, 0x20, 0x20, 0x25, 0xD, 0x20, 0x20, 0x6, 0xB, 0x1F, 0x25, 0x25, 0x25, 0x1F, - 0x20, 0x1F, 0x4, 0x1F, 0x37, 0x25, 0x20, 0x4, 0x20, 0x20, 0x5, 0x20, 0x23, 0xB, 0x5, 0xB, - 0x5, 0x4, 0x4, 0xB, 0x4, 0xB, 0x1F, 0x1F, 0x4, 0xB, 0xB, 0xD, 0x1F, 0x20, 0x4, 0x6, - 0x20, 0x1F, 0x30, 0x20, 0xB, 0x20, 0x20, 0x20, 0xD, 0xB, 0xB, 0xD, 0x4, 0x4, 0x4, 0x1F, - 0x4, 0xD5, 0x9B, 0x4, 0x20, 0x1F, 0xB, 0x3E, 0xB6, 0xD8, 0xB0, 0x40, 0xEF, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF5, 0xFD, - 0xF9, 0xF5, 0xBD, 0xF0, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xAA, 0xA4, 0x41, 0x3E, 0x6B, 0x40, 0x3A, 0x39, - 0x37, 0x32, 0x2C, 0xE, 0x9, 0xFE, 0xFE, 0x37, 0x3E, 0x6, 0x6, 0x1F, 0x6, 0x6, 0xD, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x25, 0x30, 0x25, 0x20, 0x29, 0x37, 0x37, 0x30, 0x30, 0x25, 0x25, 0x25, - 0x37, 0x37, 0x30, 0x39, 0x6E, 0x37, 0x30, 0x37, 0x20, 0x29, 0x29, 0x29, 0x28, 0x28, 0x6B, 0x37, - 0x25, 0x1F, 0x25, 0x29, 0x29, 0x37, 0x37, 0x6E, 0x40, 0x97, 0xA9, 0x3E, 0x37, 0x25, 0x25, 0x39, - 0x37, 0x6B, 0x6E, 0x39, 0x39, 0x37, 0x6B, 0x25, 0x25, 0x20, 0x5, 0x4, 0x5, 0x4, 0x5, 0x25, - 0x3E, 0xAF, 0x37, 0x30, 0x20, 0xB, 0x37, 0x39, 0x20, 0x25, 0x25, 0x20, 0x25, 0x39, 0x29, 0x37, - 0x25, 0x25, 0x37, 0x25, 0x20, 0x33, 0xE, 0xE, 0x32, 0x6E, 0x30, 0x3A, 0x38, 0xB, 0xB, 0x1F, - 0x4, 0xE8, 0xD5, 0x4, 0x65, 0x6E, 0xB4, 0xB7, 0xE9, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF0, 0xF7, - 0xB7, 0xEA, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xB7, 0xB4, 0xB4, 0xAA, 0xAA, 0xA8, 0xA3, - 0x3C, 0x33, 0x2D, 0x2D, 0xE, 0x0, 0x0, 0x3E, 0x6E, 0xB, 0xD, 0x20, 0x20, 0x20, 0x20, 0x25, - 0x20, 0x25, 0x20, 0x25, 0x39, 0x20, 0x4, 0x6E, 0x39, 0x37, 0x6E, 0x37, 0x20, 0x39, 0x37, 0x6B, - 0x37, 0x72, 0x6F, 0xBA, 0xD8, 0xA7, 0x6E, 0x37, 0x37, 0x37, 0x25, 0x6C, 0x71, 0x71, 0x3E, 0x37, - 0x37, 0x39, 0x3E, 0x6E, 0x32, 0x39, 0xA9, 0x37, 0x0, 0x0, 0xB0, 0xD8, 0xA7, 0x32, 0x39, 0x6E, - 0x39, 0x37, 0x6F, 0x6E, 0xA7, 0x37, 0x6E, 0x6F, 0xD, 0x6F, 0x30, 0xE2, 0xB0, 0xFB, 0xB0, 0x20, - 0x6, 0x25, 0x37, 0x25, 0x32, 0x37, 0x37, 0x40, 0x37, 0x6E, 0x6E, 0x6F, 0x6E, 0xAF, 0xA9, 0xB5, - 0x97, 0xA9, 0xB0, 0xE2, 0xBC, 0xBC, 0xBA, 0xAF, 0x97, 0xA9, 0xD7, 0x6E, 0xB, 0x20, 0x20, 0x20, - 0x2, 0xE1, 0x9B, 0x1F, 0xB5, 0xBD, 0xD8, 0xE9, 0xF0, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xAA, 0xF5, 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xA4, 0xF0, 0xF5, - 0x31, 0xAA, 0xF0, 0xF5, 0x33, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF0, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xBD, 0xB6, - 0xA3, 0x3C, 0x33, 0x31, 0xE, 0x0, 0xFE, 0x3E, 0x6E, 0x4, 0x5, 0x20, 0x20, 0x20, 0x20, 0x29, - 0x29, 0x37, 0x39, 0x37, 0xD, 0xD, 0xD, 0xB, 0x4, 0x20, 0xAE, 0x97, 0xA7, 0x3E, 0x6E, 0xBA, - 0xBA, 0xB5, 0x20, 0x0, 0x0, 0x0, 0x30, 0xA7, 0x3E, 0x6E, 0x6F, 0x97, 0x6F, 0xAF, 0xAF, 0xB0, - 0x6E, 0x6E, 0xAF, 0xA9, 0x6E, 0x97, 0x39, 0x6, 0x33, 0x30, 0x5, 0xFE, 0xF6, 0xD8, 0xAF, 0x6E, - 0xB0, 0xA7, 0xB5, 0xB0, 0xBC, 0xA7, 0xAF, 0xA9, 0x6F, 0xF6, 0xBC, 0xFB, 0x0, 0xB, 0xFD, 0xEF, - 0x6F, 0x37, 0xBA, 0x39, 0xF4, 0xBA, 0xE2, 0xBC, 0xA7, 0xAF, 0xD7, 0xD7, 0xE2, 0xA9, 0x6, 0xE2, - 0xB5, 0xFC, 0xFC, 0xFE, 0x0, 0xFE, 0x40, 0xFC, 0xFC, 0xF6, 0xEF, 0x3E, 0x4, 0xB, 0x20, 0x30, - 0x1F, 0xE6, 0x9B, 0x20, 0xEF, 0xF5, 0xF1, 0xF0, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0x2C, 0xAA, 0xBD, 0xF0, 0xF9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xD8, 0xE, 0x1, 0x94, 0xE9, 0xEA, - 0x2C, 0xA3, 0xEA, 0xF5, 0x31, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xF7, 0xF5, 0xF0, 0xE9, - 0xB4, 0x94, 0x38, 0x31, 0x2C, 0x0, 0x0, 0x3E, 0x6F, 0x6, 0x4, 0x4, 0x5, 0xB, 0xB, 0x4, - 0x1F, 0x6, 0x1F, 0xD, 0x20, 0x33, 0x3C, 0x32, 0x32, 0xD, 0x25, 0xA9, 0x6F, 0xA7, 0x25, 0xB, - 0x20, 0x30, 0x33, 0x3F, 0x3C, 0x33, 0x30, 0xB, 0x30, 0x32, 0x6E, 0x40, 0xD, 0x4, 0x4, 0x37, - 0xA7, 0x30, 0x30, 0x32, 0x40, 0xA7, 0x38, 0x2C, 0x3A, 0x33, 0x3A, 0x30, 0x7, 0x40, 0xB0, 0xBC, - 0xBB, 0xBA, 0xD8, 0xBC, 0xBB, 0xB6, 0xD8, 0xE9, 0xE9, 0xBC, 0xBD, 0x0, 0x32, 0x32, 0xFE, 0x32, - 0xFC, 0xEF, 0xE2, 0xED, 0xEF, 0xFE, 0x40, 0xE2, 0xB5, 0xD8, 0xB5, 0x6F, 0x7, 0xB, 0x32, 0xE, - 0x0, 0xAA, 0x2C, 0x94, 0x94, 0x3B, 0x3C, 0x7, 0x0, 0x0, 0xD, 0x30, 0x33, 0x37, 0x30, 0x25, - 0x4, 0xE6, 0x79, 0x20, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x41, 0x33, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBB, 0xE9, 0x31, 0x1, 0x2D, 0x3A, 0x34, - 0x2C, 0xA4, 0xEA, 0xF5, 0x33, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, - 0xBD, 0xA3, 0x38, 0x33, 0x31, 0x4, 0xFE, 0x3E, 0x6B, 0x30, 0x6E, 0x3E, 0x38, 0x38, 0x30, 0xB, - 0x6, 0xD, 0xD, 0x32, 0xA3, 0xA3, 0x3C, 0x3D, 0x6F, 0x33, 0x30, 0xE, 0x33, 0x38, 0xAA, 0xBD, - 0xBA, 0xB6, 0xA3, 0x41, 0x41, 0x3F, 0x41, 0x41, 0x2C, 0xE, 0xE, 0xE, 0x32, 0xA3, 0x33, 0xE, - 0x5, 0x5, 0xE, 0x33, 0x40, 0x40, 0x41, 0xA3, 0x94, 0x41, 0x41, 0x38, 0x33, 0x2C, 0x31, 0xE, - 0xE, 0x9, 0x7, 0x7, 0x7, 0x7, 0x7, 0x9, 0xE, 0xE, 0xE, 0x38, 0x3A, 0x38, 0x40, 0xD, - 0x0, 0x0, 0x7, 0x0, 0xB, 0x33, 0x7, 0x2C, 0xD, 0x16, 0x16, 0x32, 0x6F, 0xB4, 0xA3, 0xB6, - 0xB4, 0x3A, 0xB7, 0xA4, 0xA4, 0xA4, 0xA4, 0xB4, 0xB7, 0xB4, 0xA3, 0x3B, 0x33, 0x33, 0x37, 0x30, - 0x1F, 0xE6, 0x9B, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x3F, 0x33, 0xE9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB8, 0xEE, 0x41, 0x0, 0x1, 0x1, 0x1, - 0x2C, 0xA8, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xD8, 0xA8, 0x3A, 0x33, 0x33, 0x4, 0xFE, 0x39, 0x6E, 0x37, 0xA7, 0x41, 0x3C, 0x3F, 0x6F, 0xA7, - 0xB0, 0xD7, 0xD8, 0xD8, 0xD8, 0xB6, 0xB4, 0xB4, 0xA8, 0xB7, 0xBB, 0xE9, 0xD8, 0xE9, 0xD8, 0xD8, - 0xD8, 0xE9, 0xBD, 0xB7, 0xB4, 0xAA, 0xA3, 0xA3, 0xAA, 0xAA, 0xAA, 0xAA, 0xA3, 0xA8, 0xA3, 0xAA, - 0xB6, 0xBD, 0xBD, 0xD8, 0xE9, 0xE9, 0xE9, 0xE9, 0xB6, 0xB6, 0xA8, 0xA8, 0xAA, 0xA3, 0xAA, 0xAA, - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xB4, 0xAA, 0xB4, 0xB4, 0xAA, 0xB4, 0xA3, 0xA3, 0x3C, 0x41, 0xA3, - 0x41, 0xA3, 0x6F, 0xA9, 0xAA, 0xA7, 0xA9, 0xB6, 0xBC, 0xD8, 0xD8, 0xBD, 0xB6, 0xB6, 0xB7, 0xEA, - 0xEB, 0xEF, 0xEB, 0xD8, 0xEA, 0xB7, 0xBD, 0xBD, 0xB9, 0xB7, 0xB4, 0xA3, 0x38, 0x38, 0x3C, 0x37, - 0x1E, 0xE6, 0x9B, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0x3A, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xE9, 0xD8, 0x8, 0x0, 0x0, 0x0, - 0x12, 0xA4, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xD8, 0xAA, 0x3B, 0x38, 0x38, 0x4, 0x0, 0x6E, 0x71, 0x6E, 0xBC, 0xB6, 0xB4, 0xB4, 0xB4, 0xBA, - 0xBD, 0xEB, 0xF0, 0xF0, 0xEB, 0xE9, 0xEA, 0xE9, 0xE9, 0xD8, 0xE9, 0xF0, 0xEA, 0xF0, 0xFD, 0xF0, - 0xFD, 0xF0, 0xF1, 0xF1, 0xE9, 0xE9, 0xE9, 0xBD, 0xD8, 0xD8, 0xBD, 0xBD, 0xB7, 0xB7, 0xBD, 0xBD, - 0xBD, 0xE9, 0xEE, 0xEE, 0xF0, 0xF5, 0xF5, 0xF5, 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xD8, 0xB6, 0xB7, - 0xB6, 0xB8, 0xB6, 0xB8, 0xB6, 0xB8, 0xB8, 0xBD, 0xBD, 0xBD, 0xB8, 0xB8, 0xB6, 0xB8, 0xAA, 0xAA, - 0xB4, 0xAA, 0xB6, 0xAA, 0xB8, 0xBB, 0xBB, 0xBD, 0xE9, 0xE9, 0xEE, 0xEE, 0xE9, 0xEA, 0xF0, 0xF0, - 0xEF, 0xFD, 0xF2, 0xF0, 0xF0, 0xF2, 0xEF, 0xF2, 0xF5, 0xEA, 0xBD, 0xB6, 0x94, 0x3F, 0x40, 0x3A, - 0x20, 0x9B, 0x29, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xB6, 0xF0, 0xB7, 0xE, 0x1, 0x0, - 0x8, 0x94, 0xEA, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xE9, 0xAA, 0x3B, 0x38, 0x3A, 0x4, 0x4, 0x9B, 0x39, 0xAF, 0xF7, 0xEA, 0xE9, 0xE9, 0xE9, 0xEF, - 0xF7, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF0, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xF0, 0xF0, 0xF5, 0xF0, 0xF0, 0xF0, 0xF5, 0xF0, 0xF0, 0xF0, 0xF0, - 0xF5, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF9, 0xEF, 0xF0, 0xF0, 0xF5, 0xF5, 0xF0, - 0xF0, 0xEE, 0xE9, 0xEE, 0xF0, 0xF0, 0xEE, 0xF0, 0xF0, 0xF5, 0xEE, 0xF7, 0xE9, 0xE9, 0xF0, 0xBD, - 0xE9, 0xEA, 0xE9, 0xEE, 0xEE, 0xF0, 0xF7, 0xF5, 0xF5, 0xFD, 0xFD, 0xF7, 0xFD, 0xF5, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x94, 0x94, 0x3F, - 0x30, 0x3E, 0xB5, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEA, 0xBD, 0xE9, 0xF5, 0xE9, 0xA3, 0x3A, - 0x8, 0x3A, 0xE9, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xEA, 0xB4, 0x3F, 0x3A, 0x3C, 0x4, 0x0, 0x6E, 0x29, 0xAF, 0xFD, 0xF7, 0xF8, 0xF7, 0xFD, 0xF7, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xFD, 0xF7, 0xF5, 0xFD, - 0xF5, 0xF5, 0xF5, 0xFD, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xEA, 0xBD, 0xB4, 0xB4, 0xB7, - 0xF1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xEA, 0xD8, 0xF5, 0xF7, 0xF5, 0xF0, - 0xB6, 0xB4, 0xE9, 0xF5, 0x33, 0x1, 0x3B, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xFB, 0xF4, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xE9, 0xB6, 0x3F, 0x3A, 0x41, 0x5, 0x0, 0x3E, 0x20, 0xA9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xEA, 0xE9, 0xE9, 0xE9, - 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xBD, 0x38, 0xAA, 0xE9, 0xF0, 0xF7, - 0xF8, 0xF0, 0xBD, 0xF0, 0xB4, 0x2C, 0x33, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF8, 0xED, 0xD3, 0x8F, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xE9, 0xAA, 0x3C, 0x3F, 0x6F, 0xB, 0xFE, 0x4, 0x4, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF0, 0xF5, 0xF5, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0xE, 0x31, 0xAA, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBB, 0xBD, 0xE, 0x12, 0x3B, 0x41, 0xA3, - 0xBD, 0xF0, 0xF0, 0xF5, 0xF8, 0xF0, 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xE0, 0xD3, 0x84, 0x88, 0x88, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xEA, 0xB4, 0x41, 0x3A, 0x23, 0x4, 0xB, 0x30, 0xFE, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xB6, 0xF9, 0xFD, 0xF8, 0xBD, 0x33, 0xF8, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, 0xBD, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFB, 0xF4, 0xF4, 0xDF, 0xDD, 0xDD, 0xDD, 0xF4, 0xFB, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x3, 0x8, 0x2C, - 0x3B, 0x94, 0xAA, 0xBD, 0xF0, 0xF5, 0xF5, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xED, - 0xD3, 0x8A, 0x86, 0x87, 0x89, 0x91, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, - 0xE9, 0xB4, 0x6F, 0x3E, 0xC, 0xFE, 0x4, 0xB, 0xFE, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, 0x41, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF7, 0xDC, 0x91, 0x8F, 0x8F, 0x89, 0x88, 0x88, 0x88, 0x8F, 0x93, 0xDF, 0xFB, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x0, 0x1, 0x1, - 0xF, 0x12, 0x2D, 0x38, 0xA4, 0xB7, 0xEA, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD4, 0x8A, - 0x86, 0x87, 0x87, 0x89, 0xD4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, - 0xE9, 0xB4, 0x41, 0x3F, 0x30, 0x0, 0xFE, 0xFE, 0x0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0x3F, 0xFD, 0xFD, 0xF9, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xEE, 0xB1, 0x83, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, - 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x33, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x12, 0x3A, 0xB4, 0xF7, 0xFD, 0xFD, 0xF9, 0xF5, 0xD9, 0x8D, 0x89, 0x85, - 0x87, 0x87, 0x87, 0x90, 0xF4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xE9, 0xB6, 0x94, 0xA3, 0x94, 0x3A, 0x3A, 0x94, 0xA3, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x38, 0xE9, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xAA, 0xF5, 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xEE, 0xA8, 0x69, 0x7E, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x88, 0x89, 0x93, 0xDF, 0xFB, 0xFC, 0xFD, 0xFD, 0xE9, 0xB6, 0xEA, 0xF0, 0xB7, 0x41, 0x2C, 0x7, - 0x0, 0x0, 0x0, 0x0, 0x1, 0x8, 0x94, 0xF5, 0xF9, 0xF4, 0xD9, 0x8D, 0x86, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x88, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xD8, 0xAA, 0xAA, 0xB4, 0xBD, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xBD, 0x38, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0x2C, 0xAA, 0xBD, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xED, 0xB3, 0x72, 0x66, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x89, 0x92, 0xDD, 0xF4, 0xFB, 0xF0, 0xB7, 0xB6, 0xBD, 0xEA, 0xF0, 0xE9, 0xB4, - 0x3B, 0x2C, 0x7, 0x0, 0x0, 0x8, 0x41, 0xF0, 0xD9, 0x8D, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x89, 0xDA, 0xF4, 0xF4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0x3F, 0xFD, 0xFD, 0x2C, 0xEE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x41, 0x33, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF7, 0xE0, 0x90, 0x84, 0x84, 0x82, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0x8F, 0xDD, 0xDF, 0xED, 0xD8, 0xB7, 0xB6, 0xB6, 0xBD, 0xE9, - 0xEA, 0xD8, 0xB6, 0x3A, 0x1, 0x3, 0x41, 0xED, 0x8F, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x89, 0x8F, 0x8F, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x3F, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xEA, 0xAE, 0x83, 0x87, 0x87, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, 0xDF, 0xF4, 0xEB, 0xBD, 0xB7, 0xE9, - 0xE9, 0xEA, 0xE9, 0xEE, 0x2C, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF8, 0xD8, 0x6D, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDD, 0xD6, 0xEE, 0xB6, - 0xBB, 0xEE, 0xD8, 0xE0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xDF, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0xE, 0x2C, 0x41, 0xB6, 0xF5, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xBA, 0x74, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x75, 0xD6, 0x38, - 0x2C, 0xB4, 0xE0, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x89, 0x8F, 0x93, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF8, 0xBD, 0xA3, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF0, 0xAE, 0x63, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x3, 0x3F, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xD6, 0x76, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x1, 0x3A, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xFB, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xAE, 0x63, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x1, 0x3A, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0xD3, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xBD, 0xFD, 0xF0, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xEA, 0xFD, 0x3C, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xBB, 0xA7, 0x6A, 0x62, 0x7F, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x1, 0x3B, 0xD8, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x41, 0xE, 0x2C, 0xB6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xBD, 0x38, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xE9, 0xB7, 0xA7, 0x6A, 0x62, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x1, 0x3B, 0xBB, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0xDD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0x33, 0xEA, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF7, 0xE9, 0xB6, 0x72, 0x6A, 0x62, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, - 0x1, 0x2D, 0x3F, 0x38, 0x1, 0x8, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x84, 0x91, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xEA, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xE, 0xA3, 0xFD, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEA, 0xB8, 0xA7, 0x6A, 0x62, 0x7F, 0x85, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x7A, - 0x0, 0x1, 0x3, 0x1, 0x1, 0x8, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x84, 0x8E, 0xDC, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xFD, 0xFD, 0xFD, 0x41, 0xFD, 0xFD, 0x2C, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEA, 0xB8, 0xA7, 0x6A, 0x61, 0x80, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0x8B, 0xD2, - 0x5, 0x0, 0x0, 0x0, 0x0, 0x8, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x89, 0x8A, 0xD3, 0xE0, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, 0xFD, 0xBB, 0xE, 0xF0, 0xE9, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xB6, 0x6F, 0x5E, 0x80, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0x8F, 0x89, 0x5F, 0x60, 0xD9, - 0x3E, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3E, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x86, 0x8A, 0xD4, 0xED, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xE, 0x31, 0xB6, 0xE, 0xE, 0xB6, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB7, 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEB, 0xB0, 0x69, 0x7F, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x83, 0xD4, 0xDA, 0xDF, 0xD3, 0x61, 0x75, - 0xDC, 0x37, 0x4, 0xFE, 0x0, 0x0, 0x3E, 0xDF, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x86, 0x8E, 0xED, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA3, 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF4, 0xD9, 0x8D, 0x83, 0x85, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0x23, 0x72, 0xE0, 0xD4, 0x60, - 0x76, 0xDA, 0xD2, 0x70, 0x30, 0x38, 0xD6, 0x92, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x89, 0xDD, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF4, 0xD4, 0x90, 0x89, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x2D, 0xB0, 0xD4, 0x75, - 0x75, 0x76, 0x8C, 0xD3, 0xD6, 0xD9, 0x8D, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDD, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB4, 0x41, 0xFD, 0xFD, 0xAA, 0x38, 0xEE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD4, 0x90, 0x89, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA8, 0xDA, 0xD9, - 0xD2, 0xD9, 0xD1, 0xD1, 0xDC, 0xDC, 0xDD, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0x93, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE9, 0xA3, 0xFD, 0xFD, 0xD8, 0x2C, - 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xEE, 0xD3, 0x8A, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA3, 0xED, 0xED, - 0x23, 0xA7, 0xE0, 0xF0, 0x38, 0x72, 0xDC, 0xDD, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xB6, 0xA8, 0xFD, 0xEE, 0xE, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF8, 0xE9, 0x8C, 0x86, 0x87, 0x85, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xB, 0x8, 0x94, 0xE0, 0xED, - 0x4, 0x2D, 0xAA, 0xF0, 0x23, 0xE, 0xA8, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDF, 0xFB, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, 0x2C, 0xBD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF7, 0xD8, 0x7A, 0x75, 0x63, 0x61, 0x62, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xB, 0x8, 0x94, 0xE0, 0xE0, - 0x4, 0x8, 0x94, 0xF0, 0x23, 0x7, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xFB, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF0, 0xBD, 0xB0, 0x78, 0x63, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xDC, 0xE0, - 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x93, 0xFB, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xA3, 0xFD, 0xFD, 0xF8, 0x41, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF7, 0xE9, 0x7C, 0x86, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xDC, 0xE0, - 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0xDD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xA3, 0xBD, 0x31, 0xBD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xF0, 0xAE, 0x83, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xE0, 0xE0, - 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x92, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x31, 0x2C, 0xF8, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xF9, 0xEA, 0xA7, 0x61, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA3, 0xED, 0xED, - 0x0, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x86, 0x89, 0xDD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0x31, 0xBD, 0xB6, 0xA3, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF5, 0xB8, 0x6C, 0x62, 0x80, 0x80, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA4, 0xEE, 0xEE, - 0x1, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x8A, 0xDD, 0xF4, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xF8, 0xFD, 0xFD, 0xB6, 0xA3, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xF9, 0xF0, 0xB6, 0x7A, 0x78, 0x69, 0x60, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x73, 0xBA, 0xE, 0x8, 0xA4, 0xF0, 0xF0, - 0x7, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xFC, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xF9, 0xF7, 0xEB, 0xB8, 0x70, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x84, 0x74, 0xAE, 0xBD, 0xE, 0x8, 0xA4, 0xF5, 0xF5, - 0x7, 0x8, 0xA4, 0xF0, 0x2C, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x80, 0x73, 0x73, 0x81, 0x80, 0x85, 0x87, 0x87, 0x87, 0x85, 0x86, 0x86, 0x89, 0x92, 0xFB, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBA, 0x74, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x88, 0x84, 0x8E, 0xD9, 0xBB, 0xB7, 0xBD, 0xE, 0x8, 0xAA, 0xF0, 0xF5, - 0x8, 0x8, 0xA4, 0xF5, 0x2D, 0x1, 0x3F, 0xE0, 0x84, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x88, 0x84, 0x7B, 0x7A, 0x70, 0x73, 0x82, 0x83, 0x84, 0x8B, 0xB1, 0xB1, 0xD3, 0xDF, 0xFC, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, 0x6A, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x89, 0x8D, 0xD9, 0xF4, 0xF8, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x48, 0xB6, 0xB4, - 0x3, 0x12, 0xA4, 0xF5, 0x33, 0x1, 0x41, 0xEA, 0x7A, 0x61, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x86, 0x8D, 0xD6, 0xB6, 0xAE, 0xD1, 0xD9, 0xEE, 0xF0, 0xF0, 0xF5, 0xF9, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xA8, 0x70, 0x63, 0x81, 0x80, 0x83, 0x61, 0x62, 0x85, 0x87, - 0x87, 0x86, 0x8A, 0xD9, 0xF5, 0xF9, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x31, 0x1, 0x12, 0x2D, 0xE, - 0x1, 0x12, 0xA4, 0xF1, 0x34, 0x3, 0x41, 0xF0, 0xBB, 0x72, 0x6A, 0x60, 0x85, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xED, 0xF0, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x2C, 0xE, 0x38, 0xE9, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBA, 0xBA, 0xD6, 0xD8, 0xB4, 0x72, 0x74, 0x76, - 0xD1, 0xDC, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xEE, 0xAA, 0x1, 0x1, 0x1, 0x1, - 0x1, 0x3, 0x2D, 0x2D, 0x1, 0x8, 0x94, 0xF5, 0xF8, 0xEE, 0xB7, 0xA7, 0x68, 0x62, 0x7F, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0xF8, 0xF0, 0xE9, 0xD8, 0xE0, - 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xD8, 0xEE, 0x31, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x0, 0x8, 0x94, 0xF7, 0xFD, 0xF9, 0xF7, 0xE9, 0xB4, 0x72, 0x69, 0x62, - 0x85, 0x87, 0x87, 0x87, 0x89, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xBD, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xB6, 0xEE, 0xBD, 0x31, 0x1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0x8, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xD8, 0xB0, 0x72, - 0x61, 0x7E, 0x85, 0x89, 0xDD, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x33, 0xFD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD8, 0xEA, 0xF8, 0xF0, 0xB4, 0x41, - 0x2C, 0xE, 0x1, 0x0, 0x1, 0x1, 0x41, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, - 0xB0, 0xAE, 0xB3, 0xDC, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xBB, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xE9, 0xA4, 0xBD, 0xF5, 0xF8, 0xF8, - 0xF5, 0xEE, 0xAA, 0x2C, 0x1, 0xE, 0xB4, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF7, 0xF5, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xBD, 0xBD, 0xE, 0x33, 0xA4, 0xB6, 0xE9, - 0xF5, 0xF5, 0xF0, 0xE9, 0xAA, 0xB7, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1A, 0x34, 0x48, - 0xBD, 0xF0, 0xEA, 0xE9, 0xF0, 0xF0, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0xF, 0x12, - 0x48, 0xBD, 0xF0, 0xEA, 0xBD, 0xEE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x1, 0x1, 0x1, - 0x12, 0x94, 0xE9, 0xF5, 0x33, 0x3A, 0xD8, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x1, 0x1, 0x0, - 0x1, 0x34, 0xB7, 0xF7, 0x31, 0x8, 0xA4, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x2D, 0x48, 0x3A, - 0x0, 0x12, 0xAA, 0xF5, 0x31, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x7, 0xA4, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF5, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xA3, 0x31, 0x2C, 0x3F, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x33, 0x3, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xA8, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF5, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xF9, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF0, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x31, 0xE, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xF9, 0xE, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB6, 0x41, 0xE, 0xE, 0xB6, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x8, 0xA4, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, - 0x7, 0x7, 0x3B, 0xAB, 0x12, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x7, 0xA4, 0xF5, 0xF5, - 0x7, 0x1, 0x8, 0x8, 0x1, 0x8, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x33, 0x7, 0x3B, 0xF0, 0xF8, - 0x33, 0x0, 0x1, 0x1, 0x1, 0x8, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xEA, 0xE9, 0xAA, 0xA4, 0xE9, 0xF0, - 0xB6, 0x7, 0x0, 0x0, 0x1, 0x8, 0x41, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xB4, 0xBD, 0xE9, 0xEA, 0xBD, 0xB6, - 0xF5, 0xA8, 0x7, 0x0, 0x0, 0x1, 0x41, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xB7, 0xBB, 0xE9, 0xD8, 0xB4, - 0xBD, 0xF0, 0xB6, 0x3A, 0xE, 0x2C, 0xB7, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF5, 0xF8, 0xF7, 0xE9, - 0xB4, 0xBD, 0xEA, 0xEA, 0xB7, 0xBD, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, - 0xF5, 0xF0, 0xF5, 0xF8, 0xF9, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, - 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD - -}; diff --git a/backends/gp32/globals.h b/backends/gp32/globals.h deleted file mode 100644 index 425e3a2e91..0000000000 --- a/backends/gp32/globals.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2006 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GLOBALS_H -#define __GLOBALS_H - -enum { - FM_QUALITY_LOW = 0, - FM_QUALITY_MED, - FM_QUALITY_HI -}; - -struct GlobalVars { - uint16 cpuSpeed; - uint16 gammaRamp; - uint8 fmQuality; - uint32 sampleRate; -}; - -extern GlobalVars g_vars; - -#endif diff --git a/backends/gp32/gp32_launcher.cpp b/backends/gp32/gp32_launcher.cpp deleted file mode 100644 index c7061590d2..0000000000 --- a/backends/gp32/gp32_launcher.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" -#include "common/file.h" - -#include "base/engine.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" -#include "backends/gp32/gp32std_input.h" - -#include "backends/gp32/gfx_splash.h" -#include "backends/gp32/gp32_launcher.h" -#include "backends/gp32/globals.h" - -uint16 cpuSpeedTable[15] = {40, 66, 100, 120, 133, 144, 156, 160, 166, 172, 176, 180, 188, 192, 200}; -uint16 gammaTable[16] = {5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000}; -char *oplTable[3] = {"LOW", "MEDIUM", "HIGH"}; -uint16 sampleTable[4] = {0, 11025, 22050, 44100}; - -uint8 maxTable[5] = {15, 16, 3, 3, 2}; -uint8 currentSetting[5] = {2, 5, 1, 1, 0}; - -void writeConfigVars() { - Common::File file; - - g_vars.cpuSpeed = cpuSpeedTable[currentSetting[0]]; - g_vars.gammaRamp = gammaTable[currentSetting[1]]; - g_vars.fmQuality = currentSetting[2]; - g_vars.sampleRate = sampleTable[currentSetting[3]]; - - if (!file.open("gp:\\gpetc\\scummvm.cfg", Common::File::kFileWriteMode)) { - return; - } - file.writeByte(currentSetting[0]); - file.writeByte(currentSetting[1]); - file.writeByte(currentSetting[2]); - file.writeByte(currentSetting[3]); - file.close(); -} - -void readConfigVars() { - Common::File file; - if (!file.open("gp:\\gpetc\\scummvm.cfg", Common::File::kFileReadMode)) { - currentSetting[0] = 2; - currentSetting[1] = 5; - currentSetting[2] = 1; - currentSetting[3] = 1; - writeConfigVars(); - return; - } - currentSetting[0] = file.readByte(); - currentSetting[1] = file.readByte(); - currentSetting[2] = file.readByte(); - currentSetting[3] = file.readByte(); - g_vars.cpuSpeed = cpuSpeedTable[currentSetting[0]]; - g_vars.gammaRamp = gammaTable[currentSetting[1]]; - g_vars.fmQuality = currentSetting[2]; - g_vars.sampleRate = sampleTable[currentSetting[3]]; - file.close(); -} - -void configMenu() { - uint32 nKeyUD; - uint16 nKeyP; - - int currentSelect = 0; - char text[32]; - - // OK / CANCEL - currentSetting[4] = 0; - - while (1) { - gp_fillRect(frameBuffer2, 0, 0, 320, 240, 0xffff); - gp_textOut(frameBuffer2, 90, 10, "Configuration Menu", 0); - - gp_textOut(frameBuffer2, 30, 40, "CPU clock speed", 0); - gp_textOut(frameBuffer2, 30, 80, "Gamma ramp", 0); - gp_textOut(frameBuffer2, 30, 120, "FMOPL (AdLib) quality", 0); - gp_textOut(frameBuffer2, 30, 160, "Sampling rate", 0); - - gp_textOut(frameBuffer2, 100, 210, "OK CANCEL", 0); - - if (currentSelect == 4) { - gp_textOut(frameBuffer2, 80 + currentSetting[4] * 100, 210, "@", 0); - } else - gp_textOut(frameBuffer2, 20, (currentSelect + 1) * 40, "@", 0); - - sprintf(text, "%d MHz", cpuSpeedTable[currentSetting[0]]); - gp_textOut(frameBuffer2, 220, 40, text, 0); - sprintf(text, "%.2f", (float)gammaTable[currentSetting[1]] / 10000); - gp_textOut(frameBuffer2, 220, 80, text, 0); - gp_textOut(frameBuffer2, 220, 120, oplTable[currentSetting[2]], 0); - if (sampleTable[currentSetting[3]] == 0) { - strcpy(text, "NO SOUND"); - } else { - sprintf(text, "%d Hz", sampleTable[currentSetting[3]]); - } - gp_textOut(frameBuffer2, 220, 160, text, 0); - - gp_flipScreen(); - - gp_getButtonEvent(&nKeyUD, &nKeyP); - - if (gpd_getButtonDown(nKeyUD, GPC_VK_UP)) { - if (currentSelect > 0) - currentSelect--; - } - if (gpd_getButtonDown(nKeyUD, GPC_VK_DOWN)) { - if (currentSelect < 4) - currentSelect++; - } - if (gpd_getButtonDown(nKeyUD, GPC_VK_LEFT)) { - if (currentSelect <= 4) - if (currentSetting[currentSelect] > 0) - currentSetting[currentSelect]--; - } - if (gpd_getButtonDown(nKeyUD, GPC_VK_RIGHT)) { - if (currentSelect <= 4) - if (currentSetting[currentSelect] < maxTable[currentSelect] - 1) - currentSetting[currentSelect]++; - } - - if (gpd_getButtonUp(nKeyUD, GPC_VK_START) || - gpd_getButtonUp(nKeyUD, GPC_VK_FA)) { - if (currentSelect == 4) { - if (currentSetting[currentSelect] == 0) { // OK - writeConfigVars(); - return; - } else { // CANCEL - return; - } - } - } - } -} - -void splashScreen() { - uint32 nKeyUD; - uint16 nKeyP; - - while (1) { - uint16 *buffer = frameBuffer2;//&frameBuffer1[240 - _screenHeight]; - uint8 *picBuffer = gfx_splash; - - for (int c = 0; c < LCD_WIDTH * LCD_HEIGHT; c++) { - *buffer++ = gfx_splash_Pal[*picBuffer++]; - } - - gp_flipScreen(); - - while (1) { - gp_getButtonEvent(&nKeyUD, &nKeyP); - - if (gpd_getButtonUp(nKeyUD, GPC_VK_START) || - gpd_getButtonUp(nKeyUD, GPC_VK_FA)) { - gp_fillRect(frameBuffer1, 0, 0, 320, 240, 0xffff); - gp_fillRect(frameBuffer2, 0, 0, 320, 240, 0xffff); - return; - } - if (gpd_getButtonUp(nKeyUD, GPC_VK_SELECT)) { - configMenu(); - break; - } - } - } -} diff --git a/backends/gp32/gp32_launcher.h b/backends/gp32/gp32_launcher.h deleted file mode 100644 index 94b1f6ce85..0000000000 --- a/backends/gp32/gp32_launcher.h +++ /dev/null @@ -1,34 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32_LAUNCHER_H -#define __GP32_LAUNCHER_H - -#include "stdafx.h" -#include "common/scummsys.h" - -extern void readConfigVars(); - -extern void splashScreen(); - -#endif diff --git a/backends/gp32/gp32_main.cpp b/backends/gp32/gp32_main.cpp deleted file mode 100644 index 5d0442b8c6..0000000000 --- a/backends/gp32/gp32_main.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" - -#include "common/config-manager.h" - -#include "base/main.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" - -#include "backends/gp32/gp32_launcher.h" -#include "backends/gp32/gp32_osys.h" -#include "backends/gp32/globals.h" - -GlobalVars g_vars; - -void init() { - gp_setCpuSpeed(40); // Default CPU Speed - - GpGraphicModeSet(16, NULL); - - //if (type == NLU || type == FLU || type == BLU) - // gp_initFramebuffer(frameBuffer, 16, 85); - //else if (type == BLUPLUS) - // gp_initFramebufferBP(frameBuffer, 16, 85); - // else - // error("Invalid Console"); - gp_initFrameBuffer(); - - GpFatInit(); - GpRelativePathSet("gp:\\gpmm"); -} - -void GpMain(void *arg) { - extern void memBlockInit(); - memBlockInit(); - - init(); - - readConfigVars(); - - splashScreen(); - - //doConfig - gp_initGammaTable((float)g_vars.gammaRamp / 10000); - gp_setCpuSpeed(g_vars.cpuSpeed); - - // FOR DEBUG PURPOSE! - //int argc = 4; - //char *argv[] = { "scummvm", "-enull", "-pgp:\\game\\dott\\", "tentacle" }; - //int argc = 2; - //char *argv[] = { "scummvm", "-d5" }; - - extern OSystem *OSystem_GP32_create(); - g_system = OSystem_GP32_create(); - assert(g_system); - - // Invoke the actual ScummVM main entry point: - //int res = scummvm_main(argc, argv); - int res = scummvm_main(1, NULL); - - extern void memBlockDeinit(); - memBlockDeinit(); - - g_system->quit(); // TODO: Consider removing / replacing this! - - //return res; -} diff --git a/backends/gp32/gp32_osys.cpp b/backends/gp32/gp32_osys.cpp deleted file mode 100644 index 68adfb3576..0000000000 --- a/backends/gp32/gp32_osys.cpp +++ /dev/null @@ -1,775 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "backends/gp32/gp32_osys.h" - -#include "stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" - -#include "backends/gp32/globals.h" - -#include "common/rect.h" -#include "common/savefile.h" -#include "common/config-manager.h" - -static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { - {0, 0, 0} -}; - -OSystem_GP32::OSystem_GP32() : - _screenWidth(0), _screenHeight(0), _gameScreen(NULL), _hwScreen(NULL), - _overlayVisible(false), _forceFull(false), _adjustAspectRatio(false), - /*_paletteDirtyStart(0), _paletteDirtyEnd(0),*/ - _mouseBuf(NULL), _mouseHeight(0), _mouseWidth(0), _mouseKeyColor(0), - _mouseHotspotX(0), _mouseHotspotY(0) { - NP("OSys::OSystem_GP32()"); - // allocate palette storage - memset(_currentPalette, 0, 256 * sizeof(uint16)); - - memset(&_km, 0, sizeof(_km)); - - // HACK: bring mouse cursor to center - _mouseX = 160; - _mouseY = 120; -} - -OSystem_GP32::~OSystem_GP32() { - NP("OSys::~OSystem_GP32()"); -} - -bool OSystem_GP32::hasFeature(Feature f) { - NP("OSys::hasFeature()"); - return false; -} - -void OSystem_GP32::setFeatureState(Feature f, bool enable) { - NP("OSys::setFeatureState()"); -} - -bool OSystem_GP32::getFeatureState(Feature f) { - NP("OSys::getFeatureState()"); - return false; -} - -const OSystem::GraphicsMode* OSystem_GP32::getSupportedGraphicsModes() const { - NP("OSys::getSupportedGraphicsModes()"); - return s_supportedGraphicsModes; -} - - -int OSystem_GP32::getDefaultGraphicsMode() const { - NP("OSys::getSupportedGraphicsModes()"); - return -1; -} - -bool OSystem_GP32::setGraphicsMode(int mode) { - NP("OSys::setGraphicsMode()"); - return true; -} - -bool OSystem_GP32::setGraphicsMode(const char *name) { - NP("OSys::setGraphicsMode()"); - return true; -} - -int OSystem_GP32::getGraphicsMode() const { - NP("OSys::getGraphicsMode()"); - return -1; -} - -void OSystem_GP32::initSize(uint width, uint height) { - NP("OSys::initSize()"); - - if (width == _screenWidth && height == _screenHeight) - return; - - _screenWidth = width; - _screenHeight = height; - - if (height != 200) - _adjustAspectRatio = false; - - _overlayWidth = width; - _overlayHeight = height; -// _overlayWidth = 320; -// _overlayHeight = 240; - - // Create the surface that contains the 8 bit game data - _gameScreen = new uint8[_screenWidth * _screenHeight]; - - // Create the surface that contains the scaled graphics in 16 bit mode - _tmpScreen = frameBuffer2; - - // Create the surface that is connected with hardware screen - _hwScreen = frameBuffer1; - - _overlayBuffer = new OverlayColor[_overlayWidth * _overlayHeight]; - - _km.x_max = _screenWidth - 1; - _km.y_max = _screenHeight - 1; - _km.x = _mouseX; - _km.y = _mouseY; - _km.delay_time = 25; - _km.last_time = 0; - - // Clear Screen - gp_fillRect(_hwScreen, 0, 0, 320, 240, 0xFFFF); -} - -int16 OSystem_GP32::getHeight() { - //NP("OSys::getHeight()"); - return _screenHeight; -} - -int16 OSystem_GP32::getWidth() { - //NP("OSys::getWidth()"); - return _screenWidth; -} - -void OSystem_GP32::setPalette(const byte *colors, uint start, uint num) { - NP("OSys::setPalette()"); - const byte *b = colors; - uint i; - uint16 *base = _currentPalette + start; - for (i = 0; i < num; i++) { - base[i] = gp_RGBTo16(b[0], b[1], b[2]); - b += 4; - } - -// if (start < _paletteDirtyStart) -// _paletteDirtyStart = start; - -// if (start + num > _paletteDirtyEnd) -// _paletteDirtyEnd = start + num; -} - -void OSystem_GP32::grabPalette(byte *colors, uint start, uint num) { - NP("OSys::grabPalette()"); -} - -void OSystem_GP32::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) { - NP("OSys::copyRectToScreen()"); - //Clip the coordinates - if (x < 0) { - w += x; - src -= x; - x = 0; - } - - if (y < 0) { - h += y; - src -= y * pitch; - y = 0; - } - - if (w > _screenWidth - x) { - w = _screenWidth - x; - } - - if (h > _screenHeight - y) { - h = _screenHeight - y; - } - - if (w <= 0 || h <= 0) - return; - - byte *dst = _gameScreen + y * _screenWidth + x; - - if (_screenWidth == pitch && pitch == w) { - memcpy(dst, src, h * w); - } else { - do { - memcpy(dst, src, w); - src += pitch; - dst += _screenWidth; - } while (--h); - } -} - -//TODO: Implement Dirty rect? -void OSystem_GP32::updateScreen() { - uint16 *buffer; - //TODO: adjust shakePos - - // draw gamescreen - buffer = &_tmpScreen[240 - _screenHeight]; - for (int x = 0; x < _screenWidth; x++) { - for (int y = 0; y < _screenHeight; y++) { - *buffer++ = _currentPalette[_gameScreen[((_screenHeight - 1) - y) * _screenWidth + x]]; - } - buffer += 240 - _screenHeight; - } - - // draw overlay - if (_overlayVisible) { - buffer = &_tmpScreen[240 - _overlayHeight]; - for (int x = 0; x < _overlayWidth; x++) { - for (int y = 0; y < _overlayHeight; y++) { - *buffer++ = _overlayBuffer[((_overlayHeight - 1) - y) * _overlayWidth + x]; - } - buffer += 240 - _overlayHeight; - } - } - - // draw mouse - //adjust cursor position - int mX = _mouseX - _mouseHotspotX; - int mY = _mouseY - _mouseHotspotY; - //if (_overlayVisible) - //else - if (_mouseVisible) - for (int y = 0; y < _mouseHeight; y++) { - for (int x = 0; x < _mouseWidth; x++) { - if (mX + x < _screenWidth && mY + y < _screenHeight && mX + x >= 0 && mY + y >= 0) - if (_mouseBuf[y * _mouseWidth + x] != _mouseKeyColor) - gpd_drawPixel16(_tmpScreen, mX + x, mY + y, _currentPalette[_mouseBuf[y * _mouseWidth + x]]); - } - } - - //TODO: draw softkeyboard - //gp_flipScreen(); - //_hwScreen = frameBuffer1; - //_tmpScreen = frameBuffer2; - memcpy(_hwScreen, _tmpScreen, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); -} - -void OSystem_GP32::setShakePos(int shakeOffset) { - NP("OSys::setShakePos()"); -} - -void OSystem_GP32::showOverlay() { - NP("OSys::showOverlay()"); - _overlayVisible = true; - clearOverlay(); -} - -void OSystem_GP32::hideOverlay() { - NP("OSys::hideOverlay()"); - _overlayVisible = false; - clearOverlay(); - _forceFull = true; -} - -// Clear overlay with game screen -//TODO: Optimize? -void OSystem_GP32::clearOverlay() { - NP("OSys::clearOverlay()"); - if (!_overlayVisible) - return; - - uint8 *s = _gameScreen; - OverlayColor *d = _overlayBuffer; - uint8 c; - for (int y = 0; y < _overlayHeight; y++) { - for (int x = 0; x < _overlayWidth; x++) { - c = *s; - *d++ = _currentPalette[c]; - s++; - } - } - - _forceFull = true; -} - -void OSystem_GP32::grabOverlay(OverlayColor *buf, int pitch) { - NP("OSys::grabOverlay()"); - int h = _overlayHeight; - OverlayColor *src = _overlayBuffer; - - do { - memcpy(buf, src, _overlayWidth * sizeof(OverlayColor)); - src += _overlayWidth; - buf += pitch; - } while (--h); -} - -void OSystem_GP32::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { - NP("OSys::copyRectToOverlay()"); - - //Clip the coordinates - if (x < 0) { - w += x; - buf -= x; - x = 0; - } - - if (y < 0) { - h += y; - buf -= y * pitch; - y = 0; - } - - if (w > _overlayWidth - x) { - w = _overlayWidth - x; - } - - if (h > _overlayHeight - y) { - h = _overlayHeight - y; - } - - if (w <= 0 || h <= 0) - return; - - - OverlayColor *dst = _overlayBuffer + y * _overlayWidth + x; - if (_overlayWidth == pitch && pitch == w) { - memcpy(dst, buf, h * w * sizeof(OverlayColor)); - } else { - do { - memcpy(dst, buf, w * sizeof(OverlayColor)); - buf += pitch; - dst += _overlayWidth; - } while (--h); - } -} - -int16 OSystem_GP32::getOverlayHeight() { - return getHeight(); -} - -int16 OSystem_GP32::getOverlayWidth() { - return getWidth(); -} - -OverlayColor OSystem_GP32::RGBToColor(uint8 r, uint8 g, uint8 b) { - return gp_RGBTo16(r, g, b); -} - -void OSystem_GP32::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { - gp_16ToRGB(color, &r, &g, &b); -} - -bool OSystem_GP32::showMouse(bool visible) { - NP("OSys::showMouse()"); - if (_mouseVisible == visible) - return visible; - - bool last = _mouseVisible; - _mouseVisible = visible; - - updateScreen(); - - return last; -} - -void OSystem_GP32::warpMouse(int x, int y) { - NP("OSys::warpMouse()"); - //assert(x > 0 && x < _screenWidth); - //assert(y > 0 && y < _screenHeight); - _mouseX = x; - _mouseY = y; -} - -void OSystem_GP32::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { - NP("OSys::setMouseCursor()"); - _mouseWidth = w; - _mouseHeight = h; - - _mouseHotspotX = hotspotX; - _mouseHotspotY = hotspotY; - - _mouseKeyColor = keycolor; - - if (_mouseBuf) - free(_mouseBuf); - - _mouseBuf = (byte *)malloc(w * h); - memcpy(_mouseBuf, buf, w * h); -} - -void OSystem_GP32::handleKbdMouse() { - uint32 curTime = getMillis(); - if (curTime >= _km.last_time + _km.delay_time) { - _km.last_time = curTime; - if (_km.x_down_count == 1) { - _km.x_down_time = curTime; - _km.x_down_count = 2; - } - if (_km.y_down_count == 1) { - _km.y_down_time = curTime; - _km.y_down_count = 2; - } - - if (_km.x_vel || _km.y_vel) { - if (_km.x_down_count) { - if (curTime > _km.x_down_time + _km.delay_time * 12) { - if (_km.x_vel > 0) - _km.x_vel++; - else - _km.x_vel--; - } else if (curTime > _km.x_down_time + _km.delay_time * 8) { - if (_km.x_vel > 0) - _km.x_vel = 5; - else - _km.x_vel = -5; - } - } - if (_km.y_down_count) { - if (curTime > _km.y_down_time + _km.delay_time * 12) { - if (_km.y_vel > 0) - _km.y_vel++; - else - _km.y_vel--; - } else if (curTime > _km.y_down_time + _km.delay_time * 8) { - if (_km.y_vel > 0) - _km.y_vel = 5; - else - _km.y_vel = -5; - } - } - - //GPDEBUG("%d %d - %d %d", _km.x, _km.y, _km.x_vel, _km.y_vel); - _km.x += _km.x_vel; - _km.y += _km.y_vel; - - if (_km.x < 0) { - _km.x = 0; - _km.x_vel = -1; - _km.x_down_count = 1; - } else if (_km.x > _km.x_max) { - _km.x = _km.x_max; - _km.x_vel = 1; - _km.x_down_count = 1; - } - - if (_km.y < 0) { - _km.y = 0; - _km.y_vel = -1; - _km.y_down_count = 1; - } else if (_km.y > _km.y_max) { - _km.y = _km.y_max; - _km.y_vel = 1; - _km.y_down_count = 1; - } - - warpMouse(_km.x, _km.y); - } - } -} - -void OSystem_GP32::fillMouseEvent(Event &event, int x, int y) { - event.mouse.x = x; - event.mouse.y = y; - - // Update the "keyboard mouse" coords - _km.x = x; - _km.y = y; - - // Optionally perform aspect ratio adjusting - //if (_adjustAspectRatio) - // event.mouse.y = aspect2Real(event.mouse.y); -} - -bool OSystem_GP32::pollEvent(Event &event) { - NP("OSys::pollEvent()"); - GP32BtnEvent ev; - - handleKbdMouse(); - - if (!gp_pollButtonEvent(&ev)) - return false; - - switch(ev.type) { - case BUTTON_DOWN: - if (ev.button == GPC_VK_LEFT) { - _km.x_vel = -1; - _km.x_down_count = 1; - } - if (ev.button == GPC_VK_RIGHT) { - _km.x_vel = 1; - _km.x_down_count = 1; - } - if (ev.button == GPC_VK_UP) { - _km.y_vel = -1; - _km.y_down_count = 1; - } - if (ev.button == GPC_VK_DOWN) { - _km.y_vel = 1; - _km.y_down_count = 1; - } - if (ev.button == GPC_VK_START) { // START = menu/enter - event.type = EVENT_KEYDOWN; - if (_overlayVisible) - event.kbd.keycode = event.kbd.ascii = 13; - else - event.kbd.keycode = event.kbd.ascii = 319; - return true; - } - if (ev.button == GPC_VK_SELECT) { // SELECT = pause - event.type = EVENT_KEYDOWN; - event.kbd.keycode = event.kbd.ascii = 32; - return true; - } - if (ev.button == GPC_VK_FL) { - event.type = EVENT_KEYDOWN; - event.kbd.keycode = event.kbd.ascii = '0'; - return true; - } - if (ev.button == GPC_VK_FR) { // R = ESC - event.type = EVENT_KEYDOWN; - event.kbd.keycode = event.kbd.ascii = 27; - return true; - } - if (ev.button == GPC_VK_FA) { - event.type = EVENT_LBUTTONDOWN; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - if (ev.button == GPC_VK_FB) { - event.type = EVENT_RBUTTONDOWN; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - break; - case BUTTON_UP: - if (ev.button == GPC_VK_LEFT) { - if (_km.x_vel < 0) { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - if (ev.button == GPC_VK_RIGHT) { - if (_km.x_vel > 0) { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - if (ev.button == GPC_VK_UP) { - if (_km.y_vel < 0) { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - if (ev.button == GPC_VK_DOWN) { - if (_km.y_vel > 0) { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - - if (ev.button == GPC_VK_START) { - event.type = EVENT_KEYUP; - if (_overlayVisible) - event.kbd.keycode = event.kbd.ascii = 13; - else - event.kbd.keycode = event.kbd.ascii = 319; - return true; - } - if (ev.button == GPC_VK_SELECT) { - event.type = EVENT_KEYUP; - event.kbd.keycode = event.kbd.ascii = 32; - return true; - } - if (ev.button == GPC_VK_FL) { - event.type = EVENT_KEYUP; - event.kbd.keycode = event.kbd.ascii = '0'; - return true; - } - if (ev.button == GPC_VK_FR) { - event.type = EVENT_KEYUP; - event.kbd.keycode = event.kbd.ascii = 27; - return true; - } - if (ev.button == GPC_VK_FA) { - event.type = EVENT_LBUTTONUP; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - if (ev.button == GPC_VK_FB) { - event.type = EVENT_RBUTTONUP; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - break; - default: - error("Unknown Event!"); - } - - if (gp_getButtonPressed(GPC_VK_LEFT) || - gp_getButtonPressed(GPC_VK_RIGHT) || - gp_getButtonPressed(GPC_VK_UP) || - gp_getButtonPressed(GPC_VK_DOWN)) { - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - return true; - } - return false; -} - -uint32 OSystem_GP32::getMillis() { - return GpTickCountGet(); -} - -void OSystem_GP32::delayMillis(uint msecs) { - int startTime = GpTickCountGet(); - while (GpTickCountGet() < startTime + msecs); -} - -// Add a new callback timer -//FIXME: Add to member -int _timerInterval; -int (*_timerCallback)(int); - -static void _timerCallbackVoid() { - //NP("timer running"); - _timerCallback(_timerInterval); //FIXME ?? (*_timercallback)(_timerinterval); -} - -void OSystem_GP32::setTimerCallback(TimerProc callback, int interval) { - NP("OSys::setTimerCallback()"); - - int timerNo = 1; - - if (callback == NULL) { - GpTimerKill(timerNo); - return; - } - - if (GpTimerOptSet(timerNo, interval, 0, _timerCallbackVoid) == GPOS_ERR_ALREADY_USED) { - error("Timer slot is already used"); - } - - _timerInterval = interval; - _timerCallback = callback; - - GpTimerSet(timerNo); -} - -OSystem::MutexRef OSystem_GP32::createMutex() { -// NP("OSys::createMutex()"); - return NULL; -} - -void OSystem_GP32::lockMutex(MutexRef mutex) { -// NP("OSys::lockMutex()"); -} - -void OSystem_GP32::unlockMutex(MutexRef mutex) { -// NP("OSys::unlockMutex()"); -} - -void OSystem_GP32::deleteMutex(MutexRef mutex) { -// NP("OSys::deleteMutex()"); -} - -bool OSystem_GP32::setSoundCallback(SoundProc proc, void *param) { - NP("OSys::setSoundCallback()"); - - GPSOUNDBUF gpSoundBuf; - - ConfMan.setBool("FM_medium_quality", (g_vars.fmQuality == FM_QUALITY_MED)); - ConfMan.setBool("FM_high_quality", (g_vars.fmQuality == FM_QUALITY_HI)); - //ConfMan.set("output_rate", (int)g_vars.sampleRate); - - if (ConfMan.hasKey("output_rate")) - _samplesPerSec = ConfMan.getInt("output_rate"); - - _samplesPerSec = (int)g_vars.sampleRate; //hack - - if (_samplesPerSec == 0) { - return false; - } - - if (_samplesPerSec < 0) - _samplesPerSec = SAMPLES_PER_SEC; - - // Originally, we always used 2048 samples. This loop will produce the - // same result at 22050 Hz, and should hopefully produce something - // sensible for other frequencies. Note that it must be a power of two. - - uint32 samples = 0x8000; - - for (;;) { - if ((1000 * samples) / _samplesPerSec < 100) - break; - samples >>= 1; - } - - switch(_samplesPerSec) { - case 44100: - case 22050: - case 11025: - break; - default: - _samplesPerSec = 11025; - } - - gpSoundBuf.freq = _samplesPerSec; - gpSoundBuf.format = 16; - gpSoundBuf.channels = 2; - gpSoundBuf.samples = samples; - gpSoundBuf.userdata = param; - gpSoundBuf.callback = proc; - gp_soundBufStart(&gpSoundBuf); - - // For Safety... - GPDEBUG("_samplesPerSec = %d, samples = %d", _samplesPerSec, samples); - gp_delay(1000); - return true; -} - -void OSystem_GP32::clearSoundCallback() { - NP("OSys::clearSoundCallback()"); - if (_samplesPerSec != 0) - gp_soundBufStop(); -} - -int OSystem_GP32::getOutputSampleRate() const { - NP("OSys::getOutputSampleRate()"); - return _samplesPerSec; -} - -void OSystem_GP32::quit() { - NP("OSys::quit()"); - clearSoundCallback(); - setTimerCallback(0, 0); - exit(0); -} - -void OSystem_GP32::setWindowCaption(const char *caption) { - NP("OSys::setWindowCaption(%s)", caption); -} - -void OSystem_GP32::displayMessageOnOSD(const char *msg) { - NP("OSys::displayMessageOnOSD(%s)", msg); -} - -OSystem *OSystem_GP32_create() { - NP("OSys::OSystem_GP32_create()"); - return new OSystem_GP32(); -} diff --git a/backends/gp32/gp32_osys.h b/backends/gp32/gp32_osys.h deleted file mode 100644 index 2986263424..0000000000 --- a/backends/gp32/gp32_osys.h +++ /dev/null @@ -1,151 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef GP32_OSYS_H -#define GP32_OSYS_H - -//Standard ScummVM includes. -#include "common/stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" -#include "backends/intern.h" - -#include "base/engine.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" -#include "backends/gp32/gp32std_input.h" -#include "backends/gp32/gp32std_sound.h" - -class OSystem_GP32 : public OSystem { -public: - static OSystem *instance(); - -protected: - uint16 _screenWidth, _screenHeight; - uint8 *_gameScreen; - uint16 *_tmpScreen, *_hwScreen; - OverlayColor *_overlayBuffer; - - int _overlayWidth, _overlayHeight; - bool _overlayVisible; - uint32 _shakePos; - - // Keyboard mouse emulation - struct KbdMouse { - int16 x, y, x_vel, y_vel, x_max, y_max, x_down_count, y_down_count; - uint32 last_time, delay_time, x_down_time, y_down_time; - }; - - struct MousePos { - int16 x, y, w, h; - }; - - // mouse - KbdMouse _km; - bool _mouseVisible; - int _mouseX, _mouseY; - int _mouseWidth, _mouseHeight; - int _mouseHotspotX, _mouseHotspotY; - byte _mouseKeyColor; - byte *_mouseBuf; - - bool _adjustAspectRatio; - - /** Force full redraw on next updateScreen */ - bool _forceFull; - - uint16 _currentPalette[256]; -// uint _paletteDirtyStart, _paletteDirtyEnd; - - int32 _samplesPerSec; - -public: - - OSystem_GP32(); - ~OSystem_GP32(); - - bool hasFeature(Feature f); - void setFeatureState(Feature f, bool enable); - bool getFeatureState(Feature f); - const GraphicsMode *getSupportedGraphicsModes() const; - int getDefaultGraphicsMode() const; - bool setGraphicsMode(int mode); - bool setGraphicsMode(const char *name); - int getGraphicsMode() const; - void initSize(uint width, uint height); - int16 getHeight(); - int16 getWidth(); - void setPalette(const byte *colors, uint start, uint num); - void grabPalette(byte *colors, uint start, uint num); - - void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); - void updateScreen(); - void setShakePos(int shakeOffset); - - void showOverlay(); - void hideOverlay(); - void clearOverlay(); - void grabOverlay(OverlayColor *buf, int pitch); - void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); - int16 getOverlayHeight(); - int16 getOverlayWidth(); - - OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); - void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); - - bool showMouse(bool visible); - - void warpMouse(int x, int y); - void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1); - - bool pollEvent(Event &event); - uint32 getMillis(); - void delayMillis(uint msecs); - - void setTimerCallback(TimerProc callback, int interval); - - MutexRef createMutex(void); - void lockMutex(MutexRef mutex); - void unlockMutex(MutexRef mutex); - void deleteMutex(MutexRef mutex); - - bool setSoundCallback(SoundProc proc, void *param); - void clearSoundCallback(); - int getOutputSampleRate() const; - - void quit(); - - void setWindowCaption(const char *caption); - - void displayMessageOnOSD(const char *msg); - - void fillMouseEvent(Event &event, int x, int y); - void handleKbdMouse(); -}; - -#else - #warning GP32_OSYS.H Called more then once. -#endif /* GP32_H */ diff --git a/backends/gp32/gp32std.cpp b/backends/gp32/gp32std.cpp deleted file mode 100644 index d6befb1367..0000000000 --- a/backends/gp32/gp32std.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" -//#include "graphics/scaler.h" -#include "common/system.h" -#include "backends/intern.h" - -#include "base/engine.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" -#include "backends/gp32/gp32std_memory.h" - -#define DEBUG_MAX 5 -char debline[DEBUG_MAX][256]; -static int debnext = 0; - -void _dprintf(const char *s, ...) { - int deba, deb; - char buf[1024]; - va_list va; - - va_start(va, s); - vsprintf(buf, s, va); - va_end(va); - - strcpy(debline[debnext++], buf); - - if (debnext == DEBUG_MAX) - debnext = 0; - gp_fillRect(frameBuffer1, 0, 243 - (DEBUG_MAX * 8) - 4, 320, (DEBUG_MAX * 8), 0); - - for (deb = debnext, deba = 0; deb < DEBUG_MAX; deb++, deba++) { - //gp_fillRect(frameBuffer1, 0, (243 - (DEBUG_MAX * 8) - 4) + 8 * deba, 320, 8, 0); - gp_textOut(frameBuffer1, 0, (240 - (DEBUG_MAX * 8) - 4) + 8 * deba, debline[deb], 0xFFFF); - } - for (deb = 0; deb < debnext; deb++, deba++) { - //gp_fillRect(frameBuffer1, 0, (243 - (DEBUG_MAX * 8) - 4) + 8 * deba, 320, 8, 0); - gp_textOut(frameBuffer1, 0, (240 - (DEBUG_MAX * 8) - 4) + 8 * deba, debline[deb], 0xFFFF); - } - -// gp_delay(100); -} - -//////////////////// -//String functions -char *gp_strcpy(char *dst, const char *src) { - char *pDst = dst; - - while (*pDst++ = *src++) - ; - - return dst; -} - -char *gp_strncpy(char *dst, const char *src, size_t count) { - char *start = dst; - - while (count && (*dst++ = *src++)) - count--; - - if (count) - while (--count) - *dst++ = '\0'; - - return start; -} - -char *gp_strcat(char *dst, const char *src) { - char *pDst = dst; - - while (*pDst) - pDst++; - - while (*pDst++ = *src++) - ; - - return dst; - -} - -char *gp_strdup(const char *str) { - char *memory; - - if (!str) - return NULL; - - if (memory = (char *)gp_malloc(strlen(str) + 1)) - return gp_strcpy(memory, str); - - return NULL; -} - -int gp_strcasecmp(const char *dst, const char *src) { - int f, l; - do { - f = tolower((unsigned char)(*(dst++))); - l = tolower((unsigned char)(*(src++))); - } while (f && (f == l)); - - return f - l; -} - -int gp_strncasecmp(const char *dst, const char *src, size_t count) { - int f,l; - - if (count) { - do { - f = tolower((unsigned char)(*(dst++))); - l = tolower((unsigned char)(*(src++))); - } while (--count && f && (f == l)); - return f - l; - } - - return 0; -} - -//FIXME: Handle LONG string -void gp_sprintf(char *str, const char *fmt, ...) { - char s[512]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 512, fmt, marker); - va_end(marker); - - gp_strcpy(str, s); -} - -int gp_printf(const char *fmt, ...) { - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("%s", s); - //gp_delay(100); - return 0; -} - -void gp_delay(uint32 msecs) { - int startTime = GpTickCountGet(); - while (GpTickCountGet() < startTime + msecs); -} - -void gp_clockSpeedChange(int freq, int magic, int div) { - #define rTCFG0 (*(volatile unsigned *)0x15100000) - #define rTCFG1 (*(volatile unsigned *)0x15100004) - #define rTCNTB4 (*(volatile unsigned *)0x1510003c) - unsigned int pclk; - unsigned int prescaler0; - - // Change CPU Speed - GpClockSpeedChange(freq, magic, div); - pclk = GpPClkGet(); - - // Repair SDK timer - it forgets to set prescaler - prescaler0 = (pclk / (8000 * 40)) - 1; - rTCFG0 = (rTCFG0 & 0xFFFFFF00) | prescaler0; - rTCFG1 = 0x30033; - - // Repair GpTickCountGet - rTCNTB4 = pclk / 1600; -} - -void gp_setCpuSpeed(int freq) { - // Default value for 40 mhz - static int CLKDIV = 0x48013; - static int MCLK = 40000000; - static int CLKMODE = 0; - static int HCLK = 40000000; - static int PCLK = 40000000; - - switch (freq) { - // overclocked - case 168: { CLKDIV = 0x14000; MCLK = 168000000; CLKMODE = 3; break; } - case 172: { CLKDIV = 0x23010; MCLK = 172000000; CLKMODE = 3; break; } - case 176: { CLKDIV = 0x24010; MCLK = 176000000; CLKMODE = 3; break; } - case 180: { CLKDIV = 0x16000; MCLK = 180000000; CLKMODE = 3; break; } - case 184: { CLKDIV = 0x26010; MCLK = 184000000; CLKMODE = 3; break; } - case 188: { CLKDIV = 0x27010; MCLK = 188000000; CLKMODE = 3; break; } - case 192: { CLKDIV = 0x18000; MCLK = 192000000; CLKMODE = 3; break; } - case 196: { CLKDIV = 0x29010; MCLK = 196000000; CLKMODE = 3; break; } - case 200: { CLKDIV = 0x2A010; MCLK = 200000000; CLKMODE = 3; break; } - case 204: { CLKDIV = 0x2b010; MCLK = 204000000; CLKMODE = 3; break; } - case 208: { CLKDIV = 0x2c010; MCLK = 208000000; CLKMODE = 3; break; } - case 212: { CLKDIV = 0x2d010; MCLK = 212000000; CLKMODE = 3; break; } - case 216: { CLKDIV = 0x2e010; MCLK = 216000000; CLKMODE = 3; break; } - case 220: { CLKDIV = 0x2f010; MCLK = 220000000; CLKMODE = 3; break; } - case 224: { CLKDIV = 0x30010; MCLK = 224000000; CLKMODE = 3; break; } - case 228: { CLKDIV = 0x1e000; MCLK = 228000000; CLKMODE = 3; break; } - case 232: { CLKDIV = 0x32010; MCLK = 232000000; CLKMODE = 3; break; } - case 236: { CLKDIV = 0x33010; MCLK = 236000000; CLKMODE = 3; break; } - case 240: { CLKDIV = 0x20000; MCLK = 240000000; CLKMODE = 3; break; } - case 244: { CLKDIV = 0x35010; MCLK = 244000000; CLKMODE = 3; break; } - case 248: { CLKDIV = 0x36010; MCLK = 248000000; CLKMODE = 3; break; } - case 252: { CLKDIV = 0x22000; MCLK = 252000000; CLKMODE = 3; break; } - case 256: { CLKDIV = 0x38010; MCLK = 256000000; CLKMODE = 3; break; } - - // normal -// case 166: { CLKDIV = 0x4B011; MCLK = 166000000; CLKMODE = 3; break; } - case 166: { CLKDIV = 0x2f001; MCLK = 165000000; CLKMODE = 3; break; } - case 164: { CLKDIV = 0x4a011; MCLK = 164000000; CLKMODE = 3; break; } - case 160: { CLKDIV = 0x48011; MCLK = 160000000; CLKMODE = 3; break; } - case 156: { CLKDIV = 0x2c001; MCLK = 156000000; CLKMODE = 3; break; } - case 144: { CLKDIV = 0x28001; MCLK = 144000000; CLKMODE = 3; break; } - case 133: { CLKDIV = 0x51021; MCLK = 133500000; CLKMODE = 2; break; } - case 132: { CLKDIV = 0x3a011; MCLK = 132000000; CLKMODE = 3; break; } - case 120: { CLKDIV = 0x24001; MCLK = 120000000; CLKMODE = 2; break; } - case 100: { CLKDIV = 0x2b011; MCLK = 102000000; CLKMODE = 2; break; } - case 66: { CLKDIV = 0x25002; MCLK = 67500000; CLKMODE = 2; break; } - case 50: { CLKDIV = 0x2a012; MCLK = 50000000; CLKMODE = 0; break; } -// case 40: { CLKDIV = 0x48013; MCLK = 40000000; CLKMODE = 0; break; } - case 40: { CLKDIV = 0x48013; MCLK = 40000000; CLKMODE = 1; break; } -// case 33: { CLKDIV = 0x25003; MCLK = 33750000; CLKMODE = 0; break; } - case 33: { CLKDIV = 0x25003; MCLK = 33750000; CLKMODE = 2; break; } - case 22: { CLKDIV = 0x33023; MCLK = 22125000; CLKMODE = 0; break; } - default: - error("Invalid CPU frequency!"); - } - if (CLKMODE == 0) { HCLK = MCLK; PCLK = MCLK; } - if (CLKMODE == 1) { HCLK = MCLK; PCLK = MCLK / 2; } - if (CLKMODE == 2) { HCLK = MCLK / 2; PCLK = MCLK / 2; } - if (CLKMODE == 3) { HCLK = MCLK / 2; PCLK = MCLK / 4; } - - gp_clockSpeedChange(MCLK, CLKDIV, CLKMODE); -} - -void gp_Reset() { - gp_setCpuSpeed(66); - asm volatile("swi #4\n"); -} - -void gp_exit(int code) { - if (!code) { - printf(" ----------------------------------------"); - printf(" Your GP32 is now restarting... "); - printf(" ----------------------------------------"); - printf(""); - - gp_delay(3000); - - GpAppExit(); - } else { - printf("Exit Code %d", code); - while (1); - } -} - -// Debug functions -void GPDEBUG(const char *fmt, ...) { - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("%s", s); -} - -void NP(const char *fmt, ...) { - return; - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("NP:%s", s); - gp_delay(50); -} - -void LP(const char *fmt, ...) { - return; - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("LP:%s", s); - gp_delay(300); -} - -void SP(const char *fmt, ...) { - return; - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("SP:%s", s); - gp_delay(50); -} - -void BP(const char *fmt, ...) { - return; - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - _dprintf("BP:%s", s); - gp_delay(2000); -} diff --git a/backends/gp32/gp32std.h b/backends/gp32/gp32std.h deleted file mode 100644 index 0abe4f0b89..0000000000 --- a/backends/gp32/gp32std.h +++ /dev/null @@ -1,61 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_H -#define __GP32STD_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define LCD_WIDTH 320 -#define LCD_HEIGHT 240 - -extern char * gp_strcpy(char *dst, const char *src); -extern char * gp_strncpy(char *dst, const char *src, size_t count); -extern char * gp_strcat(char *dst, const char *src); -extern char * gp_strdup(const char *str); -extern int gp_strcasecmp(const char *dst, const char *src); -extern int gp_strncasecmp(const char *dst, const char *src, size_t count); -extern void gp_sprintf(char *str, const char *fmt, ...); - -extern void gp_setCpuSpeed(int freq); -extern int gp_printf(const char *fmt, ...); -extern void gp_delay(unsigned long msecs); -extern void gp_exit(int code); - -extern void GPDEBUG(const char *fmt, ...); -extern void LP(const char *fmt, ...); -extern void NP(const char *fmt, ...); -extern void SP(const char *fmt, ...); -extern void BP(const char *fmt, ...); - -#endif diff --git a/backends/gp32/gp32std_file.cpp b/backends/gp32/gp32std_file.cpp deleted file mode 100644 index eb0d71c61d..0000000000 --- a/backends/gp32/gp32std_file.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -#include "stdafx.h" -#include "common/scummsys.h" -//#include "graphics/scaler.h" -#include "common/system.h" -#include "backends/intern.h" - -#include "gp32std.h" -#include "gp32std_file.h" - -FILE *gp_stderr = NULL; -FILE *gp_stdout = NULL; -FILE *gp_stdin = NULL; - -// Cache Idea / Code borrowed from the ps2 port -//#define USE_CACHE - -////////////////// -//File functions - -GPFILE *gp_fopen(const char *fileName, const char *openMode) { - //FIXME: allocation, mode - uint32 mode; - GPFILE *file; - ERR_CODE err; - char tempPath[256]; - - if (!strchr(fileName, '.')) { - sprintf(tempPath, "%s.", fileName); - fileName = tempPath; - } - - file = new GPFILE; - -// NP("%s(\"%s\", \"%s\")", __FUNCTION__, fileName, openMode); - - // FIXME add binary/text support - if (tolower(openMode[0]) == 'r') { - mode = OPEN_R; - GpFileGetSize(fileName, &file->fileSize); - err = GpFileOpen(fileName, mode, &file->handle); - } else if (tolower(openMode[0]) == 'w') { - file->fileSize = 0; - mode = OPEN_W; - err = GpFileCreate(fileName, ALWAYS_CREATE, &file->handle); - } else if (tolower(openMode[0]) == 'a') { - warning("We do not support 'a' file open mode."); - delete file; - return NULL; - } else { - error("wrong file mode"); - } - - if (!file) { - error("%s: cannot create FILE structure", __FUNCTION__); - } - - if (err) { - printf("gp_gopen(): IO error %d", err); - delete file; - return NULL; - } - - file->mode = mode; - file->cachePos = 0; - file->bytesInCache = 0; - - return file; -} - -int gp_fclose(GPFILE *stream) { - if (!stream) { - //warning("closing null file"); - return 1; - } - -/* if (*(uint32 *)((char *)stream - sizeof(uint32)) == 0x4321) { - debug(0, "Double closing", __FUNCTION__); - return 1; - } -*/ - -#ifdef USE_CACHE - if (stream->cachePos && stream->mode == OPEN_W) { - GpFileWrite(stream->handle, (char *)stream->cacheData, stream->cachePos); // flush cache - stream->cachePos = 0; - } -#endif - - ERR_CODE err = GpFileClose(stream->handle); - delete stream; - - return err; -} - -int gp_fseek(GPFILE *stream, long offset, int whence) { - switch (whence) { - case SEEK_SET: - whence = FROM_BEGIN; - break; - case SEEK_CUR: - whence = FROM_CURRENT; - break; - case SEEK_END: - whence = FROM_END; - break; - } - return GpFileSeek(stream->handle, whence, offset, (long *)&stream->filePos); //FIXME? -} - -size_t gp_fread(void *ptr, size_t size, size_t n, GPFILE *stream) { - ulong readcount = 0; - int len = size * n; - -#ifdef USE_CACHE - uint8 *dest = (uint8 *)ptr; - - while (len && (stream->filePos != stream->fileSize)) { - if (stream->cachePos <= filePos && filePos < stream->cachePos + stream->bytesInCache) { - uint32 startPos = (stream->cacheBufOffs + (stream->filePos - stream->cachePos)) % FCACHE_SIZE; - uint32 copyLen = stream->bytesInCache - (stream->filePos - stream->cachePos); - if (copyLen > len) - copyLen = len; - if (startPos + copyLen > FCACHE_SIZE) - copyLen = FCACHE_SIZE - startPos; - - memcpy(dest, cacheData + startPos, copyLen); - - filePos += copyLen; - dest += copyLen; - len -= copyLen; - } else { -#endif - ERR_CODE err = GpFileRead(stream->handle, ptr, len, &readcount); - -#ifdef USE_CACHE - stream->filePos += len; - } - } -#endif - - return readcount / size; //FIXME? -} - -size_t gp_fwrite(const void *ptr, size_t size, size_t n, GPFILE *stream) { - int len = size * n; - - if (!stream) { - //warning("writing to null file"); - return 0; - } - -#ifdef USE_CACHE - if (stream->cachePos + len < FCACHE_SIZE) { - memcpy(stream->cacheData + stream->cachePos, ptr, len); - stream->cachePos += len; - } else { - if (stream->cachePos) { - GpFileWrite(stream->handle, stream->cacheData, stream->cachePos); // flush cache - stream->cachePos = 0; - } - -#endif - ERR_CODE err = GpFileWrite(stream->handle, ptr, len); - if (!err) - return n; - else - return -err; -#ifdef USE_CACHE - } -#endif - return 0; -} - -//FIXME? use standard func -long gp_ftell(GPFILE *stream) { - ulong pos = 0; - ERR_CODE err = GpFileSeek(stream->handle, FROM_CURRENT, 0, (long*)&pos); - return pos; -} - -void gp_clearerr(GPFILE *stream) -{ -} - -int gp_feof(GPFILE *stream) { - return gp_ftell(stream) >= stream->fileSize; -} - -char gp_fgetc(GPFILE *stream) { - char c[1]; - - gp_fread(&c[0], 1, 1, stream); - return c[0]; -} - -char *gp_fgets(char *s, int n, GPFILE *stream) { - int i = 0; - - while (!gp_feof(stream) && i < n) { - gp_fread(&s[i], 1, 1, stream); - if (s[i] == '\n') { - s[i + 1] = 0; - return s; - } - i++; - } - if (gp_feof(stream)) - return NULL; - else - return s; -} - -int gp_fprintf(GPFILE *stream, const char *fmt, ...) { - char s[256]; - va_list marker; - - va_start(marker, fmt); - vsnprintf(s, 256, fmt, marker); - va_end(marker); - - return gp_fwrite(s, 1, strlen(s), stream); -} - -int gp_fflush(GPFILE *stream) { - return 0; -} - -int gp_ferror(GPFILE *stream) { - return 0; -} diff --git a/backends/gp32/gp32std_file.h b/backends/gp32/gp32std_file.h deleted file mode 100644 index 933ae482ff..0000000000 --- a/backends/gp32/gp32std_file.h +++ /dev/null @@ -1,60 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_FILE_H -#define __GP32STD_FILE_H - -#define FCACHE_SIZE 8 * 1024 - -typedef struct { - F_HANDLE handle; - unsigned long mode; - unsigned long fileSize; - unsigned long filePos; - unsigned long cachePos; - unsigned long cacheBufOffs; - unsigned long bytesInCache; - unsigned char cacheData[FCACHE_SIZE]; -} GPFILE; - -extern GPFILE *gp_stderr; -extern GPFILE *gp_stdout; -extern GPFILE *gp_stdin; - -extern GPFILE * gp_fopen(const char *filename, const char *mode); -extern int gp_fclose(GPFILE *stream); -extern int gp_fseek(GPFILE *stream, long offset, int whence); -extern size_t gp_fread(void *ptr, size_t size, size_t n, GPFILE *stream); -extern size_t gp_fwrite(const void *ptr, size_t size, size_t n, GPFILE *stream); -extern long gp_ftell(GPFILE *stream); -extern void gp_clearerr(GPFILE *stream); -extern int gp_feof(GPFILE *stream); -extern char gp_fgetc(GPFILE *stream); -extern char * gp_fgets(char *s, int n, GPFILE *stream); -extern int gp_fflush(GPFILE *stream); -extern int gp_ferror(GPFILE *stream); -extern int gp_fprintf(GPFILE *stream, const char *fmt, ...); - -#endif diff --git a/backends/gp32/gp32std_grap.cpp b/backends/gp32/gp32std_grap.cpp deleted file mode 100644 index 04ac81a6a2..0000000000 --- a/backends/gp32/gp32std_grap.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" -#include "backends/intern.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" - -#include "backends/gp32/globals.h" - -GPDRAWSURFACE lcdSurface[2]; - -uint8 flipIndex = 1; - -uint16 *frameBuffer1; -uint16 *frameBuffer2; - -uint8 gammaLUT[256]; -uint8 gammaLUTInv[256]; - -extern const unsigned char fontresEng1[]; -extern const unsigned char fontresKor1[]; - -void gp_putBitmap8x16(uint16 *frameBuffer, int x, int y, byte *lpBitmap, uint16 wColor) { - byte *pBitmap = lpBitmap; - for (int nRow = 0; nRow < 12; nRow ++) { - byte data = *pBitmap++; - for (int nCol = 0; nCol < 7; nCol ++) { - if (data & 0x80) - if (x + nCol >= 0 && y + nRow >= 0 && x + nCol < 320 && y + nRow < 240) - gpd_drawPixel16(frameBuffer, x + nCol, y + nRow, wColor); - - data <<= 1; - } - } -} - -void gp_putEngFont(uint16 *frameBuffer, int x, int y, char c, uint16 wColor) { - byte *pBitmap = (byte *) &fontresEng1[c * 16]; - gp_putBitmap8x16(frameBuffer, x, y, pBitmap, wColor); -} - -void gp_textOut(uint16 *frameBuffer, int x, int y, char* lpszText, uint16 wColor) { - // TODO: Handle korean font - int nPos = x; - char* pszText = lpszText; - - while (*pszText != '\0') { - if (*pszText == '\n') { - nPos = x; - y += 8; - } else { - gp_putEngFont(frameBuffer, nPos, y, *pszText, wColor); - nPos += 7; - } - - pszText++; - } -} - -void gp_fillRect(uint16 *frameBuffer, int16 x, int16 y, int16 w, int16 h, uint16 color) { - uint16 *buffer = &frameBuffer[(240 - (y + h)) + (240 * x)]; - for (int i = 0; i < w; i++) { - for (int j = 0; j < h; j++) { - *buffer++ = color; - } - buffer += 240 - h; - } -} - -void gp_initGammaTable(float value) -{ - for (int i = 0; i < 256; i++) { - if (value == 1.0f) { - gammaLUT[i] = i; - gammaLUTInv[i] = i; - } else { - gammaLUT[i] = (uint8)(pow((double)i / 256, 1 / (double)value) * 256); - gammaLUTInv[i] = (uint8)(pow((double)i / 256, (double)value) * 256); - } - } -} - -uint16 gp_RGBTo16(uint16 r, uint16 g, uint16 b) { - // GP32 16bit color 5551 - if (g_vars.gammaRamp != 10000) { - r = gammaLUT[r]; - g = gammaLUT[g]; - b = gammaLUT[b]; - } - return (((r >> 3) & 0x1F) << 11) | (((g >> 3) & 0x1F) << 6) | ((b >> 3) & 0x1F) << 1; -} - -void gp_16ToRGB(uint16 color, uint8 *r, uint8 *g, uint8 *b) { - *r = ((((color) >> 11) & 0x1F) << 3); - *g = ((((color) >> 6) & 0x1F) << 3); //(((color>>5)&0x3F) << 2); - *b = ((((color) >> 1) & 0x1F) << 3); //((color&0x1F) << 3); - - if (g_vars.gammaRamp != 10000) { - *r = gammaLUTInv[*r]; - *g = gammaLUTInv[*g]; - *b = gammaLUTInv[*b]; - } -} - -void gp_flipScreen() { - uint16 *frameBuffer1_old = frameBuffer1; - uint16 *frameBuffer2_old = frameBuffer2; - - GpSurfaceFlip(&lcdSurface[flipIndex]); - flipIndex = 1 - flipIndex; - frameBuffer1 = frameBuffer2_old; - frameBuffer2 = frameBuffer1_old; -} - -void gp_initFrameBuffer() { - GpLcdSurfaceGet(&lcdSurface[0], 0); - GpLcdSurfaceGet(&lcdSurface[1], 1); - GpSurfaceSet(&lcdSurface[0]); - frameBuffer1 = (uint16 *)lcdSurface[0].ptbuffer; - frameBuffer2 = (uint16 *)lcdSurface[1].ptbuffer; - - memset(frameBuffer1, 0xFF, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); - memset(frameBuffer2, 0xFF, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); -} diff --git a/backends/gp32/gp32std_grap.h b/backends/gp32/gp32std_grap.h deleted file mode 100644 index 91f44c952a..0000000000 --- a/backends/gp32/gp32std_grap.h +++ /dev/null @@ -1,47 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_GRAP_H -#define __GP32STD_GRAP_H - -extern GPDRAWSURFACE lcdSurface[2]; -extern uint8 flipIndex; - -extern uint16 *frameBuffer1; -extern uint16 *frameBuffer2; - -extern void gp_fillRect(uint16 *frameBuffer, int16 x, int16 y, int16 w, int16 h, uint16 color); -extern uint16 gp_RGBTo16(uint16 r, uint16 g, uint16 b); -extern void gp_16ToRGB(uint16 color, uint8 *r, uint8 *g, uint8 *b); - -extern void gp_textOut(uint16 *frameBuffer, int x, int y, char* lpszText, uint16 wColor); - -extern void gp_initGammaTable(float value); -extern void gp_initFrameBuffer(); -extern void gp_flipScreen(); - -#define gpd_drawPixel16(dst,x,y,color) (dst)[(239 - (y)) + (240 * (x))] = (color) - -#endif diff --git a/backends/gp32/gp32std_input.cpp b/backends/gp32/gp32std_input.cpp deleted file mode 100644 index 99c1329eae..0000000000 --- a/backends/gp32/gp32std_input.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_input.h" - -static uint32 buttonState = 0; -static uint16 buttonPressState = 0; - -#define GET_BUTTON_PRESSED(a) (buttonPressState & (a)) -#define ON_BUTTON_PRESSED(a) (buttonPressState |= (a)) -#define OFF_BUTTON_PRESSED(a) (buttonPressState &= ~(a)) - -#define GET_BUTTON_DOWN(a) (buttonState & (a) << 12) -#define ON_BUTTON_DOWN(a) buttonState |= ((a) << 12) -#define OFF_BUTTON_DOWN(a) buttonState &= ~((a) << 12) - -#define GET_BUTTON_UP(a) (buttonState & (a)) -#define ON_BUTTON_UP(a) buttonState |= (a) -#define OFF_BUTTON_UP(a) buttonState &= ~(a) - -#define rKEY_A 0x4000 -#define rKEY_B 0x2000 -#define rKEY_L 0x1000 -#define rKEY_R 0x8000 -#define rKEY_UP 0x0800 -#define rKEY_DOWN 0x0200 -#define rKEY_LEFT 0x0100 -#define rKEY_RIGHT 0x0400 -#define rKEY_START 0x0040 -#define rKEY_SELECT 0x0080 -#define rPBDAT (*(volatile unsigned *)0x1560000c) -#define rPEDAT (*(volatile unsigned *)0x15600030) - -/**************************************************************** - GP32 Input mappings - Returns Button Pressed. -****************************************************************/ -int gp_trapKey() { - int value = 0; - - unsigned long gpb = rPBDAT; // 0x156 - unsigned long gpe = rPEDAT; - - if ((gpb & rKEY_LEFT) == 0) - value |= GPC_VK_LEFT; - if ((gpb & rKEY_RIGHT) == 0) - value |= GPC_VK_RIGHT; - if ((gpb & rKEY_UP) == 0) - value |= GPC_VK_UP; - if ((gpb & rKEY_DOWN) == 0) - value |= GPC_VK_DOWN; - if ((gpb & rKEY_A) == 0) - value |= GPC_VK_FA; - if ((gpb & rKEY_B) == 0) - value |= GPC_VK_FB; - if ((gpb & rKEY_L) == 0) - value |= GPC_VK_FL; - if ((gpb & rKEY_R) == 0) - value |= GPC_VK_FR; - if ((gpe & rKEY_SELECT) == 0) - value |= GPC_VK_SELECT; - if ((gpe & rKEY_START) == 0) - value |= GPC_VK_START; - - return value; -} - -bool gp_getButtonEvent(uint32 *nKeyUD, uint16 *nKeyP) { -// int nKey = GpKeyGet(); - int nKey = gp_trapKey(); - - const int keyBitMask[10] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200}; - - for (int i = 0; i < 10; i++) { - OFF_BUTTON_DOWN(keyBitMask[i]); - OFF_BUTTON_UP(keyBitMask[i]); - if (nKey & keyBitMask[i]) { - if (!GET_BUTTON_PRESSED(keyBitMask[i])) { -// GPDEBUG("DOWN %d", i); - ON_BUTTON_PRESSED(keyBitMask[i]); - ON_BUTTON_DOWN(keyBitMask[i]); - } - } else { - if (GET_BUTTON_PRESSED(keyBitMask[i])) { -// GPDEBUG("UP %d", i); - OFF_BUTTON_PRESSED(keyBitMask[i]); - ON_BUTTON_UP(keyBitMask[i]); - } - } - } - -// GPDEBUG("%08x %04x", buttonState, buttonPressState); - *nKeyUD = buttonState; - *nKeyP = buttonPressState; - return true; -} - -#define MAX_EVENTS 32 - -struct EventQueue { -protected: - int front, rear; - int numElement; - GP32BtnEvent event[MAX_EVENTS]; - -public: - void push(GP32BtnEvent *ev) { - if ((rear + 1) % MAX_EVENTS == front) { - GPDEBUG("Queue Overflow!"); - return; - } - numElement++; - - event[rear].type = ev->type; - event[rear].button = ev->button; - rear = (rear + 1) % MAX_EVENTS; - } - - bool isEmpty() { - return (numElement == 0); - } - - bool isFull() { - return (numElement == MAX_EVENTS); - } - - bool get(GP32BtnEvent *ev) { - if (front == rear) { - return false; - } - numElement--; - ev->type = event[front].type; - ev->button = event[front].button; - front = (front + 1) % MAX_EVENTS; - return true; - } -}; - -EventQueue eventQueue; - -bool gp_pumpButtonEvent() { - int nKey = gp_trapKey(); - GP32BtnEvent ev; - - const int keyBitMask[10] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200}; - - for (int i = 0; i < 10; i++) { - if (nKey & keyBitMask[i]) { - if (!GET_BUTTON_PRESSED(keyBitMask[i])) { - ON_BUTTON_PRESSED(keyBitMask[i]); - ev.type = BUTTON_DOWN; - ev.button = keyBitMask[i]; - eventQueue.push(&ev); - //ON_BUTTON_DOWN(keyBitMask[i]); - } - } else { - if (GET_BUTTON_PRESSED(keyBitMask[i])) { - OFF_BUTTON_PRESSED(keyBitMask[i]); - ev.type = BUTTON_UP; - ev.button = keyBitMask[i]; - eventQueue.push(&ev); - //ON_BUTTON_UP(keyBitMask[i]); - } - } - } - - return true; -} - -bool gp_pollButtonEvent(GP32BtnEvent *ev) { - gp_pumpButtonEvent(); - - if(eventQueue.isEmpty()) { - return false; - } - - eventQueue.get(ev); -// GPDEBUG("Event poll %d %d", ev->type, ev->button); - - return true; -} - -bool gp_getButtonPressed(uint16 button) -{ - return buttonPressState & button; -} diff --git a/backends/gp32/gp32std_input.h b/backends/gp32/gp32std_input.h deleted file mode 100644 index c7ab3e3212..0000000000 --- a/backends/gp32/gp32std_input.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_INPUT_H -#define __GP32STD_INPUT_H - -#include "stdafx.h" -#include "common/scummsys.h" - -#define BUTTON_DOWN 1 -#define BUTTON_UP 2 - -struct GP32BtnEvent { - uint16 type; - uint16 button; -}; - -extern int gp_trapKey(); - -extern bool gp_getButtonEvent(uint32 *nKeyUD, uint16 *nKeyP); - -#define gpd_getEventDown(a) (((a) >> 12) & 0x0fff) -#define gpd_getEventUp(a) ((a) & 0x0fff) -#define gpd_getEventPressed(a) ((a) & 0x0fff) -#define gpd_getButtonDown(a,button) ((a) & (button) << 12) -#define gpd_getButtonUp(a,button) ((a) & (button)) -#define gpd_getButtonPressed(a,button) ((a) & (button)) - -extern bool gp_pollButtonEvent(GP32BtnEvent *ev); -extern bool gp_getButtonPressed(uint16 button); - -#endif diff --git a/backends/gp32/gp32std_memory.cpp b/backends/gp32/gp32std_memory.cpp deleted file mode 100644 index 422c46b00d..0000000000 --- a/backends/gp32/gp32std_memory.cpp +++ /dev/null @@ -1,320 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005/2006 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" -//#include "graphics/scaler.h" -#include "common/system.h" -#include "backends/intern.h" - -#include "base/engine.h" - -#include "backends/gp32/gp32std.h" -#include "backends/gp32/gp32std_grap.h" -#include "backends/gp32/gp32std_memory.h" - -///////////////////// -//Memory management - -#define USER_MEMORY_SIZE (256 * 1024) -#define USER_BLOCK_SIZE 24 -#define NUM_BLOCK (USER_MEMORY_SIZE / USER_BLOCK_SIZE) -// use fixed block size for small allocations -// consumes about 128k for block array -// consumes 256k for user memory - -class MemBlock { -protected: - static byte *userMem; -// static size_t allocSize; -// static MemBlock *head; - static int numBlock; - static int prevBlock; - - // Linked list is slow for this task. :) - static MemBlock *block; - - byte *blockData; - size_t size; - -// MemBlock *next; - - int used; - -public: - static void init(); - static void deinit(); - - static void *addBlock(size_t size); - static void deleteBlock(void *dstBlock); -}; - -byte *MemBlock::userMem = NULL; -//MemBlock *MemBlock::head = NULL; -//size_t MemBlock::allocSize = 0; -int MemBlock::numBlock = 0; -int MemBlock::prevBlock = 0; -MemBlock *MemBlock::block = NULL; - -void MemBlock::init() -{ - userMem = (byte *)gm_malloc(USER_MEMORY_SIZE + USER_BLOCK_SIZE); - block = (MemBlock *)gm_malloc(NUM_BLOCK * sizeof(MemBlock)); - - if (!(userMem && block)) { - //error - } - - memset(userMem, 0, USER_MEMORY_SIZE + USER_BLOCK_SIZE); - memset(block, 0, NUM_BLOCK * sizeof(MemBlock)); -} - -void MemBlock::deinit() -{ - if (!(userMem && block)) { - //error - } - gm_free(userMem); - gm_free(block); - userMem = NULL; - block = NULL; -} - -void *MemBlock::addBlock(size_t size) -{ - int i; - MemBlock *blk = &block[prevBlock]; - - // some optimizaion with loop - for (i = prevBlock; i < NUM_BLOCK; i++) { - if (!blk->used) { - break; - } - blk++; - } - if(i == NUM_BLOCK) { - blk = &block[0]; - for (i = 0; i < prevBlock; i++) { - if (!blk->used) { - break; - } - blk++; - } - if(i == prevBlock) - return NULL; - } - - byte *ptr = userMem + (i * USER_BLOCK_SIZE); - - blk->size = size; - blk->blockData = ptr; - blk->used = 1; - - prevBlock = i; - - return (void *) ptr; -} - -void MemBlock::deleteBlock(void *dstBlock) -{ - uint32 np = (uint32) dstBlock - (uint32) userMem; - - if ((np / USER_BLOCK_SIZE) * USER_BLOCK_SIZE != np) { - gm_free(dstBlock); -// warning("wrong block! (%d / %d)", (np / USER_BLOCK_SIZE) * USER_BLOCK_SIZE, np); - } - int i = np / USER_BLOCK_SIZE; - if (i > NUM_BLOCK) { - gm_free(dstBlock); - return; - } - block[i].used = 0; - -/* - int i = 0; - for (i = 0; i < NUM_BLOCK; i++) { - if (block[i].blockData == dstBlock) - break; - } - if (i == NUM_BLOCK) { - gm_free(dstBlock); //fixme? - //warning("wrong block! %x", (uint32)block - (uint32)userMem); - } else { - GPDEBUG("deleteing block %d", i); - block[i].used = 0; - }*/ -} - -// HACK not to include struct MemBlock -void memBlockInit() -{ - MemBlock::init(); -} - -void memBlockDeinit() -{ - MemBlock::deinit(); -} - -#undef memcpy -#undef memset -void *gp_memcpy(void *dst, const void *src, size_t count) { - return memcpy(dst, src, count); -} - -void *gp_memset(void *dst, int val, size_t count) { - return memset(dst, val, count); -} - -#define MALLOC_MASK 0xAB800000 - -// WE HAVE TO ALIGN MEMORY ADDRESS ON THE ARM PROCESSOR! -#define ALIGNED_SIZE(size) ((size) + (4 - ((size) & 3))) - -void *gp_malloc(size_t size) { - uint32 np; - uint32 *up; - - // size + 8 bytes : stores block size - int allocSize = ALIGNED_SIZE(size) + sizeof(uint32) + sizeof(uint32); - if (allocSize <= USER_BLOCK_SIZE) { - np = (uint32) MemBlock::addBlock(allocSize); - if (!np) { -// GPDEBUG("falling back to gm_malloc"); - np = (uint32) gm_malloc(allocSize); - } - } else { - np = (uint32) gm_malloc(allocSize); - } - - if (np) { - up = (uint32 *)np; - *up = ALIGNED_SIZE(size) | MALLOC_MASK; // mem size: up to 8mb - up = (uint32 *)(np + ALIGNED_SIZE(size) + sizeof(uint32)); - *up = 0x1234; // catches oob acess - return (void *)(np + sizeof(uint32)); - } - - return NULL; -} - -void gp_free(void *block) { - uint32 np; - uint32 *up; - - if (!block) { - return; - } - - np = ((uint32) block) - sizeof(uint32); - up = (uint32 *) np; - if (*up == 0x4321) { - warning("%s: double deallocation", __FUNCTION__); - return; - } - - if (*up & MALLOC_MASK != MALLOC_MASK) { - warning("%s: corrupt block", __FUNCTION__); - return; - } - - int blockSize = (*up & 0x7fffff); - up = (uint32 *)(np + blockSize + sizeof(uint32)); - if (*up != 0x1234) { - warning("gp_free: corrupt block - OOB access", __FUNCTION__); - return; - } - - np = ((uint32) block) - sizeof(uint32); - up = (uint32 *) np; - *up = 0x4321; - - if (blockSize + 8 <= USER_BLOCK_SIZE) { - MemBlock::deleteBlock(up); - } else { - gm_free(up); - } -} - -void *gp_calloc(size_t nitems, size_t size) { - void *p = gp_malloc(nitems * size); //gpcalloc doesnt clear? - - gp_memset(p, 0, nitems * size); - -// if (*(uint8 *)p != 0) -// warning("%s: calloc doesn't clear", __FUNCTION__); //fixme: was error - - return p; -} - -////////////////////////////////////////////////// -// GP32 stuff -////////////////////////////////////////////////// -static char usedMemStr[16]; -int gUsedMem = 1024 * 1024; - -//#define CLEAN_MEMORY_WITH_0xE7 -#define CHECK_USED_MEMORY -//#define CHECK_NEW_TIME -//#define CHECK_NEW_SIZE - -void *operator new(size_t size) { -#if defined(CHECK_NEW_TIME) - static int ftick; - ftick = GpTickCountGet(); -#endif -// printf("BP:operator new(%d)", size); - void *ptr = gp_malloc(size); - -#if defined(CLEAN_MEMORY_WITH_0xE7) - if(ptr != NULL) { - gp_memset(ptr, 0xE7, size); - } -#endif -#if defined(CHECK_USED_MEMORY) - // Check free memory. - gUsedMem = ((int)(ptr) + size) - 0xc000000; - - sprintf(usedMemStr, "%8d", gUsedMem); - gp_fillRect(frameBuffer1, 0, 0, 64, 12, 0); - gp_textOut(frameBuffer1, 0, 0, usedMemStr, 0xfffff); -#endif -#if defined(CHECK_NEW_TIME) - sprintf(usedMemStr, "%2d", GpTickCountGet() - ftick); - gp_fillRect(frameBuffer1, 72, 0, 24, 12, 0); - gp_textOut(frameBuffer1, 72, 0, usedMemStr, 0xfffff); -#endif -#if defined(CHECK_NEW_SIZE) - sprintf(usedMemStr, "%8d", size); - gp_fillRect(frameBuffer1, 108, 0, 64, 12, 0); - gp_textOut(frameBuffer1, 108, 0, usedMemStr, 0xfffff); -#endif - return ptr; -} - -void operator delete(void *ptr) { -// printf("operator delete(%x)", ptr); - gp_free(ptr); -} diff --git a/backends/gp32/gp32std_memory.h b/backends/gp32/gp32std_memory.h deleted file mode 100644 index ea89b6ecb9..0000000000 --- a/backends/gp32/gp32std_memory.h +++ /dev/null @@ -1,35 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_MEMORY_H -#define __GP32STD_MEMORY_H - -extern void * gp_memcpy(void *dst, const void *src, size_t count); -extern void * gp_memset(void *dst, int val, size_t count); -extern void * gp_malloc(size_t size); -extern void * gp_calloc(size_t nitems, size_t size); -extern void gp_free(void *block); - -#endif diff --git a/backends/gp32/gp32std_sound.cpp b/backends/gp32/gp32std_sound.cpp deleted file mode 100644 index 56335f1c4f..0000000000 --- a/backends/gp32/gp32std_sound.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "stdafx.h" -#include "common/scummsys.h" - -#include "gp32std.h" -#include "gp32std_sound.h" - -#define GP32_TIMER_AUDIO_IDX 0 - -// Global variables -static volatile unsigned int frame = 0; -static volatile unsigned int *soundPos = 0; -static volatile int idx_buf; -static volatile unsigned int shiftVal = 0; -static void *buffer; -static GPSOUNDBUF soundBuf; - -// This routine gets called by the timer interrupt and -// polls the current playing position within the buffer. - -static void soundTimer() { - static int locked = false; - - if (locked) { - return; - } - - locked = true; - - unsigned int sampleshiftVal = soundBuf.samples << shiftVal; - unsigned int t = (((unsigned int)(*soundPos) - (unsigned int)buffer) >> shiftVal) >= soundBuf.samples ? 1 : 0; - if (t != frame) { - unsigned int offs = ((frame == 1) ? (sampleshiftVal) : 0); - //memset((uint8 *)buffer + offs, 0, sampleshiftVal); - soundBuf.callback(soundBuf.userdata, (uint8 *)((unsigned int)buffer + offs), sampleshiftVal); - frame = t; - { - // Play silence - register uint16 *d = (uint16 *)((uint8 *)buffer + offs); // alignment-safe - register uint32 max = (uint32)((uint8 *)buffer + offs + sampleshiftVal); - do { - *d++ ^= 0x8000; // 1 - *d++ ^= 0x8000; // 2 - *d++ ^= 0x8000; // 3 - *d++ ^= 0x8000; // 4 - *d++ ^= 0x8000; // 5 - *d++ ^= 0x8000; // 6 - *d++ ^= 0x8000; // 7 - *d++ ^= 0x8000; // 8 - *d++ ^= 0x8000; // 9 - *d++ ^= 0x8000; // 10 - *d++ ^= 0x8000; // 11 - *d++ ^= 0x8000; // 12 - *d++ ^= 0x8000; // 13 - *d++ ^= 0x8000; // 14 - *d++ ^= 0x8000; // 15 - *d++ ^= 0x8000; // 16 - *d++ ^= 0x8000; // 17 - *d++ ^= 0x8000; // 18 - *d++ ^= 0x8000; // 19 - *d++ ^= 0x8000; // 20 - *d++ ^= 0x8000; // 21 - *d++ ^= 0x8000; // 22 - *d++ ^= 0x8000; // 23 - *d++ ^= 0x8000; // 24 - *d++ ^= 0x8000; // 25 - *d++ ^= 0x8000; // 26 - *d++ ^= 0x8000; // 27 - *d++ ^= 0x8000; // 28 - *d++ ^= 0x8000; // 29 - *d++ ^= 0x8000; // 30 - *d++ ^= 0x8000; // 31 - *d++ ^= 0x8000; // 32 - } while ((uint32)d < max); - } - } - - locked = false; -} - -int gp_soundBufStart(GPSOUNDBUF *sb) { - int bufferSize = 0; - - PCM_SR gpFreq = PCM_S11; - PCM_BIT gpFormat = PCM_16BIT; - - frame = 0; - - // Copy the structure - memcpy(&soundBuf, sb, sizeof(GPSOUNDBUF)); - - // Calculate size of a single sample in bytes - // and a corresponding shift value - shiftVal = 0; - - switch (soundBuf.format) { - case 8: - gpFormat = PCM_8BIT; - break; - case 16: - gpFormat = PCM_16BIT; - shiftVal++; - break; - } - - switch (soundBuf.freq) { - case 11025: - if (soundBuf.channels == 2) { - gpFreq = PCM_S11; - shiftVal++; - } else - gpFreq = PCM_M11; - break; - case 22050: - if (soundBuf.channels == 2) { - gpFreq = PCM_S22; - shiftVal++; - } else - gpFreq = PCM_M22; - break; - case 44100: - if (soundBuf.channels == 2) { - gpFreq = PCM_S44; - shiftVal++; - } else - gpFreq = PCM_M44; - break; - } - - soundBuf.samplesize = 1 << shiftVal; - - // Allocate memory for the playing buffer - bufferSize = soundBuf.samplesize * soundBuf.samples * 2; - buffer = malloc(bufferSize); - - // Clear the buffer - uint16 *tmpBuf = (uint16 *)buffer; - for (int i = 0; i < bufferSize / 2; i++) - tmpBuf[i] = 0x8000; - - // Frequency of the timer interrupt which polls the playing position - // FIXME: This frequency should not be multiplied by 4. - soundBuf.pollfreq = 4 * (2 * soundBuf.freq) / soundBuf.samples; - - // Set timer interrupt - if (GpTimerOptSet(GP32_TIMER_AUDIO_IDX, soundBuf.pollfreq, 0, soundTimer) == GPOS_ERR_ALREADY_USED) { - GPDEBUG(" Timer is already used... kill timer"); - GpTimerKill(GP32_TIMER_AUDIO_IDX); - } - GpTimerSet(GP32_TIMER_AUDIO_IDX); - - GpPcmInit(gpFreq, gpFormat); - GpPcmPlay((unsigned short *)buffer, bufferSize, 1); - GpPcmLock((unsigned short *)buffer, (int *)&idx_buf, (unsigned int *)&soundPos); - - return 0; -} - -void gp_soundBufStop() { - GpTimerKill(GP32_TIMER_AUDIO_IDX); - GpPcmStop(); - GpPcmRemove((unsigned short *)buffer); - free(buffer); -} diff --git a/backends/gp32/gp32std_sound.h b/backends/gp32/gp32std_sound.h deleted file mode 100644 index bca450620a..0000000000 --- a/backends/gp32/gp32std_sound.h +++ /dev/null @@ -1,48 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GP32STD_SOUND_H -#define __GP32STD_SOUND_H - -// GPSOUNDBUF.userdata / Pointer to the buffer which needs to be refilled / Length of the buffer in bytes -typedef void SoundProc(void *param, byte *buf, int len); - -typedef struct TGPSOUNDBUF { - int32 freq; - uint16 format; - uint16 samples; // Buffer length (in samples) - uint16 channels; - uint16 padding; // Fix alignment problem - void *userdata; // Userdata which gets passed to the callback function - SoundProc *callback; // Callback function (just like in SDL) - unsigned int pollfreq; // Frequency of the timer interrupt which polls the playing position - // recommended value: 2*(playingfreq in Hz/GPSOUNDBUF.samples) - unsigned int samplesize; // Size of one sample (8bit mono->1, 16bit stereo->4) - don't touch this -} GPSOUNDBUF; - -int gp_soundBufStart(GPSOUNDBUF *sb); -void gp_soundBufStop(); - -#endif diff --git a/backends/gp32/gp_asmlib.s b/backends/gp32/gp_asmlib.s deleted file mode 100644 index 3d0bfd9a2e..0000000000 --- a/backends/gp32/gp_asmlib.s +++ /dev/null @@ -1,426 +0,0 @@ - .ALIGN -@ .ARM - - .GLOBAL cpu_speed - .GLOBAL mmu_change - .GLOBAL gp_enableIRQ - .GLOBAL gp_disableIRQ - .GLOBAL gp_installSWIIRQ - .GLOBAL gp_removeSWIIRQ - -cpu_speed: - stmdb r13!, {r0-r12,lr} - stmdb sp!, {r0, r1, r2} - mov r0, sp - swi #0x0d - add sp, sp, #12 - ldmia r13!, {r0-r12,lr} - bx lr - nop - -mmu_change: - stmdb r13!, {r0-r12,lr} - swi #0x02 - ldmia r13!, {r0-r12,lr} - bx lr - nop - -gp_enableIRQ: - stmdb r13!, {r0,lr} - mrs r0, CPSR - bic r0, r0, #0x80 - msr CPSR, r0 - ldmia r13!, {r0,pc} - bx lr - -gp_disableIRQ: - stmdb r13!, {r0,lr} - MRS r0, CPSR - ORR r0, r0, #0xc0 - MSR CPSR, r0 - ldmia r13!, {r0,pc} - bx lr - -gp_installSWIIRQ: - stmdb r13!, {r14} - swi 0x9 - ldmia r13!, {pc} - bx lr - -gp_removeSWIIRQ: - stmdb r13!, {r14} - swi 0xa - ldmia r13!, {pc} - bx lr - - -@ ******** ASMFastSolidBlit(unsigned char *src4, unsigned char *dst4, int nbx, int nby, int height2, int trans, int coul) ******** - - .ALIGN - .GLOBAL ASMFastSolidBlit - .TYPE ASMFastSolidBlit, function - .CODE 32 - -@r0 = src4 -@r1 = dst4 -@r2 = nbx -@r3 = nby - -@r4 = height2 -@r5 = trans -@r6 = coul -@r7 = tmp -@r8 = tmpnby -@r9 = tmp2 - -_bx7: - ldrb r8,[r0,+r3] @lecture 1er pixel - subs r7,r3,#1 - bmi _sauty2 - -_sauty2: @ecriture r8 - TEQ r8,r5 - STRNEB r8,[r1,+r7] - SUB r0,r0,r4 - SUB r1,r1,#240 - SUBS r2,r2,#1 - BPL _bx7 - - ldmfd r13!,{r4-r8} - add sp,sp,#8 - bx lr - -ASMFastSolidBlit: - - sub sp,sp,#12 - stmfd r13!,{r4-r9} - ldr r4,[r13,#36] - ldr r5,[r13,#40] - ldr r6,[r13,#44] - -_bx8: - ldrb r9,[r0,+r3] @lecture 1er pixel - subs r8,r3,#1 - bmi _sauty2 - -_by8: - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3 - LDRB r7,[r0,+r8] - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - BMI _sauty3b - LDRB r9,[r0,+r8] - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUBS r8,r8,#1 - - BPL _by8 - -_sauty3: @ecriture pour r9 - TEQ r9,r5 - STRNEB r6,[r1,+r8] - SUB r0,r0,r4 - SUB r1,r1,#240 - SUBS r2,r2,#1 - BPL _bx8 - - ldmfd r13!,{r4-r9} - add sp,sp,#12 - bx lr - -_sauty3b: @ecriture pour r7 - TEQ r7,r5 - STRNEB r6,[r1,+r8] - SUB r0,r0,r4 - SUB r1,r1,#240 - SUBS r2,r2,#1 - BPL _bx8 - - ldmfd r13!,{r4-r9} - add sp,sp,#12 - bx lr - - -@ ******** ASMSaveBitmap(unsigned char *src4, unsigned char *dst, int nbx, int nby, int height2) ******** - - .ALIGN - .GLOBAL ASMSaveBitmap - .TYPE ASMSaveBitmap, function - .CODE 32 - -@r0 = src4 -@r1 = dst + 1 -@r2 = nbx -@r3 = nby - -@r7 = height2 -@r8 = tmp -@r9 = tmpnby -@r10 = dst4 - -ASMSaveBitmap: - - sub sp,sp,#4 - stmfd r13!,{r7-r10} - LDR r7,[r13,#20] - -_bx6: - MLA r10,r2,r7,r1 - MOV r9,r3 - -_by6: - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - BMI _fincol6 - LDRB r8,[r0,+r9] - SUBS r9,r9,#1 - STRB r8,[r10,+r9] - - BPL _by6 - -_fincol6: - SUB r0,r0,#240 - SUBS r2,r2,#1 - BPL _bx6 - - ldmfd r13!,{r7-r10} - add sp,sp,#4 - bx lr - - - .ALIGN - .GLOBAL gp_clearFramebuffer - .TYPE gp_clearFramebuffer, function - .CODE 32 -gp_clearFramebuffer: - @ r0 = framebuffer - @ r1 = color - orr r1,r1,r1,lsl #16 @hi halfword = lo halfword - mov r2,#38400 -clear: str r1,[r0],#4 - subs r2,r2,#1 - bne clear - bx lr - - -@ ******** ASMFastClear(unsigned char *dst4, int nbx, int nby) ******** - - .ALIGN - .GLOBAL ASMFastClear - .TYPE ASMFastClear, function - .CODE 32 - -@r0 = dst4 -@r1 = nbx -@r2 = nby - -@r3 = #0 -@r4 = tmpnby - -@optimis?pour h=20 - -ASMFastClear: - - str r4,[sp,#-4]! - MOV r3,#0 - -_bx9: - MOV r4,r2 - -_by9: - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - BMI _sauty4 - STRB r3,[r0,+r4] - SUBS r4,r4,#1 - - BPL _by9 - -_sauty4: - SUB r0,r0,#240 - SUBS r1,r1,#1 - BPL _bx9 - - ldr r4,[sp],#4 - bx lr diff --git a/backends/gp32/gp_clipped.c b/backends/gp32/gp_clipped.c deleted file mode 100644 index 5ad94e41d4..0000000000 --- a/backends/gp32/gp_clipped.c +++ /dev/null @@ -1,101 +0,0 @@ -/* ScummVM - Scumm Interpreter - * GP32 Blitting library - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2003,2004,2005 CARTIER Matthieu - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -//Some global variables and macros - -#define screen_width 320 -#define screen_height 240 - -void gp_FastSolidBlit(void *framebuffer, int dx, const int dy, const int width, const int height, const unsigned char *src, const int trans, const int coul) { - int xmin, ymin, xmax, ymax; - int height2 = ( (height + 3) >> 2) << 2; - - if(dx < 0) { - xmin = -dx; - } else xmin = 0; - if( (dx++ + width) > screen_width) { - xmax = screen_width - dx; - } else xmax = width - 1; - if(dy < 0) { - ymax = height + dy - 1; - } else ymax = height - 1; - if( (dy + height) > screen_height) { - ymin = dy + height - screen_height; - } else ymin = 0; - if( (xmin > xmax) || (ymin > ymax) ) return; - - unsigned char *dst4 = framebuffer + (dx + xmax) * screen_height - height - dy + 1 + ymin; - src += (xmax * height2 + ymin); - ASMFastSolidBlit(src, dst4, xmax - xmin, ymax - ymin, height2, trans, coul); -} - -//Copy from framebuffer to dest -void gp_SaveBitmap(void *framebuffer, int dx, const int dy, const int width, const int height, const unsigned char *dest) { //Sur l'icran - int xmin, ymin, xmax, ymax; - int height2 = ( (height + 3) >> 2) << 2; - - if(dx < 0) { - xmin = -dx; - } else xmin = 0; - if( (dx++ + width) > screen_width) { - xmax = screen_width - dx; - } else xmax = width - 1; - if(dy < 0) { - ymax = height + dy - 1; - } else ymax = height - 1; - if( (dy + height) > screen_height) { - ymin = dy + height - screen_height; - } else ymin = 0; - if( (xmin > xmax) || (ymin > ymax) ) return; - - unsigned char *src4 = framebuffer + (dx + xmax) * screen_height - height - dy + ymin; - dest += (xmin * height2 + ymin + 1); - ASMSaveBitmap(src4, dest, xmax - xmin, ymax - ymin, height2); -} - -//Clears area with color #0, should not trigger clicky noise - -void gp_FastClear(void *framebuffer, int dx, int dy, int width, int height) { - int xmin, ymin, xmax, ymax; - - if(dx < 0) { - xmin = -dx; - } else xmin = 0; - if( (dx++ + width) > screen_width) { - xmax = screen_width - dx; - } else xmax = width - 1; - if(dy < 0) { - ymax = height + dy - 1; - } else ymax = height - 1; - if( (dy + height) > screen_height) { - ymin = dy + height - screen_height; - } else ymin = 0; - if( (xmin > xmax) || (ymin > ymax) ) return; - - int decaly = screen_height - height - dy; - - unsigned char *dst4 = framebuffer + (dx + xmax) * screen_height - height - dy + ymin; - ASMFastClear(dst4, xmax - xmin, ymax - ymin); -} diff --git a/backends/gp32/memcpy.S b/backends/gp32/memcpy.S deleted file mode 100644 index 1572831179..0000000000 --- a/backends/gp32/memcpy.S +++ /dev/null @@ -1,498 +0,0 @@ -/* $NetBSD: memcpy.S,v 1.3 1997/11/22 03:27:12 mark Exp $ */ - -/*- -* Copyright (c) 1997 The NetBSD Foundation, Inc. -* All rights reserved. -* -* This code is derived from software contributed to The NetBSD Foundation -* by Neil A. Carson and Mark Brinicombe -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. All advertising materials mentioning features or use of this software -* must display the following acknowledgement: -* This product includes software developed by the NetBSD -* Foundation, Inc. and its contributors. -* 4. Neither the name of The NetBSD Foundation nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -* ``AS IS\'\' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ - -/* This was modified by Jay Monkman to -* save and restore r12. This is necessary for RTEMS. -*/ -/* #include */ - -#define ENTRY(_LABEL) \ - .global _LABEL; _LABEL: -/* -.globl memcpy -memcpy: -*/ -ENTRY(memcpy) -stmfd sp!, {r0, r12, lr} -bl _memcpy -ldmfd sp!, {r0, r12, pc} - - -/* -.globl memove -memmove: -*/ -ENTRY(memmove) -stmfd sp!, {r0, r12, lr} -bl _memcpy -ldmfd sp!, {r0, r12, pc} - - - -/* -* This is one fun bit of code ... -* Some easy listening music is suggested while trying to understand this -* code e.g. Iron Maiden -* -* For anyone attempting to understand it : -* -* The core code is implemented here with simple stubs for memcpy() -* memmove() and bcopy(). -* -* All local labels are prefixed with Lmemcpy_ -* Following the prefix a label starting f is used in the forward copy code -* while a label using b is used in the backwards copy code -* The source and destination addresses determine whether a forward or -* backward copy is performed. -* Separate bits of code are used to deal with the following situations -* for both the forward and backwards copy. -* unaligned source address -* unaligned destination address -* Separate copy routines are used to produce an optimised result for each -* of these cases. -* The copy code will use LDM/STM instructions to copy up to 32 bytes at -* a time where possible. -* -* Note: r12 (aka ip) can be trashed during the function along with -* r0-r3 although r0-r2 have defined uses i.e. src, dest, len through out. -* Additional registers are preserved prior to use i.e. r4, r5 & lr -* -* Apologies for the state of the comments;-) -*/ - - -/* -_memcpy: -*/ -ENTRY(_memcpy) -/* Determine copy direction */ -cmp r1, r0 -bcc Lmemcpy_backwards - -moveq r0, #0 /* Quick abort for len=0 */ -moveq pc, lr - -stmdb sp!, {r0, lr} /* memcpy() returns dest addr */ -subs r2, r2, #4 -blt Lmemcpy_fl4 /* less than 4 bytes */ -ands r12, r0, #3 -bne Lmemcpy_fdestul /* oh unaligned destination addr */ -ands r12, r1, #3 -bne Lmemcpy_fsrcul /* oh unaligned source addr */ - -Lmemcpy_ft8: -/* We have aligned source and destination */ -subs r2, r2, #8 -blt Lmemcpy_fl12 /* less than 12 bytes (4 from above) */ -subs r2, r2, #0x14 -blt Lmemcpy_fl32 /* less than 32 bytes (12 from above) */ -stmdb sp!, {r4} /* borrow r4 */ - -/* blat 32 bytes at a time */ -/* XXX for really big copies perhaps we should use more registers */ -Lmemcpy_floop32: -ldmia r1!, {r3, r4, r12, lr} -stmia r0!, {r3, r4, r12, lr} -ldmia r1!, {r3, r4, r12, lr} -stmia r0!, {r3, r4, r12, lr} -subs r2, r2, #0x20 -bge Lmemcpy_floop32 - -cmn r2, #0x10 -ldmgeia r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */ -stmgeia r0!, {r3, r4, r12, lr} -subge r2, r2, #0x10 -ldmia sp!, {r4} /* return r4 */ - -Lmemcpy_fl32: -adds r2, r2, #0x14 - -/* blat 12 bytes at a time */ -Lmemcpy_floop12: -ldmgeia r1!, {r3, r12, lr} -stmgeia r0!, {r3, r12, lr} -subges r2, r2, #0x0c -bge Lmemcpy_floop12 - -Lmemcpy_fl12: -adds r2, r2, #8 -blt Lmemcpy_fl4 - -subs r2, r2, #4 -ldrlt r3, [r1], #4 -strlt r3, [r0], #4 -ldmgeia r1!, {r3, r12} -stmgeia r0!, {r3, r12} -subge r2, r2, #4 - -Lmemcpy_fl4: -/* less than 4 bytes to go */ -adds r2, r2, #4 -ldmeqia sp!, {r0, pc} /* done */ - -/* copy the crud byte at a time */ -cmp r2, #2 -ldrb r3, [r1], #1 -strb r3, [r0], #1 -ldrgeb r3, [r1], #1 -strgeb r3, [r0], #1 -ldrgtb r3, [r1], #1 -strgtb r3, [r0], #1 -ldmia sp!, {r0, pc} - -/* erg - unaligned destination */ -Lmemcpy_fdestul: -rsb r12, r12, #4 -cmp r12, #2 - -/* align destination with byte copies */ -ldrb r3, [r1], #1 -strb r3, [r0], #1 -ldrgeb r3, [r1], #1 -strgeb r3, [r0], #1 -ldrgtb r3, [r1], #1 -strgtb r3, [r0], #1 -subs r2, r2, r12 -blt Lmemcpy_fl4 /* less the 4 bytes */ - -ands r12, r1, #3 -beq Lmemcpy_ft8 /* we have an aligned source */ - -/* erg - unaligned source */ -/* This is where it gets nasty ... */ -Lmemcpy_fsrcul: -bic r1, r1, #3 -ldr lr, [r1], #4 -cmp r12, #2 -bgt Lmemcpy_fsrcul3 -beq Lmemcpy_fsrcul2 -cmp r2, #0x0c -blt Lmemcpy_fsrcul1loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5} - -Lmemcpy_fsrcul1loop16: -mov r3, lr, lsr #8 -ldmia r1!, {r4, r5, r12, lr} -orr r3, r3, r4, lsl #24 -mov r4, r4, lsr #8 -orr r4, r4, r5, lsl #24 -mov r5, r5, lsr #8 -orr r5, r5, r12, lsl #24 -mov r12, r12, lsr #8 -orr r12, r12, lr, lsl #24 -stmia r0!, {r3-r5, r12} -subs r2, r2, #0x10 -bge Lmemcpy_fsrcul1loop16 -ldmia sp!, {r4, r5} -adds r2, r2, #0x0c -blt Lmemcpy_fsrcul1l4 - -Lmemcpy_fsrcul1loop4: -mov r12, lr, lsr #8 -ldr lr, [r1], #4 -orr r12, r12, lr, lsl #24 -str r12, [r0], #4 -subs r2, r2, #4 -bge Lmemcpy_fsrcul1loop4 - -Lmemcpy_fsrcul1l4: -sub r1, r1, #3 -b Lmemcpy_fl4 - -Lmemcpy_fsrcul2: -cmp r2, #0x0c -blt Lmemcpy_fsrcul2loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5} - -Lmemcpy_fsrcul2loop16: -mov r3, lr, lsr #16 -ldmia r1!, {r4, r5, r12, lr} -orr r3, r3, r4, lsl #16 -mov r4, r4, lsr #16 -orr r4, r4, r5, lsl #16 -mov r5, r5, lsr #16 -orr r5, r5, r12, lsl #16 -mov r12, r12, lsr #16 -orr r12, r12, lr, lsl #16 -stmia r0!, {r3-r5, r12} -subs r2, r2, #0x10 -bge Lmemcpy_fsrcul2loop16 -ldmia sp!, {r4, r5} -adds r2, r2, #0x0c -blt Lmemcpy_fsrcul2l4 - -Lmemcpy_fsrcul2loop4: -mov r12, lr, lsr #16 -ldr lr, [r1], #4 -orr r12, r12, lr, lsl #16 -str r12, [r0], #4 -subs r2, r2, #4 -bge Lmemcpy_fsrcul2loop4 - -Lmemcpy_fsrcul2l4: -sub r1, r1, #2 -b Lmemcpy_fl4 - -Lmemcpy_fsrcul3: -cmp r2, #0x0c -blt Lmemcpy_fsrcul3loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5} - -Lmemcpy_fsrcul3loop16: -mov r3, lr, lsr #24 -ldmia r1!, {r4, r5, r12, lr} -orr r3, r3, r4, lsl #8 -mov r4, r4, lsr #24 -orr r4, r4, r5, lsl #8 -mov r5, r5, lsr #24 -orr r5, r5, r12, lsl #8 -mov r12, r12, lsr #24 -orr r12, r12, lr, lsl #8 -stmia r0!, {r3-r5, r12} -subs r2, r2, #0x10 -bge Lmemcpy_fsrcul3loop16 -ldmia sp!, {r4, r5} -adds r2, r2, #0x0c -blt Lmemcpy_fsrcul3l4 - -Lmemcpy_fsrcul3loop4: -mov r12, lr, lsr #24 -ldr lr, [r1], #4 -orr r12, r12, lr, lsl #8 -str r12, [r0], #4 -subs r2, r2, #4 -bge Lmemcpy_fsrcul3loop4 - -Lmemcpy_fsrcul3l4: -sub r1, r1, #1 -b Lmemcpy_fl4 - -Lmemcpy_backwards: -add r1, r1, r2 -add r0, r0, r2 -subs r2, r2, #4 -blt Lmemcpy_bl4 /* less than 4 bytes */ -ands r12, r0, #3 -bne Lmemcpy_bdestul /* oh unaligned destination addr */ -ands r12, r1, #3 -bne Lmemcpy_bsrcul /* oh unaligned source addr */ - -Lmemcpy_bt8: -/* We have aligned source and destination */ -subs r2, r2, #8 -blt Lmemcpy_bl12 /* less than 12 bytes (4 from above) */ -stmdb sp!, {r4, lr} -subs r2, r2, #0x14 /* less than 32 bytes (12 from above) */ -blt Lmemcpy_bl32 - -/* blat 32 bytes at a time */ -/* XXX for really big copies perhaps we should use more registers */ -Lmemcpy_bloop32: -ldmdb r1!, {r3, r4, r12, lr} -stmdb r0!, {r3, r4, r12, lr} -ldmdb r1!, {r3, r4, r12, lr} -stmdb r0!, {r3, r4, r12, lr} -subs r2, r2, #0x20 -bge Lmemcpy_bloop32 - -Lmemcpy_bl32: -cmn r2, #0x10 -ldmgedb r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */ -stmgedb r0!, {r3, r4, r12, lr} -subge r2, r2, #0x10 -adds r2, r2, #0x14 -ldmgedb r1!, {r3, r12, lr} /* blat a remaining 12 bytes */ -stmgedb r0!, {r3, r12, lr} -subge r2, r2, #0x0c -ldmia sp!, {r4, lr} - -Lmemcpy_bl12: -adds r2, r2, #8 -blt Lmemcpy_bl4 -subs r2, r2, #4 -ldrlt r3, [r1, #-4]! -strlt r3, [r0, #-4]! -ldmgedb r1!, {r3, r12} -stmgedb r0!, {r3, r12} -subge r2, r2, #4 - -Lmemcpy_bl4: -/* less than 4 bytes to go */ -adds r2, r2, #4 -moveq pc, lr /* done */ - -/* copy the crud byte at a time */ -cmp r2, #2 -ldrb r3, [r1, #-1]! -strb r3, [r0, #-1]! -ldrgeb r3, [r1, #-1]! -strgeb r3, [r0, #-1]! -ldrgtb r3, [r1, #-1]! -strgtb r3, [r0, #-1]! -mov pc, lr - -/* erg - unaligned destination */ -Lmemcpy_bdestul: -cmp r12, #2 - -/* align destination with byte copies */ -ldrb r3, [r1, #-1]! -strb r3, [r0, #-1]! -ldrgeb r3, [r1, #-1]! -strgeb r3, [r0, #-1]! -ldrgtb r3, [r1, #-1]! -strgtb r3, [r0, #-1]! -subs r2, r2, r12 -blt Lmemcpy_bl4 /* less than 4 bytes to go */ -ands r12, r1, #3 -beq Lmemcpy_bt8 /* we have an aligned source */ - -/* erg - unaligned source */ -/* This is where it gets nasty ... */ -Lmemcpy_bsrcul: -bic r1, r1, #3 -ldr r3, [r1, #0] -cmp r12, #2 -blt Lmemcpy_bsrcul1 -beq Lmemcpy_bsrcul2 -cmp r2, #0x0c -blt Lmemcpy_bsrcul3loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5, lr} - -Lmemcpy_bsrcul3loop16: -mov lr, r3, lsl #8 -ldmdb r1!, {r3-r5, r12} -orr lr, lr, r12, lsr #24 -mov r12, r12, lsl #8 -orr r12, r12, r5, lsr #24 -mov r5, r5, lsl #8 -orr r5, r5, r4, lsr #24 -mov r4, r4, lsl #8 -orr r4, r4, r3, lsr #24 -stmdb r0!, {r4, r5, r12, lr} -subs r2, r2, #0x10 -bge Lmemcpy_bsrcul3loop16 -ldmia sp!, {r4, r5, lr} -adds r2, r2, #0x0c -blt Lmemcpy_bsrcul3l4 - -Lmemcpy_bsrcul3loop4: -mov r12, r3, lsl #8 -ldr r3, [r1, #-4]! -orr r12, r12, r3, lsr #24 -str r12, [r0, #-4]! -subs r2, r2, #4 -bge Lmemcpy_bsrcul3loop4 - -Lmemcpy_bsrcul3l4: -add r1, r1, #3 -b Lmemcpy_bl4 - -Lmemcpy_bsrcul2: -cmp r2, #0x0c -blt Lmemcpy_bsrcul2loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5, lr} - -Lmemcpy_bsrcul2loop16: -mov lr, r3, lsl #16 -ldmdb r1!, {r3-r5, r12} -orr lr, lr, r12, lsr #16 -mov r12, r12, lsl #16 -orr r12, r12, r5, lsr #16 -mov r5, r5, lsl #16 -orr r5, r5, r4, lsr #16 -mov r4, r4, lsl #16 -orr r4, r4, r3, lsr #16 -stmdb r0!, {r4, r5, r12, lr} -subs r2, r2, #0x10 -bge Lmemcpy_bsrcul2loop16 -ldmia sp!, {r4, r5, lr} -adds r2, r2, #0x0c -blt Lmemcpy_bsrcul2l4 - -Lmemcpy_bsrcul2loop4: -mov r12, r3, lsl #16 -ldr r3, [r1, #-4]! -orr r12, r12, r3, lsr #16 -str r12, [r0, #-4]! -subs r2, r2, #4 -bge Lmemcpy_bsrcul2loop4 - -Lmemcpy_bsrcul2l4: -add r1, r1, #2 -b Lmemcpy_bl4 - -Lmemcpy_bsrcul1: -cmp r2, #0x0c -blt Lmemcpy_bsrcul1loop4 -sub r2, r2, #0x0c -stmdb sp!, {r4, r5, lr} - -Lmemcpy_bsrcul1loop32: -mov lr, r3, lsl #24 -ldmdb r1!, {r3-r5, r12} -orr lr, lr, r12, lsr #8 -mov r12, r12, lsl #24 -orr r12, r12, r5, lsr #8 -mov r5, r5, lsl #24 -orr r5, r5, r4, lsr #8 -mov r4, r4, lsl #24 -orr r4, r4, r3, lsr #8 -stmdb r0!, {r4, r5, r12, lr} -subs r2, r2, #0x10 -bge Lmemcpy_bsrcul1loop32 -ldmia sp!, {r4, r5, lr} -adds r2, r2, #0x0c -blt Lmemcpy_bsrcul1l4 - -Lmemcpy_bsrcul1loop4: -mov r12, r3, lsl #24 -ldr r3, [r1, #-4]! -orr r12, r12, r3, lsr #8 -str r12, [r0, #-4]! -subs r2, r2, #4 -bge Lmemcpy_bsrcul1loop4 - -Lmemcpy_bsrcul1l4: -add r1, r1, #1 -b Lmemcpy_bl4 diff --git a/backends/gp32/portdefs.h b/backends/gp32/portdefs.h deleted file mode 100644 index 7269f105e6..0000000000 --- a/backends/gp32/portdefs.h +++ /dev/null @@ -1,117 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef PORTDEFS_H -#define PORTDEFS_H - -#include -#include -#include -#include -#include -#include -#include - -#include "gp32std.h" -#include "gp32std_file.h" -#include "gp32std_memory.h" - -#undef byte - -#undef malloc -#undef calloc -#undef free - -#undef stderr -#undef stdout -#undef stdin - -#undef fopen -#undef fread -#undef fwrite -#undef fclose -#undef ftell -#undef rewind -#undef fseek - -#undef ferror -#undef clearerr - -#undef feof -#undef getc - -#define FILE GPFILE - -#define stderr gp_stderr -#define stdout gp_stdout -#define stdin gp_stdin - -#define fopen gp_fopen -#define fread gp_fread -#define fwrite gp_fwrite -#define fclose gp_fclose -#define fseek gp_fseek -#define ftell gp_ftell -#define ferror gp_ferror -#define clearerr gp_clearerr - -#define feof gp_feof -#define fgets gp_fgets -#define fgetc gp_fgetc -#define getc gp_fgetc - -#define fprintf gp_fprintf -#define fflush gp_fflush - -#define printf gp_printf - -#define exit gp_exit - -#define strcpy gp_strcpy -#define strncpy gp_strncpy -#define strcat gp_strcat -#define strdup gp_strdup -#define sprintf gp_sprintf -#define strcasecmp gp_strcasecmp -#define strncasecmp gp_strncasecmp - -#define memcpy gp_memcpy -#define memset gp_memset -#define malloc gp_malloc -#define calloc gp_calloc //gm_calloc -#define free gp_free - -#define FUNCTION GPDEBUG("FUNC: %s", __FUNCTION__); - -#define DELAY gp_delay(500); - -#define MARK printf("MARK: %s, %s, %d", __FILE__, __FUNCTION__, __LINE__); - -#define assert(e) ((e) ? 0 : (printf("!AS: " #e " (%s, %d)\n", __FILE__, __LINE__))) -#define ASSERT assert - -#define ENDLESSLOOP while (1) - -#endif /* PORTDEFS_H */ diff --git a/backends/gp32/startup.c b/backends/gp32/startup.c deleted file mode 100644 index b12cf3f077..0000000000 --- a/backends/gp32/startup.c +++ /dev/null @@ -1,122 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * Copyright (C) 2002 Ph0x - GP32 Backend - * Copyright (C) 2003/2004 DJWillis - GP32 Backend - * Copyright (C) 2005 Won Star - GP32 Backend - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include -#include - -#include - -#ifdef USE_GP_MEM - #include -#endif - -unsigned int HEAPSTART; -unsigned int HEAPEND; - -void InitializeFont (void); -extern void GpKeyPollingTimeSet (int loop_cnt); -extern void GpMain(void *arg); - -int main (int arg_len, char * arg_v) - { - GM_HEAP_DEF gm_heap_def; - - _gp_sdk_init(); - - // keyboard polling count setting - GpKeyPollingTimeSet (KEYPOLLING_NUM); - - #ifdef USE_GP_MEM - gm_heap_def.heapstart = (void*)(HEAPSTART); - gm_heap_def.heapend = (void *)(HEAPEND & ~3); - gm_heap_init (&gm_heap_def); - - gp_mem_func.malloc = gm_malloc; - gp_mem_func.zimalloc = gm_zi_malloc; - gp_mem_func.calloc = gm_calloc; - gp_mem_func.free = gm_free; - gp_mem_func.availablemem = gm_availablesize; - gp_mem_func.malloc_ex = gm_malloc_ex; - gp_mem_func.free_ex = gm_free_ex; - gp_mem_func.make_mem_partition = gm_make_mem_part; - - gp_str_func.memset = gm_memset; - gp_str_func.memcpy = gm_memcpy; - gp_str_func.strcpy = gm_strcpy; - gp_str_func.strncpy = gm_strncpy; - gp_str_func.strcat = gm_strcat; - gp_str_func.strncat = gm_strncat; - gp_str_func.gpstrlen = gm_lstrlen; - gp_str_func.sprintf = gm_sprintf; - gp_str_func.uppercase = gm_uppercase; - gp_str_func.lowercase = gm_lowercase; - gp_str_func.compare = gm_compare; - gp_str_func.trim_right = gm_trim_right; - #endif /*USE_GP_MEM*/ - - //Font initialize - InitializeFont (); - - GpKernelInitialize (); - - GpKernelStart (); - - GpAppExit (); - while (1) {}; - } - -void InitializeFont (void) - { - BGFONTINFO mInfo; - mInfo.kor_w = KORFONT_W; - mInfo.kor_h = KORFONT_H; - mInfo.eng_w = ENGFONT_W; - mInfo.eng_h = ENGFONT_H; - mInfo.chargap = FONT_CHARGAP; - mInfo.linegap = FONT_LINEGAP; - GpFontInit (&mInfo); - GpFontResSet ((unsigned char*)fontresKor, (unsigned char*)fontresEng); - } - -int GpPredefinedStackGet (H_THREAD th) - { - switch (th) - { - case H_THREAD_GPMAIN: - return GPMAIN_STACK_SIZE; - case H_THREAD_NET: - return NET_STACK_SIZE; - case H_THREAD_TMR0: - case H_THREAD_TMR1: - case H_THREAD_TMR2: - case H_THREAD_TMR3: - return USER_STACK_SIZE; - default: - return 0; - } - } diff --git a/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc b/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc new file mode 100644 index 0000000000..026c42d300 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc differ diff --git a/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc b/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc new file mode 100644 index 0000000000..18adade224 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc differ diff --git a/backends/platform/PalmOS/Rsc/Starter.rsrc b/backends/platform/PalmOS/Rsc/Starter.rsrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backends/platform/PalmOS/Rsc/StarterRsc.h b/backends/platform/PalmOS/Rsc/StarterRsc.h new file mode 100644 index 0000000000..0f2d7476f2 --- /dev/null +++ b/backends/platform/PalmOS/Rsc/StarterRsc.h @@ -0,0 +1,392 @@ +#ifndef STARTERRSC_H +#define STARTERRSC_H + +// Header generated by Constructor for Palm OS (R) 1.9.1 +// +// Generated at 20:53:03 on lundi 5 juin 2006 +// +// Generated for file: Starter.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE +// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ScummVM" +// +// Palm App Version: "1.0" + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainCardsButton 1003 //(Left Origin = 135, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 0, Font = Standard) +#define MainAboutButton 1012 //(Left Origin = 148, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 1, Font = Standard) +#define MainMSBitMap 1100 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1100, Usable = 0) +#define MainMSNoneBitMap 1110 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1110, Usable = 0) +#define MainUnnamed1010BitMap 2000 //(Left Origin = 148, Top Origin = 1, Bitmap Resource ID = 2000, Usable = 1) + +// Resource: tFRM 1200 +#define SkinsForm 1200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1203) +#define SkinsOKButton 1202 //(Left Origin = 5, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define SkinsCancelButton 1203 //(Left Origin = 43, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define SkinsDeleteButton 1205 //(Left Origin = 119, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define SkinsBeamButton 1206 //(Left Origin = 81, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define SkinsSoundClickCheckbox 1204 //(Left Origin = 5, Top Origin = 118, Width = 93, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define SkinsSkinList 1201 //(Left Origin = 5, Top Origin = 17, Width = 146, Usable = 1, Font = Standard, Visible Items = 9) + +// Resource: tFRM 1500 +#define CardSlotForm 1500 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define CardSlotOkButton 1510 //(Left Origin = 3, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define CardSlotCancelButton 1511 //(Left Origin = 44, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + +// Resource: tFRM 2700 +#define MiscForm 2700 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define MiscOKButton 2710 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define MiscCancelButton 2711 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + +// Resource: tFRM 2000 +#define ConvertForm 2000 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define ConvertUnnamed2001Label 2001 //(Left Origin = 7, Top Origin = 4, Usable = 1, Font = Standard) +#define ConvertUnnamed2002Label 2002 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold) + +// Resource: tFRM 2100 +#define BeamForm 2100 //(Left Origin = 2, Top Origin = 72, Width = 156, Height = 86, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define BeamSendButton 2105 //(Left Origin = 5, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define BeamCancelButton 2106 //(Left Origin = 47, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define BeamMathlibCheckbox 2101 //(Left Origin = 4, Top Origin = 28, Width = 55, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) +#define BeamGamesCheckbox 2103 //(Left Origin = 4, Top Origin = 40, Width = 86, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) +#define BeamSkinCheckbox 2104 //(Left Origin = 4, Top Origin = 52, Width = 84, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) +#define BeamUnnamed2102Label 2102 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold) + +// Resource: tFRM 2200 +#define MusicForm 2200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define MusicOKButton 2210 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define MusicCancelButton 2211 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + +// Resource: tFRM 2300 +#define TabMusicForm 2300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabMusicMusicCheckbox 2301 //(Left Origin = 4, Top Origin = 12, Width = 100, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) +#define TabMusicMultiMidiCheckbox 2308 //(Left Origin = 4, Top Origin = 24, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMusicTempoField 2302 //(Left Origin = 54, Top Origin = 36, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabMusicTitleLabel 2303 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) +#define TabMusicUnnamed2304Label 2304 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard) +#define TabMusicUnnamed2305Label 2305 //(Left Origin = 16, Top Origin = 60, Usable = 1, Font = Standard) +#define TabMusicUnnamed2306Label 2306 //(Left Origin = 18, Top Origin = 36, Usable = 1, Font = Standard) +#define TabMusicUnnamed2307Label 2307 //(Left Origin = 72, Top Origin = 36, Usable = 1, Font = Standard) +#define TabMusicUnnamed2309Label 2309 //(Left Origin = 28, Top Origin = 72, Usable = 1, Font = Standard) +#define TabMusicRateList 2311 //(Left Origin = 54, Top Origin = 73, Width = 55, Usable = 0, Font = Standard, Visible Items = 3) +#define TabMusicQualityList 2313 //(Left Origin = 54, Top Origin = 60, Width = 60, Usable = 0, Font = Standard, Visible Items = 3) +#define TabMusicDriverList 2331 //(Left Origin = 54, Top Origin = 24, Width = 65, Usable = 0, Font = Standard, Visible Items = 4) +#define TabMusicRatePopTrigger 2310 //(Left Origin = 54, Top Origin = 72, Width = 55, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2311) +#define TabMusicQualityPopTrigger 2312 //(Left Origin = 54, Top Origin = 60, Width = 50, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2313) +#define TabMusicDriverPopTrigger 2330 //(Left Origin = 54, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2331) + +// Resource: tFRM 2500 +#define TabAudioCDForm 2500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabAudioCDMP3Checkbox 2502 //(Left Origin = 4, Top Origin = 12, Width = 125, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabAudioCDLengthSecsField 2504 //(Left Origin = 112, Top Origin = 60, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabAudioCDFirstTrackField 2507 //(Left Origin = 112, Top Origin = 50, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabAudioCDUnnamed2501Label 2501 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) +#define TabAudioCDUnnamed2503Label 2503 //(Left Origin = 20, Top Origin = 60, Usable = 1, Font = Standard) +#define TabAudioCDUnnamed2505Label 2505 //(Left Origin = 130, Top Origin = 61, Usable = 1, Font = Standard) +#define TabAudioCDUnnamed2506Label 2506 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard) +#define TabAudioCDUnnamed2508Label 2508 //(Left Origin = 25, Top Origin = 24, Usable = 1, Font = Standard) +#define TabAudioCDUnnamed2511Label 2511 //(Left Origin = 21, Top Origin = 36, Usable = 1, Font = Standard) +#define TabAudioCDUnnamed2514Label 2514 //(Left Origin = 4, Top Origin = 80, Usable = 1, Font = Standard) +#define TabAudioCDDriverList 2510 //(Left Origin = 58, Top Origin = 24, Width = 90, Usable = 0, Font = Standard, Visible Items = 4) +#define TabAudioCDFormatList 2513 //(Left Origin = 58, Top Origin = 36, Width = 70, Usable = 0, Font = Standard, Visible Items = 2) +#define TabAudioCDDriverPopTrigger 2509 //(Left Origin = 58, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2510) +#define TabAudioCDFormatPopTrigger 2512 //(Left Origin = 58, Top Origin = 36, Width = 70, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2513) + +// Resource: tFRM 2600 +#define TabVolumeForm 2600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabVolumeUnnamed2601Label 2601 //(Left Origin = 29, Top Origin = 69, Usable = 1, Font = Standard) +#define TabVolumeUnnamed2603Label 2603 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold) +#define TabVolumeUnnamed2606Label 2606 //(Left Origin = 26, Top Origin = 15, Usable = 1, Font = Standard) +#define TabVolumeUnnamed2607Label 2607 //(Left Origin = 12, Top Origin = 30, Usable = 1, Font = Standard) +#define TabVolumeUnnamed2608Label 2608 //(Left Origin = 20, Top Origin = 45, Usable = 1, Font = Standard) +#define TabVolumeUnnamed2610Label 2610 //(Left Origin = 14, Top Origin = 84, Usable = 1, Font = Standard) +#define TabVolumeMusicSliderControl 2602 //(Left Origin = 58, Top Origin = 12, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) +#define TabVolumeSfxSliderControl 2604 //(Left Origin = 58, Top Origin = 27, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) +#define TabVolumePalmSliderControl 2605 //(Left Origin = 58, Top Origin = 66, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) +#define TabVolumeSpeechSliderControl 2609 //(Left Origin = 58, Top Origin = 42, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) +#define TabVolumeAudioCDSliderControl 2611 //(Left Origin = 58, Top Origin = 81, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0) + +// Resource: tFRM 2800 +#define TabMiscPalmOSForm 2800 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabMiscPalmOSVibratorCheckbox 2802 //(Left Origin = 4, Top Origin = 12, Width = 128, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSNoAutoOffCheckbox 2803 //(Left Origin = 4, Top Origin = 24, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSStdPaletteCheckbox 2804 //(Left Origin = 4, Top Origin = 84, Width = 146, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSLargerStackCheckbox 2805 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSAdvancedCheckbox 2806 //(Left Origin = 4, Top Origin = 96, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSArrowCheckbox 2807 //(Left Origin = 4, Top Origin = 72, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSExitLauncherCheckbox 2810 //(Left Origin = 4, Top Origin = 48, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSStylusClickCheckbox 2811 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscPalmOSTabTitlePalmLabel 2801 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) + +// Resource: tFRM 2900 +#define TabMiscScummVMForm 2900 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 90, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabMiscScummVMAutosaveCheckbox 2902 //(Left Origin = 4, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscScummVMDebugCheckbox 2904 //(Left Origin = 4, Top Origin = 12, Width = 90, Height = 12, Usable = 0, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscScummVMDemoCheckbox 2905 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscScummVMCopyProtectionCheckbox 2906 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscScummVMAltIntroCheckbox 2908 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscScummVMDebugLevelField 2907 //(Left Origin = 101, Top Origin = 12, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 1, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabMiscScummVMAutosaveField 2910 //(Left Origin = 101, Top Origin = 24, Width = 20, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabMiscScummVMTabTitleScummLabel 2901 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabMiscScummVMUnnamed2903Label 2903 //(Left Origin = 97, Top Origin = 12, Usable = 1, Font = Standard) +#define TabMiscScummVMUnnamed2909Label 2909 //(Left Origin = 97, Top Origin = 24, Usable = 1, Font = Standard) +#define TabMiscScummVMUnnamed2911Label 2911 //(Left Origin = 123, Top Origin = 24, Usable = 1, Font = Standard) + +// Resource: tFRM 3000 +#define GameEditForm 3000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1411) +#define GameEditOKButton 3020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define GameEditCancelButton 3021 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define GameEditDeleteButton 3023 //(Left Origin = 109, Top Origin = 139, Width = 42, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define GameEditUnnamed3022GraffitiShift 3022 //(Left Origin = 87, Top Origin = 140) + +// Resource: tFRM 3100 +#define TabGameInfoForm 3100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabGameInfoEntryNameField 3102 //(Left Origin = 4, Top Origin = 12, Width = 151, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 50, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) +#define TabGameInfoPathField 3104 //(Left Origin = 37, Top Origin = 38, Width = 118, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 150, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) +#define TabGameInfoGameField 3106 //(Left Origin = 37, Top Origin = 64, Width = 52, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 15, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0) +#define TabGameInfoUnnamed3101Label 3101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabGameInfoUnnamed3103Label 3103 //(Left Origin = 11, Top Origin = 38, Usable = 1, Font = Standard) +#define TabGameInfoUnnamed3105Label 3105 //(Left Origin = 6, Top Origin = 64, Usable = 1, Font = Standard) +#define TabGameInfoUnnamed3107Label 3107 //(Left Origin = 4, Top Origin = 79, Usable = 1, Font = Standard) +#define TabGameInfoEngineList 3109 //(Left Origin = 37, Top Origin = 57, Width = 115, Usable = 0, Font = Standard, Visible Items = 3) +#define TabGameInfoBrowsePushButton 3110 //(Left Origin = 11, Top Origin = 50, Width = 22, Height = 12, Usable = 1, Group ID = 0, Font = Standard) +#define TabGameInfoEnginePopTrigger 3108 //(Left Origin = 37, Top Origin = 79, Width = 115, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3109) + +// Resource: tFRM 3200 +#define TabGameDisplayForm 3200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 95, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabGameDisplayFilterCheckbox 3205 //(Left Origin = 4, Top Origin = 36, Width = 80, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard) +#define TabGameDisplayFullscreenCheckbox 3206 //(Left Origin = 4, Top Origin = 60, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameDisplayAspectRatioCheckbox 3207 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameDisplayUnnamed3201Label 3201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabGameDisplayUnnamed3202Label 3202 //(Left Origin = 5, Top Origin = 24, Usable = 1, Font = Standard) +#define TabGameDisplayUnnamed3208Label 3208 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) +#define TabGameDisplayGfxListList 3204 //(Left Origin = 38, Top Origin = 12, Width = 75, Usable = 0, Font = Standard, Visible Items = 2) +#define TabGameDisplayRenderList 3210 //(Left Origin = 38, Top Origin = 24, Width = 75, Usable = 0, Font = Standard, Visible Items = 6) +#define TabGameDisplayGfxPopupPopTrigger 3203 //(Left Origin = 38, Top Origin = 12, Width = 80, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3204) +#define TabGameDisplayRenderPopTrigger 3209 //(Left Origin = 38, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3209) + +// Resource: tFRM 3300 +#define TabGameOptionsForm 3300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabGameOptionsLoadSlotCheckbox 3302 //(Left Origin = 4, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameOptionsStartRoomCheckbox 3303 //(Left Origin = 4, Top Origin = 36, Width = 84, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameOptionsAmigaCheckbox 3306 //(Left Origin = 4, Top Origin = 48, Width = 81, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameOptionsSubtitlesCheckbox 3307 //(Left Origin = 4, Top Origin = 60, Width = 82, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameOptionsTalkSpeedCheckbox 3308 //(Left Origin = 4, Top Origin = 12, Width = 66, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabGameOptionsLoadSlotField 3304 //(Left Origin = 92, Top Origin = 24, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 2, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabGameOptionsStartRoomField 3305 //(Left Origin = 92, Top Origin = 36, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabGameOptionsTalkSpeedField 3309 //(Left Origin = 92, Top Origin = 12, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabGameOptionsUnnamed3301Label 3301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabGameOptionsUnnamed3314Label 3314 //(Left Origin = 88, Top Origin = 24, Usable = 1, Font = Standard) +#define TabGameOptionsUnnamed3315Label 3315 //(Left Origin = 88, Top Origin = 36, Usable = 1, Font = Standard) +#define TabGameOptionsUnnamed3316Label 3316 //(Left Origin = 88, Top Origin = 12, Usable = 1, Font = Standard) +#define TabGameOptionsUnnamed3317Label 3317 //(Left Origin = 88, Top Origin = 48, Usable = 1, Font = Standard) +#define TabGameOptionsUnnamed3318Label 3318 //(Left Origin = 88, Top Origin = 60, Usable = 1, Font = Standard) +#define TabGameOptionsLanguageList 3311 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 5) +#define TabGameOptionsPlatformList 3313 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 4) +#define TabGameOptionsLanguagePopTrigger 3310 //(Left Origin = 90, Top Origin = 60, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3311) +#define TabGameOptionsPlatformPopTrigger 3312 //(Left Origin = 90, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3313) + +// Resource: tFRM 3400 +#define ImportForm 3400 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define ImportUnnamed3401Label 3401 //(Left Origin = 4, Top Origin = 4, Usable = 1, Font = Standard) +#define ImportUnnamed3402Label 3402 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold) + +// Resource: tFRM 1400 +#define EngineForm 1400 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define EngineOkButton 1403 //(Left Origin = 4, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define EngineCancelButton 1420 //(Left Origin = 45, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define EngineUnnamed1402Label 1402 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold) +#define EngineListList 1401 //(Left Origin = 4, Top Origin = 30, Width = 148, Usable = 1, Font = Standard, Visible Items = 9) + +// Resource: tFRM 4000 +#define InfoForm 4000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define InfoOKButton 4020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) + +// Resource: tFRM 4100 +#define TabInfoAboutForm 4100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 125, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabInfoAboutTabTitleAboutLabel 4101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabInfoAboutUnnamed4103Label 4103 //(Left Origin = 23, Top Origin = 58, Usable = 1, Font = Bold) +#define TabInfoAboutUnnamed4104Label 4104 //(Left Origin = 34, Top Origin = 70, Usable = 1, Font = Standard) +#define TabInfoAboutUnnamed4105Label 4105 //(Left Origin = 8, Top Origin = 82, Usable = 1, Font = Bold) + +// Resource: tFRM 4200 +#define TabInfoVersionForm 4200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabInfoVersionTabTitleAboutLabel 4201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabInfoVersionUnnamed4202Label 4202 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) +#define TabInfoVersionUnnamed4203Label 4203 //(Left Origin = 24, Top Origin = 24, Usable = 1, Font = Standard) +#define TabInfoVersionUnnamed4204Label 4204 //(Left Origin = 4, Top Origin = 42, Usable = 1, Font = Bold) +#define TabInfoVersionUnnamed4205Label 4205 //(Left Origin = 5, Top Origin = 53, Usable = 1, Font = Standard) +#define TabInfoVersionUnnamed4206Label 4206 //(Left Origin = 4, Top Origin = 72, Usable = 1, Font = Bold) +#define TabInfoVersionUnnamed4207Label 4207 //(Left Origin = 4, Top Origin = 84, Usable = 1, Font = Standard) + +// Resource: tFRM 4300 +#define TabInfoSystemForm 4300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabInfoSystemTabTitleAboutLabel 4301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabInfoSystemUnnamed4302Label 4302 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard) +#define TabInfoSystemUnnamed4303Label 4303 //(Left Origin = 13, Top Origin = 24, Usable = 1, Font = Standard) +#define TabInfoSystemUnnamed4304Label 4304 //(Left Origin = 5, Top Origin = 36, Usable = 1, Font = Standard) +#define TabInfoSystemUnnamed4305Label 4305 //(Left Origin = 96, Top Origin = 0, Usable = 1, Font = Standard) +#define TabInfoSystemUnnamed4306Label 4306 //(Left Origin = 132, Top Origin = 0, Usable = 1, Font = Standard) + +// Resource: tFRM 1600 +#define TabCardConfigForm 1600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabCardConfigCacheCheckbox 1604 //(Left Origin = 4, Top Origin = 62, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabCardConfigLedCheckbox 1608 //(Left Origin = 4, Top Origin = 50, Width = 130, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabCardConfigCacheSizeField 1606 //(Left Origin = 68, Top Origin = 74, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1) +#define TabCardConfigTabTitleAboutLabel 1601 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabCardConfigUnnamed1605Label 1605 //(Left Origin = 21, Top Origin = 74, Usable = 1, Font = Standard) +#define TabCardConfigUnnamed1607Label 1607 //(Left Origin = 88, Top Origin = 74, Usable = 1, Font = Standard) +#define TabCardConfigSlotList 1620 //(Left Origin = 7, Top Origin = 14, Width = 146, Usable = 1, Font = Standard, Visible Items = 3) + +// Resource: tFRM 1700 +#define TabCardGameListForm 1700 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabCardGameListMoveCheckbox 1702 //(Left Origin = 4, Top Origin = 12, Width = 143, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabCardGameListDeleteCheckbox 1703 //(Left Origin = 4, Top Origin = 24, Width = 142, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabCardGameListConfirmCheckbox 1704 //(Left Origin = 4, Top Origin = 36, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabCardGameListUnnamed1701Label 1701 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) + +// Resource: tFRM 3500 +#define TabMiscExtsForm 3500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 80, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define TabMiscExtsLightspeedCheckbox 3502 //(Left Origin = 4, Top Origin = 24, Width = 95, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscExtsGolcdCheckbox 3505 //(Left Origin = 4, Top Origin = 12, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard) +#define TabMiscExtsTabTitleMoreLabel 3501 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold) +#define TabMiscExtsNothingLabel 3506 //(Left Origin = 4, Top Origin = 36, Usable = 0, Font = Standard) +#define TabMiscExtsLightspeedList 3504 //(Left Origin = 96, Top Origin = 24, Width = 50, Usable = 0, Font = Standard, Visible Items = 3) +#define TabMiscExtsLightspeedPopTrigger 3503 //(Left Origin = 96, Top Origin = 24, Width = 60, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3504) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define FrmWarnAlert 1000 +#define FrmWarnOK 0 + +// Resource: Talt 1100 +#define FrmErrorAlert 1100 +#define FrmErrorCancel 0 + +// Resource: Talt 1300 +#define FrmConfirmAlert 1300 +#define FrmConfirmYes 0 +#define FrmConfirmNo 1 + +// Resource: Talt 1400 +#define FrmInfoAlert 1400 +#define FrmInfoOK 0 + + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsMisc 1000 // Command Key: I +#define MainOptionsSkins 1001 +#define MainOptionsBeam 1003 +#define MainOptionsAbout 1005 + +// Resource: MENU 1100 +#define MainGamesMenu 1100 +#define MainGamesNew 1100 // Command Key: N +#define MainGamesEdit 1101 // Command Key: E +#define MainGamesMusicSound 1102 // Command Key: M +#define MainGamesDelete 1103 +#define MainGamesMemoryCard 1105 // Command Key: C + + +// Resource: tSTR 9991 +#define ClieCatString 9991 // "32779" + +// Resource: tSTR 9990 +#define ClieDescString 9990 // "Play your favorite Point'n'Click games" + + +// Resource: PICT 1001 +#define Bitmap 1001 + +// Resource: PICT 1002 +#define Bitmap2 1002 + +// Resource: PICT 1008 +#define Bitmap3 1008 + +// Resource: PICT 1011 +#define Bitmap4 1011 + +// Resource: PICT 1012 +#define Bitmap5 1012 + +// Resource: PICT 1018 +#define Bitmap6 1018 + +// Resource: PICT 2000 +#define infoBitmap 2000 + +// Resource: PICT 1100 +#define msOnBitmap 1100 + +// Resource: PICT 1009 +#define Bitmap7 1009 + +// Resource: PICT 1010 +#define Bitmap8 1010 + +// Resource: PICT 1110 +#define msNoneBitmap 1110 + +// Resource: PICT 1020 +#define BitmapID1020Bitmap 1020 + +// Resource: PICT 1019 +#define BitmapID1019Bitmap 1019 + +// Resource: PICT 1200 +#define msOnD2Bitmap 1200 + +// Resource: PICT 1300 +#define msNoneD2Bitmap 1300 + +// Resource: PICT 2100 +#define infoD2Bitmap 2100 + +// Resource: PICT 1501 +#define ScummVMlogoD1Bitmap 1501 + +// Resource: PICT 1502 +#define ScummVMlogoD2Bitmap 1502 + +// Resource: PICT 1000 +#define icon16bitD2Bitmap 1000 + + +// Resource: tbmf 1000 +#define Icon_infoBitmapFamily 1000 + +// Resource: tbmf 1100 +#define MsOnBitmapFamily 1100 + +// Resource: tbmf 2000 +#define InfoBitmapFamily 2000 + +// Resource: tbmf 1110 +#define MsNoneBitmapFamily 1110 + +// Resource: tbmf 1200 +#define LogoBitmapFamily 1200 + + +// Resource: taif 1000 +#define Largeicons12and8bitsAppIconFamily 1000 + +// Resource: taif 1001 +#define Smallicons12and8bitsAppIconFamily 1001 + + +#endif // STARTERRSC_H diff --git a/backends/platform/PalmOS/Rsc/batLow.bmp b/backends/platform/PalmOS/Rsc/batLow.bmp new file mode 100644 index 0000000000..1d18131450 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/batLow.bmp differ diff --git a/backends/platform/PalmOS/Rsc/builder.rsrc b/backends/platform/PalmOS/Rsc/builder.rsrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backends/platform/PalmOS/Rsc/builderrsc.h b/backends/platform/PalmOS/Rsc/builderrsc.h new file mode 100644 index 0000000000..ae91f3b924 --- /dev/null +++ b/backends/platform/PalmOS/Rsc/builderrsc.h @@ -0,0 +1,93 @@ +#ifndef BUILDERRSC_H +#define BUILDERRSC_H + +// Header generated by Constructor for Palm OS (R) 1.9.1 +// +// Generated at 17:44:44 on mardi 16 mars 2004 +// +// Generated for file: Builder.rsrc +// +// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE +// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST +// +// Palm App Name: "ScummBuilder" +// +// Palm App Version: "1.0" + + +// Resource: tFRM 1000 +#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0) +#define MainBuildButton 1001 //(Left Origin = 58, Top Origin = 138, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define MainUnnamed1002Label 1002 //(Left Origin = 0, Top Origin = 17, Usable = 1, Font = Standard) + +// Resource: tFRM 1100 +#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0) +#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard) +#define AboutTitleLabel 1102 //(Left Origin = 61, Top Origin = 23, Usable = 1, Font = Large) +#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard) +#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold) + + +// Resource: Talt 1001 +#define RomIncompatibleAlert 1001 +#define RomIncompatibleOK 0 + +// Resource: Talt 1000 +#define TestAlert 1000 +#define TestOK 0 + + +// Resource: MBAR 1000 +#define MainFormMenuBar 1000 + + +// Resource: MENU 1000 +#define MainOptionsMenu 1000 +#define MainOptionsAboutStarterApp 1000 + + +// Resource: PICT 1001 +#define Largeicon1bitBitmap 1001 + +// Resource: PICT 1002 +#define Largeicon2bitBitmap 1002 + +// Resource: PICT 1008 +#define Largeicon8bitBitmap 1008 + +// Resource: PICT 1011 +#define Smallicon1bitBitmap 1011 + +// Resource: PICT 1012 +#define Smallicon2bitBitmap 1012 + +// Resource: PICT 1018 +#define Smallicon8bitBitmap 1018 + +// Resource: PICT 21001 +#define LargeiconX21bitBitmap 21001 + +// Resource: PICT 21002 +#define LargeiconX22bitBitmap 21002 + +// Resource: PICT 21008 +#define LargeiconX28bitBitmap 21008 + +// Resource: PICT 21011 +#define SmalliconX21bitBitmap 21011 + +// Resource: PICT 21018 +#define SmalliconX28bitBitmap 21018 + +// Resource: PICT 21012 +#define SmalliconX22bitBitmap 21012 + + +// Resource: taif 1000 +#define Largeicons12and8bitsAppIconFamily 1000 + +// Resource: taif 1001 +#define Smallicons12and8bitsAppIconFamily 1001 + + +#endif // BUILDERRSC_H diff --git a/backends/platform/PalmOS/Rsc/keyAlt.bmp b/backends/platform/PalmOS/Rsc/keyAlt.bmp new file mode 100644 index 0000000000..28165394f8 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/keyAlt.bmp differ diff --git a/backends/platform/PalmOS/Rsc/keyCommand.bmp b/backends/platform/PalmOS/Rsc/keyCommand.bmp new file mode 100644 index 0000000000..1324037cd3 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/keyCommand.bmp differ diff --git a/backends/platform/PalmOS/Rsc/keyCtrl.bmp b/backends/platform/PalmOS/Rsc/keyCtrl.bmp new file mode 100644 index 0000000000..fed20fd8d0 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/keyCtrl.bmp differ diff --git a/backends/platform/PalmOS/Rsc/modules.rcp b/backends/platform/PalmOS/Rsc/modules.rcp new file mode 100644 index 0000000000..7a7afe96be --- /dev/null +++ b/backends/platform/PalmOS/Rsc/modules.rcp @@ -0,0 +1,67 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +BITMAP ID 3100 +BEGIN + BITMAP "keyCommand.bmp" BPP 1 DENSITY 2 +END +BITMAP ID 3101 +BEGIN + BITMAP "keyAlt.bmp" BPP 1 DENSITY 2 +END +BITMAP ID 3102 +BEGIN + BITMAP "keyCtrl.bmp" BPP 1 DENSITY 2 +END +BITMAP ID 3120 +BEGIN + BITMAP "batLow.bmp" BPP 1 DENSITY 2 +END +BITMAP ID 3130 +BEGIN + BITMAP "numpad.bmp" BPP 1 DENSITY 2 +END + +/* +BITMAP ID 3100 "keyCommand.bmp" DENSITY 2 +BITMAP ID 3101 "keyAlt.bmp" DENSITY 2 +BITMAP ID 3102 "keyCtrl.bmp" DENSITY 2 +BITMAP ID 3120 "batLow.bmp" DENSITY 2 +BITMAP ID 3130 "numpad.bmp" DENSITY 2 +*/ +BITMAP ID 3000 "keyCommand.bmp" DENSITY 1 +BITMAP ID 3001 "keyAlt.bmp" DENSITY 1 +BITMAP ID 3002 "keyCtrl.bmp" DENSITY 1 +BITMAP ID 3020 "batLow.bmp" DENSITY 1 +BITMAP ID 3030 "numpad.bmp" DENSITY 1 + +ALERT ID 1200 + DEFAULTBUTTON 0 + ERROR +BEGIN + TITLE "ScummVM Fatal Error" + MESSAGE "^1" + BUTTONS "Exit" +END + diff --git a/backends/platform/PalmOS/Rsc/modulesrsc.h b/backends/platform/PalmOS/Rsc/modulesrsc.h new file mode 100644 index 0000000000..14b32ee0b6 --- /dev/null +++ b/backends/platform/PalmOS/Rsc/modulesrsc.h @@ -0,0 +1,6 @@ +#ifndef MODULESRSC_H +#define MODULESRSC_H + +#define FrmFatalErrorAlert 1200 + +#endif diff --git a/backends/platform/PalmOS/Rsc/numpad.bmp b/backends/platform/PalmOS/Rsc/numpad.bmp new file mode 100644 index 0000000000..7763d76c05 Binary files /dev/null and b/backends/platform/PalmOS/Rsc/numpad.bmp differ diff --git a/backends/platform/PalmOS/Src/args.cpp b/backends/platform/PalmOS/Src/args.cpp new file mode 100644 index 0000000000..941072aff8 --- /dev/null +++ b/backends/platform/PalmOS/Src/args.cpp @@ -0,0 +1,106 @@ +#include +#include "palmdefs.h" +#include "args.h" +#include "pace.h" +#include "endianutils.h" + +Char **ArgsInit() { + // first 4 bytes keep the real address of the chunk + MemHandle argvH = MemHandleNew(sizeof(Char *) + (MAX_ARG * sizeof(Char **) + 2)); + // real addr + Char *lockP = (Char *)MemHandleLock(argvH); + // 4byte aligned + Char **argvP = (Char **)ALIGN_4BYTE(lockP); + // save real addr + argvP[0] = lockP; + // initial position + argvP++; + + for(UInt8 count = 0; count < MAX_ARG; count++) + argvP[count] = NULL; + + return argvP; +} + +void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP) { + if (argP) { + MemHandle newArg; + UInt16 len2 = 0; + UInt16 len1 = StrLen(argP); + + if (len1 > 0) { + if (parmP) + len2 = StrLen(parmP); + + (*countArgP)++; + newArg = MemHandleNew(len1 + len2 + 1); // +1 = NULL CHAR + *argvP = (Char *)MemHandleLock(newArg); + StrCopy(*argvP, argP); + + if (parmP) + StrCat(*argvP, parmP); + } + } +} + +void ArgsFree(Char **argvP) { + if (!argvP) + return; + + MemHandle oldH; + + for(UInt8 count = 0; count < MAX_ARG; count++) + if (argvP[count]) { + oldH = MemPtrRecoverHandle(argvP[count]); + MemHandleUnlock(oldH); + MemHandleFree(oldH); + } + + argvP--; + oldH = MemPtrRecoverHandle(argvP[0]); + MemHandleUnlock(oldH); + MemHandleFree(oldH); +} + +void ArgsSetOwner(Char **argvP, UInt16 owner) { + if (!argvP) + return; + + MemHandle oldH; + + for(UInt8 count = 0; count < MAX_ARG; count++) + if (argvP[count]) { + oldH = MemPtrRecoverHandle(argvP[count]); + MemHandleSetOwner(oldH, owner); + } + + argvP--; + oldH = MemPtrRecoverHandle(argvP[0]); + MemHandleSetOwner(oldH, owner); +} + +void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm) { + if (arm) { + for(UInt8 count = 0; count < MAX_ARG; count++) + if (argvP[count]) + argvP[count] = (Char *)ByteSwap32(argvP[count]); + } + + FtrSet(appFileCreator, ftrArgsData , (UInt32)argvP); + FtrSet(appFileCreator, ftrArgsCount, (UInt32)countArg); +} + +void ArgsExportRelease(Boolean arm) { + if (arm) { + Char **argvP; + Err e = FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP); + + if (argvP) + for(UInt8 count = 0; count < MAX_ARG; count++) + if (argvP[count]) + argvP[count] = (Char *)ByteSwap32(argvP[count]); + } + + FtrUnregister(appFileCreator, ftrArgsCount); + FtrUnregister(appFileCreator, ftrArgsData); +} diff --git a/backends/platform/PalmOS/Src/args.h b/backends/platform/PalmOS/Src/args.h new file mode 100644 index 0000000000..f8b5cb9aa0 --- /dev/null +++ b/backends/platform/PalmOS/Src/args.h @@ -0,0 +1,43 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef ARGS_H +#define ARGS_H + +#define MAX_ARG 25 + +#define ftrArgsData 1300 +#define ftrArgsCount 1301 +#define ftrVars 1302 +#define ftrStack 1303 + +Char **ArgsInit(); +void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP); +void ArgsFree(Char **argvP); +void ArgsSetOwner(Char **argvP, UInt16 owner); + +void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm); +void ArgsExportRelease(Boolean arm); + +#endif diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp new file mode 100644 index 0000000000..9a5e972bbd --- /dev/null +++ b/backends/platform/PalmOS/Src/base_event.cpp @@ -0,0 +1,333 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_base.h" + +#if defined(COMPILE_OS5) && defined(PALMOS_ARM) +extern "C" void SysEventGet(EventType *eventP, Int32 timeout); +extern "C" void SysEventAddToQueue (const EventType *eventP); +#endif + +void OSystem_PalmBase::timer_handler() { + UInt32 msecs = getMillis(); + + if (_timer.active && (msecs >= _timer.nextExpiry)) { + _timer.duration = _timer.callback(_timer.duration); + _timer.nextExpiry = msecs + _timer.duration; + } +} + +void OSystem_PalmBase::battery_handler() { + // check battery level every 15secs + if ((TimGetTicks() - _batCheckLast) > _batCheckTicks) { + UInt16 voltage, warnThreshold, criticalThreshold; + Boolean pluggedIn; + voltage = SysBatteryInfoV20(false, &warnThreshold, &criticalThreshold, NULL, NULL, &pluggedIn); + + if (!pluggedIn) { + if (voltage <= warnThreshold) { + if (!_showBatLow) { + _showBatLow = true; + draw_osd(kDrawBatLow, _screenDest.w - 18, -16, true, 2); + displayMessageOnOSD("Battery low."); + } + } else { + if (_showBatLow) { + _showBatLow = false; + draw_osd(kDrawBatLow, _screenDest.w - 18, -16, false); + } + } + + if (voltage <= criticalThreshold) { + ::EventType event; + event.eType = keyDownEvent; + event.data.keyDown.chr = vchrPowerOff; + event.data.keyDown.modifiers = commandKeyMask; +#if defined(COMPILE_OS5) && defined(PALMOS_ARM) + SysEventAddToQueue(&event); +#else + EvtAddEventToQueue(&event); +#endif + } + } + + _batCheckLast = TimGetTicks(); + } +} + +bool OSystem_PalmBase::pollEvent(Event &event) { + ::EventType ev; + Boolean handled; + UInt32 keyCurrentState; + Coord x, y; + + battery_handler(); + timer_handler(); + sound_handler(); + + for(;;) { +#if defined(COMPILE_OS5) && defined(PALMOS_ARM) + SysEventGet(&ev, evtNoWait); +#else + EvtGetEvent(&ev, evtNoWait); +#endif + // check for hardkey repeat for mouse emulation + keyCurrentState = KeyCurrentState(); + // check_hard_keys(); + + if (!(keyCurrentState & _keyMouseMask)) { + _lastKeyRepeat = 0; + } else { + if (getMillis() >= (_keyMouseRepeat + _keyMouseDelay)) { + _keyMouseRepeat = getMillis(); + + if (gVars->arrowKeys) { + if (keyCurrentState & _keyMouse.bitUp) + event.kbd.keycode = 273; + else if (keyCurrentState & _keyMouse.bitDown) + event.kbd.keycode = 274; + else if (keyCurrentState & _keyMouse.bitLeft) + event.kbd.keycode = 276; + else if (keyCurrentState & _keyMouse.bitRight) + event.kbd.keycode = 275; + else if (keyCurrentState & _keyMouse.bitButLeft) + event.kbd.keycode = chrLineFeed; + + event.type = EVENT_KEYDOWN; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + + } else { + Int8 sx = 0; + Int8 sy = 0; + + if (keyCurrentState & _keyMouse.bitUp) + sy = -1; + else if (keyCurrentState & _keyMouse.bitDown) + sy = +1; + + if (keyCurrentState & _keyMouse.bitLeft) + sx = -1; + else if (keyCurrentState & _keyMouse.bitRight) + sx = +1; + + if (sx || sy) { + simulate_mouse(event, sx, sy, &x, &y); + event.type = EVENT_MOUSEMOVE; + _lastKey = kKeyMouseMove; + + } else { + x = _mouseCurState.x; + y = _mouseCurState.y; + + if (keyCurrentState & _keyMouse.bitButLeft) { + event.type = EVENT_LBUTTONDOWN; + _lastKey = kKeyMouseLButton; + + } else if (_lastKey == kKeyMouseLButton) { + event.type = EVENT_LBUTTONUP; + _lastKey = kKeyNone; + } + } + + event.mouse.x = x; + event.mouse.y = y; + warpMouse(x, y); + // updateCD(); + } + return true; + } + } + + if (ev.eType == keyDownEvent) { + switch (ev.data.keyDown.chr) { + // ESC key + case vchrLaunch: + _lastKey = kKeyNone; + event.type = EVENT_KEYDOWN; + event.kbd.keycode = 27; + event.kbd.ascii = 27; + event.kbd.flags = 0; + return true; + + // F5 = menu + case vchrMenu: + _lastKey = kKeyNone; + event.type = EVENT_KEYDOWN; + event.kbd.keycode = 319; + event.kbd.ascii = 319; + event.kbd.flags = 0; + return true; + + // if hotsync pressed, etc... + case vchrHardCradle: + case vchrHardCradle2: + case vchrLowBattery: + case vchrFind: +// case vchrBrightness: // volume control on Zodiac, let other backends disable it + case vchrContrast: + // do nothing + _lastKey = kKeyNone; + return true; + } + } + + if (check_event(event, &ev)) + return true; + _lastKey = kKeyNone; + + // prevent crash when alarm is raised + handled = ((ev.eType == keyDownEvent) && + (ev.data.keyDown.modifiers & commandKeyMask) && + ((ev.data.keyDown.chr == vchrAttnStateChanged) || + (ev.data.keyDown.chr == vchrAttnUnsnooze))); + + // graffiti strokes, auto-off, etc... + if (!handled) + if (SysHandleEvent(&ev)) + continue; + + switch(ev.eType) { + case penMoveEvent: + get_coordinates(&ev, x, y); + + if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) + return false; + + if (_lastEvent != penMoveEvent && (abs(y - event.mouse.y) <= 2 || abs(x - event.mouse.x) <= 2)) // move only if + return false; + + _lastEvent = penMoveEvent; + event.type = EVENT_MOUSEMOVE; + event.mouse.x = x; + event.mouse.y = y; + warpMouse(x, y); + return true; + + case penDownEvent: + get_coordinates(&ev, x, y); + + // indy fight mode + if (_useNumPad && !_overlayVisible) { + char num = '1'; + num += 9 - + (3 - (3 * x / _screenWidth )) - + (3 * (3 * y / _screenHeight)); + + event.type = EVENT_KEYDOWN; + event.kbd.keycode = num; + event.kbd.ascii = num; + event.kbd.flags = 0; + + _lastEvent = keyDownEvent; + return true; + } + + _lastEvent = penDownEvent; + if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) + return false; + + event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONDOWN : EVENT_MOUSEMOVE); + event.mouse.x = x; + event.mouse.y = y; + warpMouse(x, y); + return true; + + case penUpEvent: + get_coordinates(&ev, x, y); + + event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONUP : EVENT_MOUSEMOVE); + if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0) + return false; + + event.mouse.x = x; + event.mouse.y = y; + warpMouse(x, y); + return true; + + case keyDownEvent: + if (ev.data.keyDown.chr == vchrCommand && + (ev.data.keyDown.modifiers & commandKeyMask)) { + + _lastKeyModifier++; + _lastKeyModifier %= kModifierCount; + + if (_lastKeyModifier) + draw_osd((kDrawKeyState + _lastKeyModifier - 1), 2, _screenDest.h + 2, true); + else + draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false); + + return false; + } + + char mask = 0; + UInt16 key = ev.data.keyDown.chr; + + if (_lastKeyModifier == kModifierNone) { + // for keyboard mode + if (ev.data.keyDown.modifiers & shiftKeyMask) mask |= KBD_SHIFT; + if (ev.data.keyDown.modifiers & controlKeyMask) mask |= KBD_CTRL; + if (ev.data.keyDown.modifiers & optionKeyMask) mask |= KBD_ALT; + if (ev.data.keyDown.modifiers & commandKeyMask) mask |= KBD_CTRL|KBD_ALT; + } else { + // for grafiti mode + if (_lastKeyModifier == kModifierCommand) mask = KBD_CTRL|KBD_ALT; + if (_lastKeyModifier == kModifierAlt) mask = KBD_ALT; + if (_lastKeyModifier == kModifierCtrl) mask = KBD_CTRL; + } + + if (_lastKeyModifier) + draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false); + _lastKeyModifier = kModifierNone; + + // F1 -> F10 key + if (key >= '0' && key <= '9' && mask == (KBD_CTRL|KBD_ALT)) { + key = (key == '0') ? 324 : (315 + key - '1'); + mask = 0; + + // exit + } else if ((key == 'z' && mask == KBD_CTRL) || (mask == KBD_ALT && key == 'x')) { + event.type = EVENT_QUIT; + return true; + + // num pad (indy fight mode) + } else if (key == 'n' && mask == (KBD_CTRL|KBD_ALT) && !_overlayVisible) { + _useNumPad = !_useNumPad; + draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, _useNumPad, 1); + displayMessageOnOSD(_useNumPad ? "Fight mode on." : "Fight mode off."); + return false; + } + + // other keys + event.type = EVENT_KEYDOWN; + event.kbd.keycode = key; + event.kbd.ascii = key; + event.kbd.flags = mask; + return true; + + default: + return false; + }; + } +} diff --git a/backends/platform/PalmOS/Src/base_gfx.cpp b/backends/platform/PalmOS/Src/base_gfx.cpp new file mode 100644 index 0000000000..f9d3db5d4a --- /dev/null +++ b/backends/platform/PalmOS/Src/base_gfx.cpp @@ -0,0 +1,280 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_base.h" + +#ifdef PALMOS_68K +# include +#endif + +/* + * Graphics modes + * + */ + +static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { + {"1x", "Normal", GFX_NORMAL}, + {"wide", "Wide", GFX_WIDE}, + {0, 0, 0} +}; + +int OSystem_PalmBase::getDefaultGraphicsMode() const { + return GFX_NORMAL; +} + +const OSystem::GraphicsMode *OSystem_PalmBase::getSupportedGraphicsModes() const { + return int_getSupportedGraphicsModes(); +} + +const OSystem::GraphicsMode *OSystem_PalmBase::int_getSupportedGraphicsModes() const { + return s_supportedGraphicsModes; +} + +int OSystem_PalmBase::getGraphicsMode() const { + return _mode; +} + +bool OSystem_PalmBase::setGraphicsMode(int mode) { + switch(mode) { + case GFX_NORMAL: + case GFX_WIDE: + _setMode = mode; + break; + + default: + warning("unknown gfx mode %d", mode); + _setMode = GFX_NORMAL; + return false; + } + + return true; +} + +/* + * Init + * + */ + +void OSystem_PalmBase::initSize(uint w, uint h) { + _screenWidth = w; + _screenHeight = h; + + _screenDest.w = _screenWidth; + _screenDest.h = _screenHeight; + + unload_gfx_mode(); + _mode = _setMode; + load_gfx_mode(); + + warpMouse(200, 150); + int_initSize(w, h); +} + +/* + * Palette + * + */ +void OSystem_PalmBase::setPalette(const byte *colors, uint start, uint num) { + RGBColorType *base = _currentPalette + start; + + for(uint i = 0; i < num; i++) { + base[i].r = colors[0]; + base[i].g = colors[1]; + base[i].b = colors[2]; + + extras_palette(i + start, colors[0], colors[1], colors[2]); + colors += 4; + } + + if (start < _paletteDirtyStart) + _paletteDirtyStart = start; + + if (start + num > _paletteDirtyEnd) + _paletteDirtyEnd = start + num; +} + +void OSystem_PalmBase::grabPalette(byte *colors, uint start, uint num) { + const RGBColorType *base = _currentPalette + start; + + for (uint i = 0; i < num; ++i) { + colors[i * 4] = base[i].r; + colors[i * 4 + 1] = base[i].g; + colors[i * 4 + 2] = base[i].b; + colors[i * 4 + 3] = 0xFF; + } +} + +/* + * Screen + * + */ + +void OSystem_PalmBase::setShakePos(int shakeOffset) { + _new_shake_pos = shakeOffset; + int_setShakePos(shakeOffset); +} + +void OSystem_PalmBase::updateScreen() { + // Check whether the palette was changed in the meantime and update the + // screen surface accordingly. + if (_paletteDirtyEnd != 0 && _setPalette) { + WinSetDrawWindow(WinGetDisplayWindow()); + WinPalette(winPaletteSet, _paletteDirtyStart, _paletteDirtyEnd - _paletteDirtyStart, _currentPalette + _paletteDirtyStart); + _paletteDirtyEnd = 0; + //_redawOSD = true; + +#ifdef PALMOS_68Ks + UInt8 oldCol; + oldCol = gVars->indicator.on; + gVars->indicator.on = RGBToColor(0,255,0); + + if (oldCol != gVars->indicator.on) + _redrawOSD = true; + +/* { + // redraw if needed + if (_lastKeyModifier) + draw1BitGfx((kDrawKeyState + _lastKeyModifier - 1), 2, getHeight() + 2, true); + + if(_useNumPad) + draw1BitGfx(kDrawNumPad, (getWidth() >> 1) - 32, getHeight() + 2, true); + + if (_showBatLow) + draw1BitGfx(kDrawBatLow, (getWidth() >> 1), -16, true); + }*/ +#endif + } + if (_redawOSD) { + _redawOSD = false; + draw_osd(kDrawBatLow, _screenDest.w - 18, -16, _showBatLow, 2); + draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, (_useNumPad && !_overlayVisible), 1); + } + int_updateScreen(); + +} + +void OSystem_PalmBase::clearScreen() { + WinSetDrawWindow(WinGetDisplayWindow()); + WinSetBackColor(RGBToColor(0,0,0)); + WinEraseWindow(); +} + +void OSystem_PalmBase::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { +//return; + +#ifdef PALMOS_68K + MemHandle hTemp = DmGetResource(bitmapRsc, id); +#else + MemHandle hTemp = DmGetResource('abmp', id + 100); +#endif + + if (hTemp) { + /*static const UInt32 pal[3] = { + (TwGfxComponentsToPackedRGB(0,255,0)), + (TwGfxComponentsToPackedRGB(255,255,0)), + (TwGfxComponentsToPackedRGB(255,0,0)) + };*/ + + BitmapType *bmTemp; + bmTemp = (BitmapType *)MemHandleLock(hTemp); + + Coord w, h; +#ifdef PALMOS_68K + BmpGlueGetDimensions(bmTemp, &w, &h, 0); +#else + BmpGetDimensions(bmTemp, &w, &h, 0); +#endif + PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; + RectangleType r = { dst.x, dst.y, w, h }; + + RectangleType c; + + UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); + WinGetClip(&c); + WinResetClip(); + if (show) { + WinSetDrawWindow(_screenH); + WinSetBackColor(0); + WinSetForeColor(120); // pal[color] + WinFillRectangle(&r, 0); + WinSetDrawMode(winOverlay); + WinDrawBitmap(bmTemp, 0, 0); + WinSetDrawMode(winPaint); + + } else { + WinSetBackColor(0); + WinFillRectangle(&r, 0); + } + WinSetClip(&c); + WinSetCoordinateSystem(old); + + MemPtrUnlock(bmTemp); + DmReleaseResource(hTemp); + } + +/* MemHandle hTemp = DmGetResource(bitmapRsc, id); + + if (hTemp) { + BitmapType *bmTemp; + UInt32 *bmData; + UInt8 ih, iw, ib; + Coord w, h; + Int16 blocks, next; + + UInt8 *scr = _screenP + x + _screenPitch * y; + bmTemp = (BitmapType *)MemHandleLock(hTemp); + bmData = (UInt32 *)BmpGetBits(bmTemp); + +#ifdef PALMOS_68K + BmpGlueGetDimensions(bmTemp, &w, &h, 0); +#else + BmpGetDimensions(bmTemp, &w, &h, 0); +#endif + + blocks = w >> 5; + next = w - (blocks << 5); + + if (next) + blocks++; + + for (ih = 0; ih < h; ih++) { // line + for (ib = 0; ib < blocks; ib++) { // 32pix block + next = w - (ib << 5); + next = MIN(next, (Coord)32); + + for (iw = 0; iw < next; iw++) { // row + *scr++ = ((*bmData & (1 << (31 - iw))) && show) ? + gVars->indicator.on : + gVars->indicator.off; + } + + bmData++; + } + scr += _screenPitch - w; + } + + MemHandleUnlock(hTemp); + DmReleaseResource(hTemp); + }*/ +} diff --git a/backends/platform/PalmOS/Src/base_mouse.cpp b/backends/platform/PalmOS/Src/base_mouse.cpp new file mode 100644 index 0000000000..1fb00e1551 --- /dev/null +++ b/backends/platform/PalmOS/Src/base_mouse.cpp @@ -0,0 +1,72 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_base.h" + +void OSystem_PalmBase::warpMouse(int x, int y) { + if (x != _mouseCurState.x || y != _mouseCurState.y) { + _mouseCurState.x = x; + _mouseCurState.y = y; + undraw_mouse(); + } +} + +bool OSystem_PalmBase::showMouse(bool visible) { + if (_mouseVisible == visible) + return visible; + + bool last = _mouseVisible; + _mouseVisible = visible; + + if (visible) + draw_mouse(); + else + undraw_mouse(); + + return last; +} + +void OSystem_PalmBase::simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr) { + Int16 x = _mouseCurState.x; + Int16 y = _mouseCurState.y; + Int16 slow; + + _lastKeyRepeat++; + + if (_lastKeyRepeat > 32) + _lastKeyRepeat = 32; + + slow = (iHoriz && iVert) ? 2 : 1; + + x += iHoriz * (_lastKeyRepeat >> 2) / slow; + y += iVert * (_lastKeyRepeat >> 2) / slow; + + x = (x < 0 ) ? 0 : x; + x = (x >= _screenWidth ) ? _screenWidth - 1 : x; + y = (y < 0 ) ? 0 : y; + y = (y >= _screenHeight ) ? _screenHeight - 1 : y; + + *xr = x; + *yr = y; +} diff --git a/backends/platform/PalmOS/Src/be_68k.cpp b/backends/platform/PalmOS/Src/be_68k.cpp new file mode 100644 index 0000000000..102f8da397 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_68k.cpp @@ -0,0 +1,26 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2005 The ScummVM project + * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +/* More to come */ diff --git a/backends/platform/PalmOS/Src/be_68k.h b/backends/platform/PalmOS/Src/be_68k.h new file mode 100644 index 0000000000..102f8da397 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_68k.h @@ -0,0 +1,26 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2005 The ScummVM project + * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +/* More to come */ diff --git a/backends/platform/PalmOS/Src/be_base.cpp b/backends/platform/PalmOS/Src/be_base.cpp new file mode 100644 index 0000000000..938b3b98c6 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_base.cpp @@ -0,0 +1,116 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_base.h" +#include "common/config-file.h" +#include "common/config-manager.h" + +OSystem_PalmBase::OSystem_PalmBase() { + _overlayVisible = false; + + _current_shake_pos = 0; + _new_shake_pos = 0; + + _paletteDirtyStart = 0; + _paletteDirtyEnd = 0; + + _gfxLoaded = false; + _modeChanged = false; + _setMode = GFX_NORMAL; + _mode = _setMode; + _redawOSD = false; + _setPalette = true; + + _offScreenH = NULL; + _screenH = NULL; + _offScreenP = NULL; + _screenP = NULL; + _screenPitch = gVars->screenPitch; + + _lastEvent = nilEvent; + _lastKey = kKeyNone; + _lastKeyModifier = kModifierNone; + _lastKeyRepeat = 100; + _useNumPad = false; + _showBatLow = false; + _batCheckTicks = SysTicksPerSecond() * 15; + _batCheckLast = TimGetTicks(); + + _mouseDataH = NULL; + _mouseDataP = NULL; + _mouseVisible = false; + _mouseDrawn = false; + MemSet(&_keyMouse, sizeof(_keyMouse), 0); + MemSet(&_mouseCurState, sizeof(_mouseCurState), 0); + MemSet(&_mouseOldState, sizeof(_mouseOldState), 0); + MemSet(&_timer, sizeof(TimerType), 0); + MemSet(&_sound, sizeof(SoundType), 0); + + _keyMouseRepeat = 0; + _keyMouseDelay = (gVars->arrowKeys) ? computeMsecs(125) : computeMsecs(25); +} + +void OSystem_PalmBase::initBackend() { + if (gVars->autoSave != -1) + ConfMan.setInt("autosave_period", gVars->autoSave); + + _keyMouse.bitUp = keyBitPageUp; + _keyMouse.bitDown = keyBitPageDown; + _keyMouse.bitLeft = keyBitHard1; + _keyMouse.bitRight = keyBitHard2; + _keyMouse.bitButLeft= keyBitHard3; + _keyMouse.hasMore = false; + + int_initBackend(); + _keyMouseMask = (_keyMouse.bitUp | _keyMouse.bitDown | _keyMouse.bitLeft | _keyMouse.bitRight | _keyMouse.bitButLeft); +} + +uint32 OSystem_PalmBase::getMillis() { + return TimGetTicks() * 1000 / SysTicksPerSecond(); +} + +void OSystem_PalmBase::delayMillis(uint msecs) { + Int32 delay = computeMsecs(msecs); + + if (delay > 0) + SysTaskDelay(delay); +} + +void OSystem_PalmBase::setTimerCallback(TimerProc callback, int timer) { + if (callback != NULL) { + _timer.duration = timer; + _timer.nextExpiry = getMillis() + timer; + _timer.callback = callback; + _timer.active = true; + } else { + _timer.active = false; + } +} + +void OSystem_PalmBase::quit() { + int_quit(); + clearSoundCallback(); + unload_gfx_mode(); + exit(0); +} diff --git a/backends/platform/PalmOS/Src/be_base.h b/backends/platform/PalmOS/Src/be_base.h new file mode 100644 index 0000000000..bfbe8e9b23 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_base.h @@ -0,0 +1,246 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BE_BASE_H +#define BE_BASE_H + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +enum { + GFX_NORMAL = 0, + GFX_WIDE, +}; + +// OSD key state +enum { + kModifierNone = 0, + kModifierCommand, + kModifierAlt, + kModifierCtrl, + kModifierCount +}; + +// OSD resource id +#define kDrawKeyState 3000 +#define kDrawNumPad 3010 +#define kDrawBatLow 3020 +#define kDrawFight 3030 + +#define computeMsecs(x) ((SysTicksPerSecond() * x) / 1000) + +typedef struct { + UInt32 duration, nextExpiry; + Boolean active; + OSystem::TimerProc callback; +} TimerType, *TimerPtr; + +typedef struct { + Boolean active; + void *proc; + void *param; +} SoundType, *SoundPtr; + +class OSystem_PalmBase : public OSystem { +private: + virtual void int_initBackend() { } + + virtual const GraphicsMode *int_getSupportedGraphicsModes() const; + virtual void int_updateScreen() = 0; + virtual void int_initSize(uint w, uint h) = 0; + virtual void int_setShakePos(int shakeOffset) { } + + virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { } + virtual void int_quit() { } + + virtual void unload_gfx_mode() = 0; + virtual void load_gfx_mode() = 0; + + virtual void draw_mouse() = 0; + virtual void undraw_mouse() = 0; + +// virtual bool check_hard_keys() = 0; + virtual bool check_event(Event &event, EventPtr ev) = 0; + + virtual void timer_handler(); + void battery_handler(); + virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y) = 0; + void simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr); + virtual void sound_handler() = 0; + +protected: + virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); + + enum { + kKeyNone = 0, + kKeyMouseMove = 1 << 0, + kKeyMouseLButton = 1 << 1, + + kKeyCalc = 1 << 30, + kKeyAny = 1 << 31 + }; + enum { + MAX_MOUSE_W = 40, + MAX_MOUSE_H = 40 + }; + struct MousePos { + int16 x,y,w,h; + }; + + TimerType _timer; + SoundType _sound; + + RGBColorType _currentPalette[256]; + uint _paletteDirtyStart, _paletteDirtyEnd; + + int _mode, _setMode; + int16 _screenWidth, _screenHeight; + Boolean _modeChanged, _gfxLoaded; + UInt32 _screenPitch; + + PointType _screenOffset; + struct { + Coord w, h; + } _screenDest; + byte *_screenP, *_offScreenP; + WinHandle _screenH, _offScreenH; + + int _current_shake_pos; + int _new_shake_pos; + + Boolean _overlayVisible; + Boolean _redawOSD, _setPalette; + + UInt32 _keyMouseMask, _keyMouseRepeat, _keyMouseDelay; + struct { + UInt32 bitUp; + UInt32 bitDown; + UInt32 bitLeft; + UInt32 bitRight; + UInt32 bitButLeft; + Boolean hasMore; + } _keyMouse; + + bool _mouseVisible; + bool _mouseDrawn; + MousePos _mouseCurState; + MousePos _mouseOldState; + int16 _mouseHotspotX; + int16 _mouseHotspotY; + byte _mouseKeyColor; + byte *_mouseDataP, *_mouseBackupP; + WinHandle _mouseDataH, _mouseBackupH; + + eventsEnum _lastEvent; + WChar _lastKey; + UInt8 _lastKeyModifier; + UInt32 _lastKeyRepeat; + Boolean _useNumPad, _showBatLow; + UInt32 _batCheckTicks, _batCheckLast; + + int _samplesPerSec; + +public: + OSystem_PalmBase(); + void initBackend(); + +/* + virtual void setFeatureState(Feature f, bool enable) {}; + + + bool hasFeature(Feature f); + bool getFeatureState(Feature f); + + virtual void beginGFXTransaction(); + virtual void endGFXTransaction(); + + virtual int16 getOverlayHeight(); + virtual int16 getOverlayWidth(); + virtual int screenToOverlayX(int x); + virtual int screenToOverlayY(int y); + virtual int overlayToScreenX(int x); + virtual int overlayToScreenY(int y); + + virtual OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b); + virtual void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b); + + virtual void setCursorPalette(const byte *colors, uint start, uint num); + virtual void disableCursorPalette(bool disable); + + virtual void displayMessageOnOSD(const char *msg); +*/ + const GraphicsMode *getSupportedGraphicsModes() const; + int getGraphicsMode() const; + virtual int getDefaultGraphicsMode() const; + virtual bool setGraphicsMode(int mode); + virtual bool grabRawScreen(Graphics::Surface *surf) { return false; } + + void initSize(uint w, uint h); + int16 getWidth() { return _screenWidth; } + int16 getHeight() { return _screenHeight; } + + void setShakePos(int shakeOffset); + virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) = 0; + virtual void updateScreen(); + virtual void clearScreen(); + + bool showMouse(bool visible); + void warpMouse(int x, int y); + virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) = 0; + + virtual void showOverlay() = 0; + virtual void hideOverlay() = 0; + virtual void clearOverlay() = 0; + virtual void grabOverlay(OverlayColor *buf, int pitch) = 0; + virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) = 0; + + void setPalette(const byte *colors, uint start, uint num); + void grabPalette(byte *colors, uint start, uint num); + virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b) = 0; + virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) = 0; + + bool pollEvent(Event &event); + + virtual uint32 getMillis(); + virtual void delayMillis(uint msecs); + + virtual void setTimerCallback(TimerProc callback, int interval); + + virtual MutexRef createMutex() { return NULL; } + virtual void lockMutex(MutexRef mutex) {} + virtual void unlockMutex(MutexRef mutex) {} + virtual void deleteMutex(MutexRef mutex) {} + + virtual bool setSoundCallback(SoundProc proc, void *param) = 0; + virtual void clearSoundCallback() = 0; + int getOutputSampleRate() const { return _samplesPerSec; } + + void quit(); + virtual void setWindowCaption(const char *caption) = 0; + + Common::SaveFileManager *getSavefileManager(); +}; + +#endif diff --git a/backends/platform/PalmOS/Src/be_os5.cpp b/backends/platform/PalmOS/Src/be_os5.cpp new file mode 100644 index 0000000000..6b00351f49 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_os5.cpp @@ -0,0 +1,111 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" + +#ifndef __TWKEYS_H__ +#include +#include +#endif + +OSystem_PalmOS5::OSystem_PalmOS5() : OSystem_PalmBase() { + _sound.active = false; + _setPalette = false; + + _workScreenH = NULL; + _overlayH = NULL; + _isSwitchable = false; + _wasRotated = false; + + MemSet(&_soundEx, sizeof(SoundExType), 0); + _soundEx.sound = &_sound; +} + +void OSystem_PalmOS5::int_initBackend() { + if (OPTIONS_TST(kOpt5WayNavigatorV1)) { + _keyMouse.bitUp = keyBitPageUp; + _keyMouse.bitDown = keyBitPageDown; + _keyMouse.bitLeft = keyBitNavLeft; + _keyMouse.bitRight = keyBitNavRight; + _keyMouse.bitButLeft= keyBitNavSelect; + _keyMouse.hasMore = true; + + } else if (OPTIONS_TST(kOpt5WayNavigatorV2)) { + _keyMouse.bitUp = keyBitRockerUp|keyBitPageUp; + _keyMouse.bitDown = keyBitRockerDown|keyBitPageDown; + _keyMouse.bitLeft = keyBitRockerLeft; + _keyMouse.bitRight = keyBitRockerRight; + _keyMouse.bitButLeft= keyBitRockerCenter; + _keyMouse.hasMore = true; + } +} + +void OSystem_PalmOS5::setWindowCaption(const char *caption) { + Err e; + Char buf[64]; + Coord w, y, h = FntLineHeight() + 2; + const Char *loading = "Loading, please wait\0"; + + // allocate bitmap + BitmapTypeV3 *bmp2P; + BitmapType *bmp1P = BmpCreate(320, (h * 3), 8, NULL, &e); + WinHandle tmpH = WinCreateBitmapWindow(bmp1P, &e); + + WinSetDrawWindow(tmpH); + WinSetBackColor(0); + WinSetTextColor(255); + WinEraseWindow(); + + // loading message + FntSetFont(boldFont); + w = FntCharsWidth(loading, StrLen(loading)); + w = (320 - w) / 2; + WinDrawChars(loading, StrLen(loading), w, 0 + h); + + // caption + FntSetFont(stdFont); + w = FntCharsWidth(caption, StrLen(caption)); + w = (320 - w) / 2; + WinDrawChars(caption, StrLen(caption), w, 0); + + // memory size + StrPrintF(buf, "memory : %ld KB", gVars->startupMemory); + w = FntCharsWidth(buf, StrLen(buf)); + w = (320 - w) / 2; + WinDrawChars(buf, StrLen(buf), w, h * 2); + + // set the bitmap as v3 + bmp2P = BmpCreateBitmapV3(bmp1P, kDensityDouble, BmpGetBits(bmp1P), NULL); + y = (80 - (h / 4) - 5); + + // draw it + WinSetDrawWindow(WinGetDisplayWindow()); + WinEraseWindow(); + WinDrawBitmap((BitmapPtr)bmp2P, 0, y); + + // free + WinDeleteWindow(tmpH, 0); + BmpDelete((BitmapPtr)bmp2P); + BmpDelete(bmp1P); +} diff --git a/backends/platform/PalmOS/Src/be_os5.h b/backends/platform/PalmOS/Src/be_os5.h new file mode 100644 index 0000000000..40a8340820 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_os5.h @@ -0,0 +1,164 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BE_OS5_H +#define BE_OS5_H + +#include "be_base.h" + +#if !defined(SYSTEM_CALLBACK) || defined(PALMOS_68K) +# define SYSTEM_CALLBACK +# ifdef PALMOS_ARM +# define CALLBACK_PROLOGUE \ + __asm { \ + stmfd r13!,{r9,r10}; \ + ldr r9,[r0]; \ + ldr r10,[r0,#4]; \ + } +# define CALLBACK_EPILOGUE __asm { ldmfd r13!,{r9,r10} } +# define CALLBACK_INIT(regs) \ + __asm { \ + ldr r0, = regs; \ + add r0,r0,r10; \ + str r9,[r0]; \ + str r10,[r0,#4]; \ + } +# else +# define CALLBACK_PROLOGUE \ + asm ( \ + movem.l a4-a5, -(sp); \ + move.l UserDataP, a0; \ + move.l 0(a0), a4; \ + move.l 4(a0), a5; \ + ); +# define CALLBACK_EPILOGUE asm ( movem.l (sp)+, a4-a5 ); +# define CALLBACK_INIT(regs) \ + { \ + void *ptr = ®s; \ + asm ( \ + move.l ptr, a0; \ + move.l a4, 0(a0); \ + move.l a5, 4(a0); \ + ); \ + } +# endif +#else +# define CALLBACK_PROLOGUE +# define CALLBACK_EPILOGUE +# define CALLBACK_INIT(regs) +#endif + +// TODO : change / remove this +#define gfxMakeDisplayRGB_BigEndian(_r,_g,_b) \ + ( (((_g) & 0xFC) << 11) | (((_b) & 0xF8) << 5) | ((_r) & 0xF8) | (((_g) & 0xFF) >> 5) ) + +#define gfxMakeDisplayRGB_LittleEndian(_r,_g,_b) \ + ( (((_r) & 0xF8) << 8) | (((_g) & 0xFC) << 3) | (((_b) & 0xF8) >> 3) ) + +#if CPU_TYPE == CPU_68K +#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_BigEndian(_r,_g,_b) +#else +#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_LittleEndian(_r,_g,_b) +#endif + +typedef struct { + // for real thread version only + UInt32 __reg1; + UInt32 __reg2; + + // no real thread version + Boolean set; + UInt32 size; + void *dataP; + + // default sound stuff + SndStreamRef handle; + SoundPtr sound; +} SoundExType, *SoundExPtr; +extern SoundExType _soundEx; + +class OSystem_PalmOS5 : public OSystem_PalmBase { +private: + typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p); + RendererProc _render; + + OverlayColor *_overlayP; + WinHandle _overlayH, _workScreenH; + int16 _nativePal[256]; + int16 *_workScreenP; + + Boolean _isSwitchable, _wasRotated; + + virtual void int_initBackend(); + virtual void int_updateScreen(); + virtual void int_initSize(uint w, uint h); + + virtual void unload_gfx_mode(); + virtual void load_gfx_mode(); + virtual void hotswap_gfx_mode(int mode); + + void draw_mouse(); + void undraw_mouse(); + virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y); + virtual bool check_event(Event &event, EventPtr ev); + virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b); + + void render_landscape(RectangleType &r, PointType &p); + void render_portrait(RectangleType &r, PointType &p); + void render_1x(RectangleType &r, PointType &p); + WinHandle alloc_screen(Coord w, Coord h); + virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); + + virtual SndStreamVariableBufferCallback sound_callback(); + virtual void sound_handler(); + +protected: + UInt16 _sysOldCoord, _sysOldOrientation; + Boolean _stretched; + +public: + OSystem_PalmOS5(); + static OSystem *create(); + + void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); + void clearScreen(); + + void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale); + + void showOverlay(); + void hideOverlay(); + virtual void clearOverlay(); + virtual void grabOverlay(OverlayColor *buf, int pitch); + virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); + virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); + virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); + + virtual bool setSoundCallback(SoundProc proc, void *param); + void clearSoundCallback(); + + void setWindowCaption(const char *caption); + +}; + +#endif diff --git a/backends/platform/PalmOS/Src/be_os5ex.cpp b/backends/platform/PalmOS/Src/be_os5ex.cpp new file mode 100644 index 0000000000..f6f95ac06e --- /dev/null +++ b/backends/platform/PalmOS/Src/be_os5ex.cpp @@ -0,0 +1,103 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +// for DAL.h +#define ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS + +#include "be_os5ex.h" +#include "palmdefs.h" + +#include +#include + +static TimerExType _timerEx; + +OSystem_PalmOS5Ex::OSystem_PalmOS5Ex() : OSystem_PalmOS5() { + _timerEx.timerID = 0; + _timerEx.timer = &_timer; + _timerEx.ticks = SysTicksPerSecond(); +} +/* +static SYSTEM_CALLBACK void timer_handler(void *userDataP) { + CALLBACK_PROLOGUE + TimerExPtr _timerEx = (TimerExPtr)userDataP; + TimerPtr _timer = _timerEx->timer; + _timer->duration = _timer->callback(_timer->duration); + KALTimerSet(_timerEx->timerID, (_timer->duration * _timerEx->ticks / 1000)); + CALLBACK_EPILOGUE +} + +void OSystem_PalmOS5Ex::setTimerCallback(TimerProc callback, int timer) { + if (_timer.active && _timerEx.timerID) + KALTimerDelete(_timerEx.timerID); + + if (callback != NULL) { + Err e; + CALLBACK_INIT(_timerEx); + _timer.duration = timer; + _timer.callback = callback; + + // create the timer + e = KALTimerCreate(&_timerEx.timerID, appFileCreator, &::timer_handler, &_timerEx); + if (!e) { + e = KALTimerSet(_timerEx.timerID, (timer * _timerEx.ticks / 1000)); + if (e) KALTimerDelete(_timerEx.timerID); + } + _timer.active = (!e); + + } else { + _timer.active = false; + } + + if (!_timer.active) + _timerEx.timerID = 0; +} +*/ +OSystem::MutexRef OSystem_PalmOS5Ex::createMutex() { + UInt32 mutexID; + Err e = KALMutexCreate(&mutexID, appFileCreator); + return (MutexRef)(e ? NULL : mutexID); + +} + +void OSystem_PalmOS5Ex::lockMutex(MutexRef mutex) { + if (mutex) + KALMutexReserve((UInt32)mutex); +} + +void OSystem_PalmOS5Ex::unlockMutex(MutexRef mutex) { + if (mutex) + KALMutexRelease((UInt32)mutex, 0); +} + +void OSystem_PalmOS5Ex::deleteMutex(MutexRef mutex) { + if (mutex) + KALMutexDelete((UInt32)mutex); +} +/* +void OSystem_PalmOS5Ex::int_quit() { + if (_timerEx.timerID) + KALTimerDelete(_timerEx.timerID); +} +*/ \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/be_os5ex.h b/backends/platform/PalmOS/Src/be_os5ex.h new file mode 100644 index 0000000000..fb4027ccce --- /dev/null +++ b/backends/platform/PalmOS/Src/be_os5ex.h @@ -0,0 +1,67 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BE_OS5EX_H +#define BE_OS5EX_H + +#include "be_os5.h" + +#undef dprintf // fix compilation in Zodiac mode + +#ifndef PALMOS_ARM +// Not usable with 68k mode (?), so ... +#define OSystem_PalmOS5Ex OSystem_PalmOS5 +#else + +typedef struct { + UInt32 __r9; + UInt32 __r10; + UInt32 timerID; + UInt32 ticks; + + TimerPtr timer; +} TimerExType, *TimerExPtr; + +class OSystem_PalmOS5Ex : public OSystem_PalmOS5 { +private: +// void timer_handler() {}; + void sound_handler() {}; +// void int_quit(); + + SndStreamVariableBufferCallback sound_callback(); + +public: + OSystem_PalmOS5Ex(); + static OSystem *create(); + +// void setTimerCallback(TimerProc callback, int interval); + + MutexRef createMutex(); + void lockMutex(MutexRef mutex); + void unlockMutex(MutexRef mutex); + void deleteMutex(MutexRef mutex); +}; +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/be_save.cpp b/backends/platform/PalmOS/Src/be_save.cpp new file mode 100644 index 0000000000..a96770f437 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_save.cpp @@ -0,0 +1,163 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_base.h" +#include "common/savefile.h" + +// SaveFile class + +class PalmSaveFile : public Common::SaveFile { +private: + FILE *fh; +public: + PalmSaveFile(const char *filename, bool saveOrLoad) { + fh = ::fopen(filename, (saveOrLoad? "wb" : "rb")); + } + ~PalmSaveFile() { + if (fh) ::fclose(fh); + } + + bool eos() const { return feof(fh) != 0; } + bool ioFailed() const { return ferror(fh) != 0; } + void clearIOFailed() { clearerr(fh); } + + bool isOpen() const { return fh != NULL; } + + uint32 read(void *buf, uint32 size); + uint32 write(const void *buf, uint32 size); + + uint32 pos() const { + assert(fh); + return ftell(fh); + } + uint32 size() const { + assert(fh); + uint32 oldPos = ftell(fh); + fseek(fh, 0, SEEK_END); + uint32 length = ftell(fh); + fseek(fh, oldPos, SEEK_SET); + return length; + } + void seek(int32 offs, int whence = SEEK_SET) { + assert(fh); + fseek(fh, offs, whence); + } +}; + +uint32 PalmSaveFile::read(void *buf, uint32 size) { + // we must return the size, where fread return nitems upon success ( 1 <=> size) + if (fh) return (::fread(buf, 1, size, fh)); + return 0; +} + +uint32 PalmSaveFile::write(const void *buf, uint32 size) { + // we must return the size, where fwrite return nitems upon success ( 1 <=> size) + if (fh) return ::fwrite(buf, 1, size, fh); + return 0; +} + + + + + +// SaveFileManager class + +class PalmSaveFileManager : public Common::SaveFileManager { +public: + virtual Common::OutSaveFile *openForSaving(const char *filename) { + return openSavefile(filename, true); + } + virtual Common::InSaveFile *openForLoading(const char *filename) { + return openSavefile(filename, false); + } + + Common::SaveFile *openSavefile(const char *filename, bool saveOrLoad); + void listSavefiles(const char *prefix, bool *marks, int num); + +protected: + Common::SaveFile *makeSaveFile(const char *filename, bool saveOrLoad); +}; + +Common::SaveFile *PalmSaveFileManager::openSavefile(const char *filename, bool saveOrLoad) { + char buf[256]; + + strcpy(buf, getSavePath()); + strcat(buf, "/"); + strcat(buf, filename); + + return makeSaveFile(buf, saveOrLoad); +} + +void PalmSaveFileManager::listSavefiles(const char *prefix, bool *marks, int num) { + FileRef fileRef; + // try to open the dir + Err e = VFSFileOpen(gVars->VFS.volRefNum, getSavePath(), vfsModeRead, &fileRef); + memset(marks, false, num*sizeof(bool)); + + if (e != errNone) + return; + + // enumerate all files + UInt32 dirEntryIterator = vfsIteratorStart; + Char filename[32]; + FileInfoType info = {0, filename, 32}; + UInt16 length = StrLen(prefix); + int slot = 0; + + while (dirEntryIterator != vfsIteratorStop) { + e = VFSDirEntryEnumerate (fileRef, &dirEntryIterator, &info); + + if (e != expErrEnumerationEmpty) { // there is something + + if (StrLen(info.nameP) == (length + 2)) { // consider max 99, filename length is ok + if (StrNCaselessCompare(prefix, info.nameP, length) == 0) { // this seems to be a save file + if (isdigit(info.nameP[length]) && isdigit(info.nameP[length+1])) { + + slot = StrAToI(filename + length); + if (slot >= 0 && slot < num) + *(marks+slot) = true; + + } + } + } + + } + } + + VFSFileClose(fileRef); +} + +Common::SaveFile *PalmSaveFileManager::makeSaveFile(const char *filename, bool saveOrLoad) { + PalmSaveFile *sf = new PalmSaveFile(filename, saveOrLoad); + + if (!sf->isOpen()) { + delete sf; + sf = 0; + } + return sf; +} + +Common::SaveFileManager *OSystem_PalmBase::getSavefileManager() { + return new PalmSaveFileManager(); +} diff --git a/backends/platform/PalmOS/Src/be_zodiac.cpp b/backends/platform/PalmOS/Src/be_zodiac.cpp new file mode 100644 index 0000000000..6fd8c5cc06 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_zodiac.cpp @@ -0,0 +1,90 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_zodiac.h" + +OSystem_PalmZodiac::OSystem_PalmZodiac() : OSystem_PalmOS5Ex() { + _gfxH = NULL; + _overlayP = NULL; + _palmScreenP = NULL; + _tmpScreenP = NULL; + _stretched = false; +} + +void OSystem_PalmZodiac::int_initBackend() { + _keyMouse.bitUp = keyBitRockerUp; + _keyMouse.bitDown = keyBitRockerDown; + _keyMouse.bitLeft = keyBitRockerLeft; + _keyMouse.bitRight = keyBitRockerRight; + _keyMouse.bitButLeft= keyBitRockerCenter; + _keyMouse.hasMore = true; +} + +void OSystem_PalmZodiac::calc_rect(Boolean fullscreen) { + Int32 w, h; + + if (fullscreen) { + w = (_ratio.adjustAspect == kRatioWidth) ? _ratio.width : gVars->screenFullWidth; + h = (_ratio.adjustAspect == kRatioHeight) ? _ratio.height : gVars->screenFullHeight; + + _screenOffset.x = (_ratio.adjustAspect == kRatioWidth) ? (gVars->screenFullWidth - _ratio.width) / 2 : 0; + _screenOffset.y = (_ratio.adjustAspect == kRatioHeight) ? (gVars->screenFullHeight - _ratio.height) / 2 : 0; + + } else { + w = gVars->screenWidth; + h = gVars->screenHeight - MIN_OFFSET * 2; + + _screenOffset.x = 0; + _screenOffset.y = MIN_OFFSET; + } + + _dstRect.x = _screenOffset.x; + _dstRect.y = _screenOffset.y; + _dstRect.w = w; + _dstRect.h = h; + + _screenDest.w = _dstRect.w; + _screenDest.h = _dstRect.h; +} + +void OSystem_PalmZodiac::setFeatureState(Feature f, bool enable) { + switch (f) { +/* case kFeatureFullscreenMode: + if (_gfxLoaded) + if (OPTIONS_TST(kOptModeWide) && _initMode != GFX_WIDE) { + _fullscreen = enable; + hotswap_gfx_mode(_mode); + } + break; +*/ + case kFeatureAspectRatioCorrection: + if (_mode == GFX_WIDE) { + _ratio.adjustAspect = (_ratio.adjustAspect + 1) % 3; + calc_rect(true); + TwGfxSetClip(_palmScreenP, &_dstRect); + clearScreen(); + } + break; + } +} diff --git a/backends/platform/PalmOS/Src/be_zodiac.h b/backends/platform/PalmOS/Src/be_zodiac.h new file mode 100644 index 0000000000..7f5290bed1 --- /dev/null +++ b/backends/platform/PalmOS/Src/be_zodiac.h @@ -0,0 +1,90 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BE_ZODIAC_H +#define BE_ZODIAC_H + +#include +#include "be_os5ex.h" + +#define MIN_OFFSET 20 + +class OSystem_PalmZodiac : public OSystem_PalmOS5Ex { +private: + enum { + kRatioNone = 0, + kRatioHeight, + kRatioWidth + }; + struct { + UInt8 adjustAspect; + Coord width; // (width x 320) + Coord height; // (480 x height) + } _ratio; + + TwGfxType *_gfxH; + TwGfxSurfaceType *_palmScreenP, *_tmpScreenP; + TwGfxSurfaceType *_overlayP; + UInt16 _nativePal[256]; + Boolean _fullscreen; + + TwGfxPointType _srcPos; + TwGfxRectType _srcRect, _dstRect; + TwGfxBitmapType _srcBmp; + + void int_initBackend(); + void int_setShakePos(int shakeOffset); + + void draw_mouse(); + void undraw_mouse(); + + void unload_gfx_mode(); + void load_gfx_mode(); + void hotswap_gfx_mode(int mode); + + void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b); + void calc_rect(Boolean fullscreen); + void get_coordinates(EventPtr ev, Coord &x, Coord &y); + bool check_event(Event &event, EventPtr ev); + void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); + +public: + OSystem_PalmZodiac(); + + static OSystem *create(); + + void setFeatureState(Feature f, bool enable); + int getDefaultGraphicsMode() const; + + void updateScreen(); + bool grabRawScreen(Graphics::Surface *surf); + + void clearOverlay(); + void grabOverlay(OverlayColor *buf, int pitch); + void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); + OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); + void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); +}; + +#endif diff --git a/backends/platform/PalmOS/Src/builder/b_globals.c b/backends/platform/PalmOS/Src/builder/b_globals.c new file mode 100644 index 0000000000..dec25e96b4 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/b_globals.c @@ -0,0 +1,85 @@ +#include +#include "b_globals.h" + + +//#define BUILD_COMMON +//#define BUILD_SIMON +#define BUILD_SCUMM +//#define BUILD_SKY +//#define BUILD_QUEEN +//#define BUILD_SWORD1 + +#ifdef BUILD_COMMON +# define BUILD_RES GBVARS_COMMON +# define BUILD_NAME "Common" +#else +# define BUILD_RES GBVARS_ENGINE +# define BUILD_NAME "Engine" +#endif + +DmOpenRef dbP[GBVARS_COUNT]; +/////////////////////////////////////////////////////////////////// + +void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID) { + Err e; + + MemHandle recordH = DmNewRecord(dbP[dbID], &index, size); + MemPtr save = MemHandleLock(recordH); + e = DmWrite(save, 0, ptr, size); + MemHandleUnlock(recordH); + DmReleaseRecord (dbP[dbID], index, 0); +} +/////////////////////////////////////////////////////////////////// + +void buildAll() { + Err err; + LocalID olddb; + + olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); + if (olddb) { + DmDeleteDatabase(0,olddb); + FrmCustomAlert(1000,"delete old " BUILD_NAME " DB",0,0); + } + err = DmCreateDatabase (0, "Glbs::" BUILD_NAME, 'ScVM', 'GLBS', false); + olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME); + dbP[BUILD_RES] = DmOpenDatabase(0, olddb, dmModeReadWrite); + +#if defined(BUILD_COMMON) + addNewGui(); + +#elif defined(BUILD_SCUMM) + addDimuseTables(); + // temp removed + // TODO ::scummvm use sizeof(OLD256_MIDI_HACK) so i need to fix it + // directly in the code or call MemHandleSize but it may slow down + // code execution + addAkos(); + addDimuseCodecs(); + addCodec47(); + addGfx(); + addDialogs(); + addCharset(); + addCostume(); + addPlayerV2(); + addScummTables(); + +#elif defined(BUILD_SIMON) + addSimon(); + Simon_addCharset(); + +#elif defined(BUILD_SKY) + Sky_addHufftext(); + +#elif defined(BUILD_QUEEN) + Queen_addTalk(); + Queen_addRestables(); + Queen_addGraphics(); + Queen_addDisplay(); + Queen_addMusicdata(); + +#elif defined(BUILD_SWORD1) + Sword1_addStaticres(); +#endif + + DmCloseDatabase(dbP[BUILD_RES]); +} diff --git a/backends/platform/PalmOS/Src/builder/b_globals.h b/backends/platform/PalmOS/Src/builder/b_globals.h new file mode 100644 index 0000000000..6954a50999 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/b_globals.h @@ -0,0 +1,37 @@ +#include "enum_globals.h" + +typedef unsigned char byte; +typedef UInt32 uint; +typedef Int32 int32; +typedef UInt32 uint32; + + +void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID); +void buildAll(); + +void addNewGui(); +void addGraphics(); +///////////////////////////////// +void addDimuseTables(); +void addAkos(); +void addDimuseCodecs(); +void addCodec47(); +void addGfx(); +void addDialogs(); +void addCharset(); +void addCostume(); +void addPlayerV2(); +void addScummTables(); +///////////////////////////////// +void addSimon(); +void Simon_addCharset(); +///////////////////////////////// +void Queen_addTalk(); +void Queen_addRestables(); +void Queen_addGraphics(); +void Queen_addDisplay(); +void Queen_addMusicdata(); +///////////////////////////////// +void Sky_addHufftext(); +///////////////////////////////// +void Sword1_addStaticres(); diff --git a/backends/platform/PalmOS/Src/builder/builder.c b/backends/platform/PalmOS/Src/builder/builder.c new file mode 100644 index 0000000000..8b30707b81 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/builder.c @@ -0,0 +1,442 @@ +#include +#include "BuilderRsc.h" + + +/*********************************************************************** + * + * Entry Points + * + ***********************************************************************/ + +void buildAll(); +/*********************************************************************** + * + * Internal Structures + * + ***********************************************************************/ +typedef struct + { + UInt8 replaceme; + } StarterPreferenceType; + +typedef struct + { + UInt8 replaceme; + } StarterAppInfoType; + +typedef StarterAppInfoType* StarterAppInfoPtr; + + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +//static Boolean HideSecretRecords; + + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ +#define appFileCreator 'STRT' // register your own at http://www.palmos.com/dev/creatorid/ +#define appVersionNum 0x01 +#define appPrefID 0x00 +#define appPrefVersionNum 0x01 + +// Define the minimum OS version we support. +#define ourMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0) +#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) + + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) +{ + UInt32 romVersion; + + // See if we're on in minimum required version of the ROM or later. + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) + { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) + { + FrmAlert (RomIncompatibleAlert); + + // Palm OS 1.0 will continuously relaunch this app unless we switch to + // another safe one. + if (romVersion <= kPalmOS10Version) + { + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + } + } + + return sysErrRomIncompatible; + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void * GetObjectPtr(UInt16 objectID) +{ + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)); +} + + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit(FormPtr /*frmP*/) +{ +} + + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + FormPtr frmP; + + switch (command) + { + case MainOptionsAboutStarterApp: + MenuEraseStatus(0); // Clear the menu status from the display. + frmP = FrmInitForm (AboutForm); + FrmDoDialog (frmP); // Display the About Box. + FrmDeleteForm (frmP); + handled = true; + break; + + } + + return handled; +} + + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + + switch (eventP->eType) + { + case menuEvent: + return MainFormDoCommand(eventP->data.menu.itemID); + + case frmOpenEvent: + frmP = FrmGetActiveForm(); + MainFormInit( frmP); + FrmDrawForm ( frmP); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case MainBuildButton: + buildAll(); + break; + } + handled = true; + break; + + case frmUpdateEvent: + // To do any custom drawing here, first call FrmDrawForm(), then do your + // drawing, and then set handled to true. + break; + + default: + break; + + } + + return handled; +} + + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) +{ + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) + { + // Load the form resource. + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); + + // Set the event handler for the form. The handler of the currently + // active form is called by FrmHandleEvent each time is receives an + // event. + switch (formId) + { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + + default: +// ErrFatalDisplay("Invalid Form Load Event"); + break; + + } + return true; + } + + return false; +} + + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) +{ + UInt16 error; + EventType event; + + do { + EvtGetEvent(&event, evtWaitForever); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStart(void) +{ + StarterPreferenceType prefs; + UInt16 prefsSize; + + // Read the saved preferences / saved-state information. + prefsSize = sizeof(StarterPreferenceType); + if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != + noPreferenceFound) + { + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppStop(void) +{ + StarterPreferenceType prefs; + + // Write the saved preferences / saved-state information. This data + // will saved during a HotSync backup. + PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, + &prefs, sizeof (prefs), true); + + // Close all the open forms. + FrmCloseAllForms (); +} + + +/*********************************************************************** + * + * FUNCTION: StarterPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags) +{ + Err error; + + error = RomVersionCompatible (ourMinVersion, launchFlags); + if (error) return (error); + + switch (cmd) + { + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + return error; + + FrmGotoForm(MainForm); + AppEventLoop(); + AppStop(); + break; + + default: + break; + + } + + return errNone; +} + + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + return StarterPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/backends/platform/PalmOS/Src/builder/enum_globals.h b/backends/platform/PalmOS/Src/builder/enum_globals.h new file mode 100644 index 0000000000..45425299c6 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/enum_globals.h @@ -0,0 +1,112 @@ +#ifndef __ENUM_GLOBALS_H__ +#define __ENUM_GLOBALS_H__ + +// Common +enum { + GBVARS_GUIFONT_INDEX = 0 +}; + +// Scumm +enum { + GBVARS_DIGSTATEMUSICMAP_INDEX = 0, + GBVARS_DIGSTATEMUSICTABLE_INDEX, + GBVARS_DIGSEQMUSICTABLE_INDEX, + GBVARS_COMISTATEMUSICTABLE_INDEX, + GBVARS_COMISEQMUSICTABLE_INDEX, + GBVARS_FTSTATEMUSICTABLE_INDEX, + GBVARS_FTSEQMUSICTABLE_INDEX, + GBVARS_FTSEQNAMES_INDEX, + GBVARS_SMALLSCALETABLE_INDEX, + GBVARS_BIGSCALETABLE_INDEX, + GBVARS_IMCTABLE_INDEX, + GBVARS_CODEC47TABLE_INDEX, + GBVARS_TRANSITIONEFFECTS_INDEX, + GBVARS_STRINGMAPTABLEV7_INDEX, + GBVARS_STRINGMAPTABLEV6_INDEX, + GBVARS_STRINGMAPTABLEV5_INDEX, + GBVARS_GERMANCHARSETDATAV2_INDEX, + GBVARS_FRENCHCHARSETDATAV2_INDEX, + GBVARS_ENGLISHCHARSETDATAV2_INDEX, + GBVARS_ITALIANCHARSETDATAV2_INDEX, + GBVARS_SPANISHCHARSETDATAV2_INDEX, + GBVARS_NOTELENGTHS_INDEX, + GBVARS_HULLOFFSETS_INDEX, + GBVARS_HULLS_INDEX, + GBVARS_FREQMODLENGTHS_INDEX, + GBVARS_FREQMODOFFSETS_INDEX, + GBVARS_FREQMODTABLE_INDEX, + GBVARS_SPKFREQTABLE_INDEX, + GBVARS_PCJRFREQTABLE_INDEX, + + GBVARS_MD5TABLE_INDEX +//GBVARS_SMALLSCALETABLEAKOS_INDEX +}; +// Simon +enum { + GBVARS_SIMON1SETTINGS_INDEX = 0, + GBVARS_SIMON1ACORNSETTINGS_INDEX, + GBVARS_SIMON1AMIGASETTINGS_INDEX, + GBVARS_SIMON1DEMOSETTINGS_INDEX, + GBVARS_SIMON2WINSETTINGS_INDEX, + GBVARS_SIMON2DOSSETTINGS_INDEX, + GBVARS_RUSSIANVIDEOFONT_INDEX, + GBVARS_FRENCHVIDEOFONT_INDEX, + GBVARS_GERMANVIDEOFONT_INDEX, + GBVARS_HEBREWVIDEOFONT_INDEX, + GBVARS_ITALIANVIDEOFONT_INDEX, + GBVARS_SPANISHVIDEOFONT_INDEX, + GBVARS_VIDEOFONT_INDEX, + GBVARS_SIMON1CURSOR_INDEX +// GBVARS_SIMON2CURSORS_INDEX +}; +// Queen +enum { + GBVARS_SPEECHPARAMETERS_INDEX = 0, + GBVARS_RESOURCETABLEPM10_INDEX, + GBVARS_GRAPHICSCARDATA_INDEX, + GBVARS_GRAPHICSFIGHT1DATA_INDEX, + GBVARS_GRAPHICSFIGHT2DATA_INDEX, + GBVARS_GRAPHICSFIGHT3DATA_INDEX, + GBVARS_DISPLAYFONTREGULAR_INDEX, + GBVARS_DISPLAYFONTHEBREW_INDEX, + GBVARS_DISPLAYPALJOECLOTHES_INDEX, + GBVARS_DISPLAYPALJOEDRESS_INDEX, + GBVARS_MUSICDATASONGDEMO_INDEX, + GBVARS_MUSICDATASONG_INDEX, + GBVARS_MUSICDATATUNEDEMO_INDEX, + GBVARS_MUSICDATATUNE_INDEX, + GBVARS_MUSICDATASFXNAME_INDEX, + GBVARS_MUSICDATAJUNGLELIST_INDEX +}; +// Sky +enum { + GBVARS_HUFFTREE_00109_INDEX = 0, + GBVARS_HUFFTREE_00267_INDEX, + GBVARS_HUFFTREE_00288_INDEX, + GBVARS_HUFFTREE_00303_INDEX, + GBVARS_HUFFTREE_00331_INDEX, + GBVARS_HUFFTREE_00348_INDEX, + GBVARS_HUFFTREE_00365_INDEX, + GBVARS_HUFFTREE_00368_INDEX, + GBVARS_HUFFTREE_00372_INDEX, +}; +// Sword1 +enum { + GBVARS_FXLIST_INDEX = 0 +}; + +enum { + GBVARS_COMMON = 0, + GBVARS_ENGINE = 1, + GBVARS_SCUMM = GBVARS_ENGINE, + GBVARS_SIMON = GBVARS_ENGINE, + GBVARS_SKY = GBVARS_ENGINE, + GBVARS_SWORD1 = GBVARS_ENGINE, +// GBVARS_SWORD2 = GBVARS_ENGINE, + GBVARS_QUEEN = GBVARS_ENGINE, + GBVARS_SAGA = GBVARS_ENGINE, + + GBVARS_COUNT +}; + +#endif diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_display.c b/backends/platform/PalmOS/Src/builder/queen/bq_display.c new file mode 100644 index 0000000000..9601729de7 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/queen/bq_display.c @@ -0,0 +1,297 @@ +#include +#include "b_globals.h" + +typedef UInt8 uint8; + +static void addDisplay_fontRegular() { + uint8 _fontRegular[] = { + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, + 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, + 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, + 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, + 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, + 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, + 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, + 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, + 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, + 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, + 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, + 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, + 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, + 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, + 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, + 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, + 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, + 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, + 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, + 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, + 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, + 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, + 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, + 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, + 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, + 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, + 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, + 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, + 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, + 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, + 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, + 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, + 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, + 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, + 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, + 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, + 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, + 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, + 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, + 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, + 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 + }; + writeRecord(_fontRegular, sizeof(_fontRegular), GBVARS_DISPLAYFONTREGULAR_INDEX , GBVARS_QUEEN); +} + +static void addDisplay_fontHebrew() { + uint8 _fontHebrew[] = { + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, + 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, + 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, + 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, + 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, + 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, + 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, + 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, + 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, + 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, + 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, + 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, + 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, + 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, + 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, + 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, + 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, + 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, + 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, + 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, + 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, + 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, + 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, + 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, + 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, + 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, + 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, + 0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00, + 0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, + 0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00, + 0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00, + 0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06, + 0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60, + 0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0, + 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00, + 0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00, + 0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, + 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, + 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, + 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, + 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, + 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, + 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, + 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, + 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, + 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, + 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, + 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, + 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, + 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 + }; + writeRecord(_fontHebrew, sizeof(_fontHebrew), GBVARS_DISPLAYFONTHEBREW_INDEX , GBVARS_QUEEN); +} + +static void addDisplay_palJoeClothes() { + uint8 _palJoeClothes[] = { + 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x87, 0x87, 0x87, 0xB0, 0xB0, 0xB0, 0xDA, 0xDA, 0xDA, 0x43, + 0x34, 0x20, 0x77, 0x33, 0x1F, 0xA3, 0x43, 0x27, 0x80, 0x45, 0x45, 0x9E, 0x5D, 0x5B, 0xB9, 0x78, + 0x75, 0xDF, 0x97, 0x91, 0x17, 0x27, 0x63, 0x1F, 0x3F, 0x83, 0x27, 0x5B, 0xA7, 0x98, 0xD4, 0xFF + }; + writeRecord(_palJoeClothes, sizeof(_palJoeClothes), GBVARS_DISPLAYPALJOECLOTHES_INDEX , GBVARS_QUEEN); +} + +static void addDisplay_palJoeDress() { + uint8 _palJoeDress[] = { + 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x70, 0x70, 0x70, 0x90, 0x90, 0x90, 0xC6, 0xC6, 0xC6, 0xFF, + 0xFF, 0xFF, 0x30, 0x30, 0x90, 0x47, 0x49, 0xD0, 0x40, 0x24, 0x00, 0x79, 0x34, 0x0B, 0xB2, 0x3D, + 0x22, 0xED, 0x42, 0x42, 0x80, 0x45, 0x45, 0xA3, 0x5F, 0x5F, 0xC8, 0x7C, 0x7C, 0xEC, 0x9C, 0x9C + }; + writeRecord(_palJoeDress, sizeof(_palJoeDress), GBVARS_DISPLAYPALJOEDRESS_INDEX , GBVARS_QUEEN); +} + +void Queen_addDisplay() { + addDisplay_fontRegular(); + addDisplay_fontHebrew(); + addDisplay_palJoeClothes(); + addDisplay_palJoeDress(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c b/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c new file mode 100644 index 0000000000..910e9b61fb --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c @@ -0,0 +1,302 @@ +#include +#include "b_globals.h" + +typedef Int16 int16; + +typedef struct { + int16 x, y; + int16 frame; +} BamDataObj; + +typedef struct { + BamDataObj obj1; // truck / Frank + BamDataObj obj2; // Rico / robot + BamDataObj fx; + int16 sfx; +} BamDataBlock; + +static void addGraphics_carData() { + BamDataBlock _carData[] = { + { { 310, 105, 1 }, { 314, 106, 17 }, { 366, 101, 1 }, 0 }, + { { 303, 105, 1 }, { 307, 106, 17 }, { 214, 0, 10 }, 0 }, + { { 297, 104, 1 }, { 301, 105, 17 }, { 214, 0, 10 }, 0 }, + { { 294, 103, 1 }, { 298, 104, 17 }, { 214, 0, 10 }, 0 }, + { { 291, 102, 1 }, { 295, 103, 18 }, { 214, 0, 10 }, 0 }, + { { 287, 101, 1 }, { 291, 102, 18 }, { 266, 51, 10 }, 2 }, + { { 283, 100, 1 }, { 287, 101, 19 }, { 279, 47, 11 }, 0 }, + { { 279, 99, 1 }, { 283, 100, 20 }, { 294, 46, 12 }, 0 }, + { { 274, 98, 1 }, { 278, 99, 20 }, { 305, 44, 13 }, 0 }, + { { 269, 98, 1 }, { 273, 99, 20 }, { 320, 42, 14 }, 0 }, + { { 264, 98, 1 }, { 268, 99, 17 }, { 214, 0, 10 }, 0 }, + { { 261, 98, 1 }, { 265, 99, 17 }, { 214, 0, 10 }, 0 }, + { { 259, 98, 1 }, { 263, 99, 17 }, { 214, 0, 10 }, 0 }, + { { 258, 98, 1 }, { 262, 99, 17 }, { 214, 0, 10 }, 0 }, + { { 257, 98, 2 }, { 260, 99, 17 }, { 214, 0, 10 }, 0 }, + { { 255, 99, 3 }, { 258, 100, 17 }, { 214, 0, 10 }, 0 }, + { { 258, 99, 4 }, { 257, 100, 17 }, { 214, 0, 10 }, 0 }, + { { 264, 102, 4 }, { 263, 103, 17 }, { 214, 0, 10 }, 0 }, + { { 272, 105, 5 }, { 274, 106, 17 }, { 214, 0, 10 }, 0 }, + { { 276, 107, 5 }, { 277, 108, 17 }, { 214, 0, 10 }, 0 }, + { { 283, 108, 5 }, { 284, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 288, 109, 5 }, { 288, 110, 17 }, { 214, 0, 10 }, 0 }, + { { 293, 110, 5 }, { 293, 111, 18 }, { 266, 59, 10 }, 2 }, + { { 298, 110, 5 }, { 299, 111, 18 }, { 277, 56, 11 }, 0 }, + { { 303, 110, 5 }, { 304, 111, 19 }, { 285, 55, 12 }, 0 }, + { { 308, 110, 4 }, { 307, 111, 20 }, { 296, 54, 13 }, 0 }, + { { 309, 110, 3 }, { 312, 111, 20 }, { 304, 53, 14 }, 0 }, + { { 310, 110, 3 }, { 313, 111, 20 }, { 214, 0, 10 }, 0 }, + { { 311, 110, 3 }, { 314, 111, 17 }, { 214, 0, 10 }, 0 }, + { { 309, 110, 2 }, { 312, 111, 17 }, { 214, 0, 10 }, 0 }, + { { 304, 111, 2 }, { 307, 112, 17 }, { 214, 0, 10 }, 0 }, + { { 300, 110, 2 }, { 303, 111, 17 }, { 214, 0, 10 }, 0 }, + { { 296, 109, 2 }, { 299, 110, 17 }, { 214, 0, 10 }, 0 }, + { { 292, 108, 1 }, { 296, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 285, 107, 2 }, { 289, 108, 17 }, { 214, 0, 10 }, 0 }, + { { 282, 107, 3 }, { 285, 108, 17 }, { 214, 0, 10 }, 0 }, + { { 278, 107, 4 }, { 277, 108, 18 }, { 214, 0, 10 }, 0 }, + { { 279, 108, 4 }, { 278, 109, 18 }, { 252, 57, 10 }, 2 }, + { { 281, 108, 5 }, { 283, 109, 18 }, { 265, 55, 11 }, 0 }, + { { 284, 109, 5 }, { 285, 110, 19 }, { 277, 55, 12 }, 0 }, + { { 287, 110, 5 }, { 288, 111, 20 }, { 288, 54, 13 }, 0 }, + { { 289, 111, 5 }, { 290, 112, 20 }, { 299, 54, 14 }, 0 }, + { { 291, 112, 4 }, { 290, 113, 20 }, { 214, 0, 10 }, 0 }, + { { 293, 113, 3 }, { 295, 114, 17 }, { 214, 0, 10 }, 0 }, + { { 296, 114, 2 }, { 299, 115, 17 }, { 214, 0, 10 }, 0 }, + { { 295, 115, 2 }, { 298, 116, 17 }, { 214, 0, 10 }, 0 }, + { { 293, 116, 1 }, { 297, 117, 17 }, { 214, 0, 10 }, 0 }, + { { 289, 116, 1 }, { 292, 117, 17 }, { 214, 0, 10 }, 0 }, + { { 285, 115, 1 }, { 289, 116, 17 }, { 214, 0, 10 }, 0 }, + { { 281, 114, 1 }, { 284, 115, 17 }, { 214, 0, 10 }, 0 }, + { { 277, 113, 1 }, { 280, 114, 17 }, { 214, 0, 10 }, 0 }, + { { 274, 112, 1 }, { 277, 113, 17 }, { 214, 0, 10 }, 0 }, + { { 271, 111, 1 }, { 274, 112, 17 }, { 214, 0, 10 }, 0 }, + { { 267, 110, 1 }, { 270, 111, 17 }, { 214, 0, 10 }, 0 }, + { { 263, 109, 1 }, { 266, 110, 17 }, { 214, 0, 10 }, 0 }, + { { 260, 108, 1 }, { 263, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 254, 108, 2 }, { 256, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 252, 107, 3 }, { 254, 108, 17 }, { 214, 0, 10 }, 0 }, + { { 253, 108, 3 }, { 255, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 255, 109, 3 }, { 257, 110, 18 }, { 231, 59, 10 }, 2 }, + { { 258, 111, 3 }, { 260, 112, 18 }, { 242, 57, 11 }, 0 }, + { { 263, 112, 4 }, { 262, 113, 19 }, { 256, 57, 12 }, 0 }, + { { 270, 111, 4 }, { 269, 112, 20 }, { 267, 57, 13 }, 0 }, + { { 274, 112, 5 }, { 276, 113, 20 }, { 281, 56, 14 }, 0 }, + { { 280, 111, 6 }, { 282, 112, 19 }, { 214, 0, 10 }, 0 }, + { { 284, 109, 6 }, { 285, 110, 17 }, { 214, 0, 10 }, 0 }, + { { 289, 108, 6 }, { 291, 109, 17 }, { 214, 0, 10 }, 0 }, + { { 294, 107, 6 }, { 296, 108, 17 }, { 214, 0, 10 }, 0 }, + { { 294, 107, 5 }, { 296, 108, 18 }, { 272, 57, 10 }, 2 }, + { { 295, 107, 5 }, { 297, 108, 18 }, { 282, 57, 11 }, 0 }, + { { 296, 108, 5 }, { 298, 109, 19 }, { 295, 57, 12 }, 0 }, + { { 300, 108, 4 }, { 299, 109, 20 }, { 303, 57, 13 }, 0 }, + { { 303, 108, 3 }, { 306, 109, 20 }, { 313, 57, 14 }, 0 }, + { { 307, 109, 2 }, { 311, 110, 17 }, { 214, 0, 10 }, 0 }, + { { 310, 110, 1 }, { 314, 111, 17 }, { 214, 0, 10 }, 99 } + }; + writeRecord(_carData, sizeof(_carData), GBVARS_GRAPHICSCARDATA_INDEX , GBVARS_QUEEN); +} + +static void addGraphics_fight1Data() { + BamDataBlock _fight1Data[] = { + { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 4 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 }, + { { 75, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, + { { 79, 96, 1 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, + { { 85, 96, 2 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, + { { 94, 96, 3 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, + { { 100, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 }, + { { 113, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 }, + { { 121, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 }, + { { 136, 96, 16 }, { 187, 96, -26 }, { 58, 37, 46 }, 0 }, + { { 151, 93, 6 }, { 187, 96, -27 }, { 58, 37, 46 }, 0 }, + { { 159, 83, 16 }, { 187, 96, -28 }, { 58, 37, 46 }, 0 }, + { { 170, 73, 16 }, { 187, 96, -29 }, { 182, 96, 48 }, 3 }, + { { 176, 69, 13 }, { 187, 96, -31 }, { 182, 94, 49 }, 1 }, + { { 168, 66, 13 }, { 187, 98, -32 }, { 182, 92, 50 }, 0 }, + { { 155, 75, 13 }, { 187, 96, -32 }, { 182, 88, 51 }, 3 }, + { { 145, 86, 13 }, { 187, 98, -32 }, { 182, 85, 52 }, 0 }, + { { 127, 104, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 }, + { { 122, 108, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 }, + { { 120, 104, 14 }, { 187, 96, -34 }, { 107, 145, 42 }, 2 }, + { { 111, 103, 13 }, { 187, 96, -23 }, { 107, 144, 43 }, 0 }, + { { 102, 105, 13 }, { 187, 96, -23 }, { 107, 142, 43 }, 0 }, + { { 97, 107, 13 }, { 187, 96, -23 }, { 107, 139, 44 }, 0 }, + { { 92, 101, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 3 }, + { { 90, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, + { { 88, 104, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, + { { 87, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, + { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, + { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 }, + { { 86, 105, 15 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 85, 98, 16 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 89, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 86, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 83, 96, 2 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 81, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 78, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 75, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 }, + { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 99 } + }; + writeRecord(_fight1Data, sizeof(_fight1Data), GBVARS_GRAPHICSFIGHT1DATA_INDEX , GBVARS_QUEEN); +} + +static void addGraphics_fight2Data() { + BamDataBlock _fight2Data[] = { + { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, + { { 78, 96, 2 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, + { { 81, 96, 3 }, { 189, 96, -18 }, { 150, 45, 35 }, 0 }, + { { 84, 96, 4 }, { 183, 96, -19 }, { 150, 45, 35 }, 0 }, + { { 87, 96, 1 }, { 181, 96, -20 }, { 150, 45, 35 }, 0 }, + { { 90, 96, 2 }, { 177, 96, -21 }, { 150, 45, 35 }, 0 }, + { { 93, 96, 3 }, { 171, 96, -22 }, { 150, 45, 35 }, 0 }, + { { 96, 96, 4 }, { 169, 96, -17 }, { 150, 45, 35 }, 0 }, + { { 99, 96, 1 }, { 165, 96, -18 }, { 150, 45, 35 }, 0 }, + { { 102, 96, 2 }, { 159, 96, -19 }, { 150, 45, 35 }, 0 }, + { { 105, 96, 3 }, { 157, 96, -20 }, { 150, 45, 35 }, 0 }, + { { 108, 96, 4 }, { 153, 96, -21 }, { 150, 45, 35 }, 0 }, + { { 111, 96, 1 }, { 147, 96, -22 }, { 150, 45, 35 }, 0 }, + { { 114, 96, 2 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 }, + { { 117, 96, 3 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 }, + { { 120, 96, 4 }, { 147, 96, -24 }, { 150, 45, 35 }, 0 }, + { { 123, 96, 1 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 }, + { { 125, 96, 2 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 }, + { { 127, 96, 12 }, { 147, 96, -69 }, { 122, 94, 36 }, 3 }, + { { 127, 95, 11 }, { 147, 96, -70 }, { 122, 94, 41 }, 0 }, + { { 127, 96, 12 }, { 147, 96, -71 }, { 122, 100, 36 }, 3 }, + { { 127, 97, 11 }, { 147, 96, -69 }, { 122, 100, 41 }, 0 }, + { { 127, 96, 12 }, { 147, 96, -70 }, { 127, 103, 36 }, 3 }, + { { 127, 95, 11 }, { 147, 96, -71 }, { 127, 103, 41 }, 0 }, + { { 127, 94, 12 }, { 147, 96, -69 }, { 123, 94, 36 }, 3 }, + { { 127, 95, 11 }, { 147, 96, -70 }, { 123, 94, 41 }, 0 }, + { { 127, 96, 12 }, { 147, 96, -71 }, { 120, 99, 36 }, 3 }, + { { 127, 96, 12 }, { 147, 96, -71 }, { 115, 98, 41 }, 0 }, + { { 117, 93, 11 }, { 147, 96, -25 }, { 115, 134, 42 }, 0 }, + { { 110, 92, 11 }, { 147, 96, -25 }, { 114, 133, 42 }, 0 }, + { { 102, 93, 11 }, { 147, 96, -25 }, { 114, 131, 43 }, 0 }, + { { 92, 93, 11 }, { 147, 96, -25 }, { 114, 130, 43 }, 0 }, + { { 82, 94, 11 }, { 147, 96, -25 }, { 114, 128, 44 }, 0 }, + { { 76, 95, 11 }, { 147, 96, -25 }, { 114, 127, 44 }, 0 }, + { { 70, 96, 11 }, { 147, 96, -25 }, { 114, 126, 45 }, 0 }, + { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 125, 46 }, 1 }, + { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, + { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, + { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, + { { 75, 96, 7 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, + { { 75, 96, 68 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 }, + { { 75, 96, 68 }, { 147, 96, -25 }, { 89, 104, 36 }, 2 }, + { { 75, 96, 68 }, { 147, 96, -25 }, { 94, 103, 62 }, 0 }, + { { 75, 96, 68 }, { 147, 96, -25 }, { 122, 103, 63 }, 0 }, + { { 75, 96, 68 }, { 147, 96, -25 }, { 141, 103, 64 }, 0 }, + { { 75, 96, 68 }, { 147, 96, -30 }, { 150, 103, 65 }, 3 }, + { { 75, 96, 68 }, { 156, 96, -30 }, { 160, 103, 66 }, 0 }, + { { 75, 96, 7 }, { 164, 96, -30 }, { 169, 103, 67 }, 0 }, + { { 75, 96, 5 }, { 169, 96, -30 }, { 177, 103, 48 }, 3 }, + { { 75, 96, 5 }, { 173, 96, -30 }, { 185, 103, 49 }, 0 }, + { { 75, 96, 6 }, { 178, 96, -30 }, { 198, 103, 50 }, 0 }, + { { 75, 96, 6 }, { 181, 96, -30 }, { 207, 103, 51 }, 1 }, + { { 75, 96, 5 }, { 184, 96, -30 }, { 221, 103, 52 }, 0 }, + { { 75, 96, 5 }, { 186, 96, -30 }, { 224, 53, 53 }, 0 }, + { { 75, 96, 5 }, { 187, 96, -23 }, { 224, 53, 53 }, 99 } + }; + writeRecord(_fight2Data, sizeof(_fight2Data), GBVARS_GRAPHICSFIGHT2DATA_INDEX , GBVARS_QUEEN); +} + +static void addGraphics_fight3Data() { + BamDataBlock _fight3Data[] = { + { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 }, + { { 77, 96, 2 }, { 187, 96, -22 }, { 150, 45, 35 }, 0 }, + { { 80, 96, 3 }, { 185, 96, -17 }, { 150, 45, 35 }, 0 }, + { { 83, 96, 4 }, { 181, 96, -18 }, { 150, 45, 35 }, 0 }, + { { 86, 96, 1 }, { 175, 96, -19 }, { 150, 45, 35 }, 0 }, + { { 88, 96, 2 }, { 173, 96, -20 }, { 150, 45, 35 }, 0 }, + { { 91, 96, 3 }, { 169, 96, -21 }, { 150, 45, 35 }, 0 }, + { { 94, 96, 4 }, { 163, 96, -22 }, { 150, 45, 35 }, 0 }, + { { 97, 96, 1 }, { 161, 96, -17 }, { 150, 45, 35 }, 0 }, + { { 99, 96, 2 }, { 157, 96, -18 }, { 150, 45, 35 }, 0 }, + { { 102, 96, 3 }, { 151, 96, -19 }, { 150, 45, 35 }, 0 }, + { { 105, 96, 4 }, { 149, 96, -20 }, { 150, 45, 35 }, 0 }, + { { 108, 96, 1 }, { 145, 96, -21 }, { 150, 45, 35 }, 0 }, + { { 110, 96, 2 }, { 145, 96, -25 }, { 150, 45, 35 }, 0 }, + { { 113, 96, 3 }, { 145, 96, -26 }, { 132, 96, 36 }, 2 }, + { { 117, 96, 7 }, { 145, 96, -27 }, { 122, 97, 36 }, 0 }, + { { 117, 96, 7 }, { 145, 96, -28 }, { 117, 97, 37 }, 0 }, + { { 116, 96, 12 }, { 145, 96, -24 }, { 110, 96, 38 }, 3 }, + { { 109, 96, 12 }, { 145, 96, -24 }, { 103, 95, 39 }, 0 }, + { { 105, 96, 12 }, { 145, 96, -24 }, { 95, 90, 40 }, 1 }, + { { 96, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 }, + { { 92, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 }, + { { 93, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, + { { 91, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, + { { 89, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, + { { 88, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -26 }, { 86, 38, 41 }, 0 }, + { { 87, 96, 6 }, { 145, 96, -27 }, { 132, 97, 36 }, 2 }, + { { 87, 96, 5 }, { 145, 96, -28 }, { 118, 97, 36 }, 0 }, + { { 87, 96, 7 }, { 145, 96, -24 }, { 107, 97, 36 }, 0 }, + { { 87, 96, 8 }, { 145, 96, -24 }, { 101, 97, 36 }, 0 }, + { { 87, 96, 9 }, { 145, 96, -23 }, { 102, 97, 66 }, 3 }, + { { 87, 96, 10 }, { 145, 96, -23 }, { 120, 97, 67 }, 0 }, + { { 87, 96, 10 }, { 145, 96, -30 }, { 139, 97, 67 }, 1 }, + { { 87, 96, 7 }, { 146, 96, -30 }, { 144, 97, 62 }, 2 }, + { { 86, 96, 4 }, { 160, 96, -30 }, { 144, 97, 48 }, 1 }, + { { 83, 96, 3 }, { 170, 96, -31 }, { 154, 93, 49 }, 0 }, + { { 80, 96, 2 }, { 174, 96, -31 }, { 161, 89, 50 }, 0 }, + { { 78, 96, 1 }, { 178, 99, -31 }, { 169, 85, 51 }, 0 }, + { { 75, 96, 4 }, { 183, 104, -31 }, { 175, 79, 52 }, 0 }, + { { 75, 96, 1 }, { 185, 99, -32 }, { 180, 144, 42 }, 3 }, + { { 75, 96, 1 }, { 185, 106, -31 }, { 181, 141, 42 }, 0 }, + { { 75, 96, 5 }, { 185, 104, -31 }, { 181, 138, 43 }, 0 }, + { { 75, 96, 5 }, { 188, 106, -31 }, { 182, 135, 43 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 131, 44 }, 3 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 127, 45 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 184, 121, 46 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 115, 46 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 195, 98, -33 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 96, -34 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 193, 96, -25 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 191, 96, -18 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 190, 96, -19 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 6 }, { 187, 96, -20 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 0 }, + { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 99 } + }; + writeRecord(_fight3Data, sizeof(_fight3Data), GBVARS_GRAPHICSFIGHT3DATA_INDEX , GBVARS_QUEEN); +} + +void Queen_addGraphics() { + addGraphics_carData(); + addGraphics_fight1Data(); + addGraphics_fight2Data(); + addGraphics_fight3Data(); +} diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c b/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c new file mode 100644 index 0000000000..0c6df08403 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c @@ -0,0 +1,1939 @@ +#include +#include "b_globals.h" + +typedef Int16 int16; + +typedef struct { + int16 tuneList[5]; + int16 volume; + int16 tempo; + int16 reverb; + int16 override; + int16 ignore; +} songData; + +typedef struct { + int16 tuneNum[9]; + int16 sfx[2]; + int16 mode; + int16 delay; +} tuneData; + +static void addMusicdata_songDemo() { + songData _songDemo[] = { + /* 1 - Hotel Gangsters */ + { { 1, 0 }, 128, 128, 128, 1, 0 }, + + /* 2 - Hotel General */ + { { 2, 0 }, 128, 128, 128, 1, 0 }, + + /* 3 - Jungle */ + { { 3, 4, 5, 6, 0 }, 128, 128, 128, 1, 0 }, + + /* 4 - Waterfall On */ + { { 7, 0 }, 128, 128, 128, 0, 0 }, + + /* 5 - Vnormal */ + { { 8, 0 }, 128, 128, 128, 2, 0 }, + + /* 6 - Trader Bob */ + { { 9, 0 }, 120, 128, 128, 1, 0 }, + + /* 7 - Jetty Music */ + { { 10, 0 }, 128, 128, 128, 1, 0 }, + + /* 8 - Ferry Music */ + { { 11, 0 }, 128, 128, 128, 1, 0 }, + + /* 9 - Temple Upstairs */ + { { 12, 0 }, 128, 128, 128, 1, 0 }, + + /* 10 - Temple Downstairs */ + { { 13, 0 }, 128, 128, 128, 1, 0 }, + + /* 11 - Temple Maze */ + { { 14, 0 }, 128, 128, 128, 1, 0 }, + + /* 12 - Temple Skull */ + { { 15, 0 }, 128, 128, 128, 1, 0 }, + + /* 13 - Johns Theme (Love Story) */ + { { 16, 0 }, 128, 128, 128, 1, 0 }, + + /* 14 - Vmedium */ + { { 17, 0 }, 128, 128, 0, 2, 0 }, + + /* 15 - Vsoft */ + { { 18, 0 }, 128, 128, 0, 2, 0 }, + + /* 16 - Floda Upstairs */ + { { 19, 0 }, 128, 128, 0, 1, 0 }, + + /* 17 - Floda General */ + { { 20, 0 }, 128, 128, 128, 1, 0 }, + + /* 18 - Klunks Room */ + { { 21, 0 }, 110, 128, 128, 1, 0 }, + + /* 19 - Hotel Lola */ + { { 22, 0 }, 120, 18128, 128, 1, 0 }, + + /* 20 - Hotel Escape 1 */ + { { 23, 0 }, 128, 18128, 128, 1, 0 }, + + /* 21 - Amazon Fortress */ + { { 24, 0 }, 128, 128, 128, 1, 0 }, + + /* 22 - Waterfall Off */ + { { 25, 0 }, 128, 128, 128, 0, 0 }, + + /* 23 - Wave Torch */ + { { 26, 0 }, 128, 128, 128, 0, 1 }, + + /* 24 - Zombies Rez Out */ + { { 27, 0 }, 128, 128, 128, 0, 1 }, + + /* 25 - Open Door (standard) */ + { { 28, 0 }, 128, 128, 128, 0, 1 }, + + /* 26 - Close Door (standard) */ + { { 29, 0 }, 128, 128, 128, 0, 1 }, + + /* 27 - Cloth Unrolls */ + { { 30, 0 }, 128, 128, 128, 0, 1 }, + + /* 28 - Snake Slithers Off */ + { { 31, 0 }, 128, 128, 128, 0, 1 }, + + /* 29 - Hotel Fanfare 2 */ + { { 32, 0 }, 128, 128, 128, 1, 1 }, + + /* 30 - Floda Secret */ + { { 33, 0 }, 120, 128, 128, 1, 0 }, + + /* 31 - Temple Fanfare 1 */ + { { 34, 0 }, 128, 128, 128, 1, 1 }, + }; + + writeRecord(_songDemo, sizeof(_songDemo), GBVARS_MUSICDATASONGDEMO_INDEX , GBVARS_QUEEN); +} + +static void addMusicdata_song() { + songData _song[] = { + /* 1 - Hotel Gangsters */ + { { 1, 0 }, 128, 180, 0, 1, 0 }, + + /* 2 - Hotel General */ + { { 2, 0 }, 128, 180, 0, 1, 0 }, + + /* 3 - Jungle */ + { { 3, 4, 5, 6, 0 }, 128, 0, 0, 1, 0 }, + + /* 4 - Waterfall On */ + { { 7, 0 }, 128, 0, 0, 0, 0 }, + + /* 5 - Vnormal */ + { { 8, 0 }, 128, 0, 0, 2, 0 }, + + /* 6 - Trader Bob */ + { { 9, 0 }, 120, 0, 0, 1, 0 }, + + /* 7 - Jetty Music */ + { { 10, 0 }, 128, 0, 0, 1, 0 }, + + /* 8 - Ferry Music */ + { { 11, 0 }, 128, 0, 0, 1, 0 }, + + /* 9 - Temple Upstairs */ + { { 12, 0 }, 128, 0, 0, 1, 0 }, + + /* 10 - Temple Downstairs */ + { { 13, 0 }, 128, 0, 0, 1, 0 }, + + /* 11 - Temple Maze */ + { { 14, 0 }, 128, 0, 0, 1, 0 }, + + /* 12 - Temple Skull */ + { { 15, 0 }, 128, 0, 0, 1, 0 }, + + /* 13 - Johns Theme (Love Story) */ + { { 16, 0 }, 128, 0, 0, 1, 0 }, + + /* 14 - Vmedium */ + { { 17, 0 }, 120, 0, 0, 2, 0 }, + + /* 15 - Vsoft */ + { { 18, 0 }, 110, 0, 0, 2, 0 }, + + /* 16 - Floda Upstairs */ + { { 19, 0 }, 110, 0, 0, 1, 0 }, + + /* 17 - Floda General */ + { { 20, 0 }, 128, 0, 0, 1, 0 }, + + /* 18 - Klunks Room */ + { { 21, 0 }, 128, 0, 0, 1, 0 }, + + /* 19 - Hotel Lola */ + { { 22, 0 }, 120, 180, 0, 1, 0 }, + + /* 20 - Hotel Escape 1 */ + { { 23, 0 }, 128, 180, 0, 1, 0 }, + + /* 21 - Amazon Fortress */ + { { 24, 0 }, 128, 0, 0, 1, 0 }, + + /* 22 - Waterfall Off */ + { { 25, 0 }, 128, 0, 0, 0, 0 }, + + /* 23 - Wave Torch */ + { { 26, 0 }, 128, 0, 0, 0, 1 }, + + /* 24 - Zombies Rez Out */ + { { 27, 0 }, 128, 0, 0, 0, 1 }, + + /* 25 - Open Door (standard) */ + { { 28, 0 }, 128, 0, 0, 0, 1 }, + + /* 26 - Close Door (standard) */ + { { 29, 0 }, 128, 0, 0, 0, 1 }, + + /* 27 - Cloth Unrolls */ + { { 30, 0 }, 128, 0, 0, 0, 1 }, + + /* 28 - Snake Slithers Off */ + { { 31, 0 }, 128, 0, 0, 0, 1 }, + + /* 29 - Hotel Fanfare 2 */ + { { 32, 0 }, 128, 0, 0, 1, 1 }, + + /* 30 - Floda Secret */ + { { 33, 0 }, 128, 0, 0, 1, 0 }, + + /* 31 - Temple Fanfare 1 */ + { { 34, 0 }, 128, 0, 0, 1, 1 }, + + /* 32 - Commander Rocket 1 */ + { { 35, 0 }, 128, 0, 0, 1, 0 }, + + /* 33 - Hotel Escape 2 */ + { { 36, 0 }, 128, 180, 0, 1, 0 }, + + /* 34 - Back of Truck */ + { { 37, 0 }, 128, 180, 0, 1, 0 }, + + /* 35 - Hotel Fanfare 1 */ + { { 38, 0 }, 128, 0, 0, 1, 1 }, + + /* 36 - Truck Fanfare */ + { { 39, 0 }, 128, 0, 0, 1, 1 }, + + /* 37 - Airport */ + { { 40, 0 }, 128, 0, 0, 1, 0 }, + + /* 38 - Plane Leaves */ + { { 41, 0 }, 128, 0, 0, 1, 1 }, + + /* 39 - Arrive Hotel */ + { { 42, 0 }, 128, 0, 0, 1, 0 }, + + /* 40 - Jungle Fanfare */ + { { 43, 0 }, 128, 0, 0, 1, 1 }, + + /* 41 - General Fanfare */ + { { 44, 0 }, 128, 0, 0, 1, 1 }, + + /* 42 - Johns Room */ + { { 45, 0 }, 128, 0, 0, 1, 0 }, + + /* 43 - Floda Lab */ + { { 46, 0 }, 128, 0, 0, 1, 0 }, + + /* 44 - Azura's Theme */ + { { 47, 0 }, 128, 0, 0, 1, 0 }, + + /* 45 - Use Record */ + { { 48, 0 }, 128, 0, 0, 1, 1 }, + + /* 46 - Franks Theme */ + { { 49, 0 }, 128, 0, 0, 1, 0 }, + + /* 47 - Anderson Doubts */ + { { 50, 0 }, 128, 0, 0, 1, 0 }, + + /* 48 - Bud and Lou Theme */ + { { 51, 0 }, 128, 0, 0, 1, 1 }, + + /* 49 - Gorilla Theme */ + { { 52, 0 }, 128, 0, 0, 1, 1 }, + + /* 50 - Missionaries Theme */ + { { 53, 0 }, 128, 0, 0, 1, 1 }, + + /* 51 - Sloth Theme */ + { { 54, 0 }, 128, 0, 0, 1, 1 }, + + /* 52 - Amazon Dungeon */ + { { 55, 0 }, 128, 0, 0, 1, 0 }, + + /* 53 - Throne Room */ + { { 56, 0 }, 128, 0, 0, 1, 0 }, + + /* 54 - Temple Puzzle */ + { { 57, 0 }, 128, 0, 0, 1, 0 }, + + /* 55 - Temple Fountain Room */ + { { 58, 0 }, 128, 0, 0, 1, 0 }, + + /* 56 - Light Switch */ + { { 59, 0 }, 128, 0, 0, 0, 1 }, + + /* 57 - Hydraulic Open */ + { { 60, 0 }, 128, 0, 0, 0, 1 }, + + /* 58 - Hydraulic Close */ + { { 61, 0 }, 128, 0, 0, 0, 1 }, + + /* 59 - Close Door (metal) */ + { { 62, 0 }, 128, 0, 0, 0, 1 }, + + /* 60 - Small Hatch Close */ + { { 63, 0 }, 128, 0, 0, 0, 1 }, + + /* 61 - Scissors Snip */ + { { 64, 0 }, 128, 0, 0, 0, 1 }, + + /* 62 - Pick up Sticky */ + { { 65, 0 }, 128, 0, 0, 0, 1 }, + + /* 63 - Oracle Rezzes In */ + { { 66, 0 }, 128, 0, 0, 0, 1 }, + + /* 64 - Sparkle SFX */ + { { 67, 0 }, 128, 0, 0, 0, 1 }, + + /* 65 - Splorch! */ + { { 68, 0 }, 128, 0, 0, 0, 1 }, + + /* 66 - Pour Liquid */ + { { 69, 0 }, 128, 0, 0, 0, 1 }, + + /* 67 - End Credit Medley */ + { { 70, 0 }, 128, 0, 0, 1, 0 }, + + /* 68 - Dino Ray */ + { { 71, 0 }, 128, 0, 0, 0, 1 }, + + /* 69 - Squish! */ + { { 72, 0 }, 128, 0, 0, 0, 1 }, + + /* 70 - Robot Laser */ + { { 73, 0 }, 128, 0, 0, 0, 1 }, + + /* 71 - Thud wood light */ + { { 74, 0 }, 128, 0, 0, 0, 1 }, + + /* 72 - Thud wood deep */ + { { 75, 0 }, 128, 0, 0, 0, 1 }, + + /* 73 - Thud metallic */ + { { 76, 0 }, 128, 0, 0, 0, 1 }, + + /* 74 - Cut Coconut */ + { { 77, 0 }, 128, 0, 0, 0, 1 }, + + /* 75 - Thud Stone */ + { { 78, 0 }, 128, 0, 0, 0, 1 }, + + /* 76 - Cloth Slide 1 */ + { { 79, 0 }, 128, 0, 0, 0, 1 }, + + /* 77 - Open Chest */ + { { 80, 0 }, 128, 0, 0, 0, 1 }, + + /* 78 - Close Chest */ + { { 81, 0 }, 128, 0, 0, 0, 1 }, + + /* 79 - Open Drawer */ + { { 82, 0 }, 128, 0, 0, 0, 1 }, + + /* 80 - Truck door closes */ + { { 83, 0 }, 128, 0, 0, 0, 1 }, + + /* 81 - Truck Starts */ + { { 84, 0 }, 128, 0, 0, 0, 1 }, + + /* 82 - Truck Drives Off */ + { { 85, 0 }, 128, 0, 0, 0, 1 }, + + /* 83 - Fish Splash */ + { { 86, 0 }, 128, 0, 0, 0, 1 }, + + /* 84 - Close Drawer/Push Ladder */ + { { 87, 0 }, 128, 0, 0, 0, 1 }, + + /* 85 - Agression Enhancer */ + { { 88, 0 }, 128, 0, 0, 0, 1 }, + + /* 86 - Stone Door Grind 1 */ + { { 89, 0 }, 128, 0, 0, 0, 1 }, + + /* 87 - Prequel 1 */ + { { 90, 0 }, 128, 0, 0, 1, 0 }, + + /* 88 - Intro Credits */ + { { 91, 0 }, 128, 0, 0, 1, 0 }, + + /* 89 - Valley 1 */ + { { 92, 0 }, 128, 0, 0, 1, 0 }, + + /* 90 - Valley 3 */ + { { 93, 0 }, 128, 0, 0, 1, 0 }, + + /* 91 - Fight Music */ + { { 94, 0 }, 128, 0, 0, 1, 0 }, + + /* 92 - Confrontation 1 */ + { { 95, 0 }, 128, 0, 0, 1, 0 }, + + /* 93 - Confrontation 2 */ + { { 96, 0 }, 128, 0, 0, 1, 0 }, + + /* 94 - Plane Hatch Open */ + { { 97, 0 }, 128, 128, 128, 0, 1 }, + + /* 95 - Plane Hatch Close */ + { { 98, 0 }, 128, 128, 128, 0, 1 }, + + /* 96 - Tie Vines */ + { { 99, 0 }, 128, 128, 128, 0, 1 }, + + /* 97 - Pterodactyl */ + { { 100, 0 }, 128, 128, 128, 0, 1 }, + + /* 98 - Beef Jerky Splash */ + { { 101, 0 }, 128, 128, 128, 0, 1 }, + + /* 99 - Piranha Burp */ + { { 102, 0 }, 128, 128, 128, 0, 1 }, + + /* 100 - Falling Vine */ + { { 103, 0 }, 128, 128, 128, 0, 1 }, + + /* 101 - Stone Door Grind 2 */ + { { 104, 0 }, 128, 128, 128, 0, 1 }, + + /* 102 - Stone Grind (light) */ + { { 105, 0 }, 128, 128, 128, 0, 1 }, + + /* 103 - Ape Takes Off Mask */ + { { 106, 0 }, 128, 128, 128, 0, 1 }, + + /* 104 - Bark Breaks */ + { { 107, 0 }, 128, 128, 128, 0, 1 }, + + /* 105 - Stone Click */ + { { 108, 0 }, 128, 128, 128, 0, 1 }, + + /* 106 - Sproing! */ + { { 109, 0 }, 128, 128, 128, 0, 1 }, + + /* 107 - Cash Register */ + { { 110, 0 }, 128, 128, 128, 0, 1 }, + + /* 108 - Squeaky Toy */ + { { 111, 0 }, 128, 128, 128, 0, 1 }, + + /* 109 - Falling Chains */ + { { 112, 0 }, 128, 128, 128, 0, 1 }, + + /* 110 - Open Locker Door */ + { { 113, 0 }, 128, 128, 128, 0, 1 }, + + /* 111 - Close Locker Door */ + { { 114, 0 }, 128, 128, 128, 0, 1 }, + + /* 112 - Rub Pencil */ + { { 115, 0 }, 128, 128, 128, 0, 1 }, + + /* 113 - Open Safe */ + { { 116, 0 }, 128, 128, 128, 0, 1 }, + + /* 114 - Close Safe */ + { { 117, 0 }, 128, 128, 128, 0, 1 }, + + /* 115 - Push Chair */ + { { 118, 0 }, 128, 128, 128, 0, 1 }, + + /* 116 - Snake Hiss */ + { { 119, 0 }, 128, 128, 128, 0, 1 }, + + /* 117 - Oracle Rezzes Out */ + { { 120, 0 }, 128, 128, 128, 0, 1 }, + + /* 118 - Wall Crumbles */ + { { 121, 0 }, 128, 128, 128, 0, 1 }, + + /* 119 - Crypt Crumbles */ + { { 122, 0 }, 128, 128, 128, 0, 1 }, + + /* 120 - Joe Sucked Up */ + { { 123, 0 }, 128, 128, 128, 0, 1 }, + + /* 121 - Rocket Pack Zoom */ + { { 124, 0 }, 128, 128, 128, 0, 1 }, + + /* 122 - Piranha Splash */ + { { 125, 0 }, 128, 128, 128, 0, 1 }, + + /* 123 - Snap Branch */ + { { 126, 0 }, 128, 128, 128, 0, 1 }, + + /* 124 - Dino Horn */ + { { 127, 0 }, 128, 128, 128, 0, 1 }, + + /* 125 - Tyre Screech */ + { { 128, 0 }, 128, 128, 128, 0, 1 }, + + /* 126 - Oil Splat */ + { { 129, 0 }, 128, 128, 128, 0, 1 }, + + /* 127 - Punch */ + { { 130, 0 }, 128, 128, 128, 0, 1 }, + + /* 128 - Body Hits Ground */ + { { 131, 0 }, 128, 128, 128, 0, 1 }, + + /* 129 - Chicken */ + { { 132, 0 }, 128, 128, 128, 0, 1 }, + + /* 130 - Open Sarcophagus */ + { { 133, 0 }, 128, 128, 128, 0, 1 }, + + /* 131 - Close Sarcophagus */ + { { 134, 0 }, 128, 128, 128, 0, 1 }, + + /* 132 - Creaking Stick */ + { { 135, 0 }, 128, 128, 128, 0, 1 }, + + /* 133 - Pick Hits Stone */ + { { 136, 0 }, 128, 128, 128, 0, 1 }, + + /* 134 - Stalactite Crumbles */ + { { 137, 0 }, 128, 128, 128, 0, 1 }, + + /* 135 - Tic-Toc */ + { { 138, 0 }, 128, 128, 128, 0, 1 }, + + /* 136 - Stone Grind (heavy) */ + { { 139, 0 }, 128, 128, 128, 0, 1 }, + + /* 137 - Explosion */ + { { 140, 0 }, 128, 128, 128, 0, 1 }, + + /* 138 - Cloth Slide 2 */ + { { 141, 0 }, 128, 128, 128, 0, 1 }, + + /* 139 - Temple Laser */ + { { 142, 0 }, 128, 128, 128, 0, 1 }, + + /* 140 - Dino Transformation */ + { { 143, 0 }, 128, 128, 128, 0, 1 }, + + /* 141 - Experimental Laser */ + { { 144, 0 }, 128, 128, 128, 0, 1 }, + + /* 142 - Stone Grind (medium) */ + { { 145, 0 }, 128, 128, 128, 0, 1 }, + + /* 143 - Weeping God Grind */ + { { 146, 0 }, 128, 128, 128, 0, 1 }, + + /* 144 - Alien Hum */ + { { 147, 0 }, 128, 128, 128, 0, 1 }, + + /* 145 - Alien Puzzle */ + { { 148, 0 }, 128, 128, 128, 0, 1 }, + + /* 146 - Vacuum On */ + { { 149, 0 }, 128, 128, 128, 0, 1 }, + + /* 147 - Vacuum Off */ + { { 150, 0 }, 128, 128, 128, 0, 1 }, + + /* 148 - Elevator Starts */ + { { 151, 0 }, 128, 128, 128, 0, 1 }, + + /* 149 - Mummy Crumbles */ + { { 152, 0 }, 128, 128, 128, 0, 1 }, + + /* 150 - Temple Green Circle */ + { { 153, 0 }, 128, 128, 128, 0, 1 }, + + /* 151 - Rattle Bars */ + { { 154, 0 }, 128, 128, 128, 0, 1 }, + + /* 152 - Door Dissolves */ + { { 155, 0 }, 128, 128, 128, 0, 1 }, + + /* 153 - Altar Slides */ + { { 156, 0 }, 128, 128, 128, 0, 1 }, + + /* 154 - Light Torch */ + { { 157, 0 }, 128, 128, 128, 0, 1 }, + + /* 155 - Stamp Sound */ + { { 158, 0 }, 128, 128, 128, 0, 1 }, + + /* 156 - Plaster Loud */ + { { 159, 0 }, 128, 128, 128, 0, 1 }, + + /* 157 - Sparky Bathtub */ + { { 160, 0 }, 128, 128, 128, 0, 1 }, + + /* 158 - Ape Rezzes Out */ + { { 161, 0 }, 128, 128, 128, 0, 1 }, + + /* 159 - Song 159 */ + { { 162, 0 }, 128, 128, 128, 1, 0 }, + + /* 160 - Song 160 */ + { { 163, 0 }, 128, 128, 128, 1, 0 }, + + /* 161 - Song 161 */ + { { 164, 0 }, 128, 128, 128, 1, 0 }, + + /* 162 - Piranhas Swim */ + { { 165, 0 }, 128, 128, 128, 0, 1 }, + + /* 163 - Prison/Dungeon Door */ + { { 166, 0 }, 128, 128, 128, 0, 1 }, + + /* 164 - Fight Explosion */ + { { 167, 0 }, 128, 128, 128, 0, 1 }, + + /* 165 - Press Button */ + { { 168, 0 }, 128, 128, 128, 2, 1 }, + + /* 166 - Pull Lever */ + { { 169, 0 }, 128, 128, 128, 0, 1 }, + + /* 167 - Wrong Code */ + { { 170, 0 }, 128, 128, 128, 0, 1 }, + + /* 168 - Correct Code */ + { { 171, 0 }, 128, 128, 128, 0, 1 }, + + /* 169 - Sizzle */ + { { 172, 0 }, 128, 128, 128, 0, 1 }, + + /* 170 - Money In Slot */ + { { 173, 0 }, 128, 128, 128, 0, 1 }, + + /* 171 - Lightning Crack */ + { { 174, 0 }, 128, 128, 128, 0, 1 }, + + /* 172 - Machine Gun Fire */ + { { 175, 0 }, 128, 128, 128, 0, 1 }, + + /* 173 - Cage Descends */ + { { 176, 0 }, 128, 128, 128, 0, 1 }, + + /* 174 - Chair Activates */ + { { 177, 0 }, 128, 128, 128, 0, 1 }, + + /* 175 - Robot Powers On */ + { { 178, 0 }, 128, 128, 128, 0, 1 }, + + /* 176 - Grow Big */ + { { 179, 0 }, 128, 128, 128, 0, 1 }, + + /* 177 - Eat Food */ + { { 180, 0 }, 128, 128, 128, 0, 1 }, + + /* 178 - Head Shrink */ + { { 181, 0 }, 128, 128, 128, 0, 1 }, + + /* 179 - Grinding Gears */ + { { 182, 0 }, 128, 128, 128, 0, 1 }, + + /* 180 - Chair Splash */ + { { 183, 0 }, 128, 128, 128, 0, 1 }, + + /* 181 - Deflect Laser */ + { { 184, 0 }, 128, 128, 128, 0, 1 }, + + /* 182 - Zap Frank */ + { { 185, 0 }, 128, 128, 128, 0, 1 }, + + /* 183 - Frank Transforms */ + { { 186, 0 }, 128, 128, 128, 0, 1 }, + + /* 184 - Alarm Clock */ + { { 187, 0 }, 128, 128, 128, 0, 1 }, + + /* 185 - Slide Chute */ + { { 188, 0 }, 128, 128, 128, 0, 1 }, + + /* 186 - Puff */ + { { 189, 0 }, 128, 128, 128, 0, 1 }, + + /* 187 - Bite */ + { { 190, 0 }, 128, 128, 128, 0, 0 }, + + /* 188 - Stone Door Grind 2 */ + { { 191, 0 }, 128, 128, 128, 0, 1 }, + + /* 189 - Prequel 2 */ + { { 192, 0 }, 128, 128, 128, 1, 0 }, + + /* 190 - Prequel 3 */ + { { 193, 0 }, 128, 128, 128, 1, 0 }, + + /* 191 - Prequel 4 */ + { { 194, 0 }, 128, 128, 128, 1, 0 }, + + /* 192 - Stop Music */ + { { 195, 0 }, 128, 128, 128, 1, 0 }, + + /* 193 - Plane Flyby */ + { { 196, 0 }, 128, 128, 128, 0, 1 }, + + /* 194 - Commander Rocket 2 */ + { { 197, 0 }, 128, 128, 128, 1, 0 }, + + /* 195 - Commander Rocket 3 */ + { { 198, 0 }, 128, 128, 128, 1, 0 }, + + /* 196 - Rescue */ + { { 199, 0 }, 128, 128, 128, 1, 0 }, + + /* 197 - Slow Fanfare */ + { { 200, 0 }, 128, 128, 128, 1, 0 }, + + /* 198 - Plane Crash */ + { { 201, 0 }, 128, 128, 128, 1, 0 }, + + /* 199 - Plane Engine 1 */ + { { 202, 0 }, 128, 128, 128, 0, 1 }, + + /* 200 - Plane Engine 2 */ + { { 203, 0 }, 128, 128, 128, 0, 1 }, + + /* 201 - Boat In */ + { { 204, 0 }, 128, 128, 128, 0, 1 }, + + /* 202 - Boat Out */ + { { 205, 0 }, 128, 128, 128, 0, 1 }, + + /* 203 - Final Fanfare! */ + { { 206, 0 }, 128, 128, 128, 1, 0 }, + + /* 204 - Frank Destroyed */ + { { 207, 0 }, 128, 128, 128, 1, 0 }, + + /* 205 - Jaspar Eats */ + { { 208, 0 }, 128, 128, 128, 0, 1 }, + + /* 206 - Compy Scream 1 */ + { { 209, 0 }, 128, 128, 128, 0, 1 }, + + /* 207 - Compy Scream 2 */ + { { 210, 0 }, 128, 128, 128, 0, 1 }, + + /* 208 - Punch Klunk Fanfare */ + { { 211, 0 }, 128, 128, 128, 1, 0 }, + + /* 209 - Talk Frank */ + { { 212, 0 }, 128, 128, 128, 1, 0 } + }; + + writeRecord(_song, sizeof(_song), GBVARS_MUSICDATASONG_INDEX , GBVARS_QUEEN); +} + +static void addMusicdata_tuneDemo() { + tuneData _tuneDemo[] = { + /* 1 - Hotel Gangsters */ + { { 32, 0 }, { 0, 0 }, 1, 0 }, + + /* 2 - Hotel General */ + { { 26, 0 }, { 0, 0 }, 1, 0 }, + + /* 3 - Jungle */ + { { 15, 0 }, { 0, 0 }, 1, 0 }, + + /* 4 - Jungle */ + { { 17, 0 }, { 0, 0 }, 1, 0 }, + + /* 5 - Jungle */ + { { 18, 0 }, { 0, 0 }, 1, 0 }, + + /* 6 - Jungle */ + { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, 0 }, + + /* 7 - Waterfall On */ + { { 3, 0 }, { 0, 0 }, 1, 0 }, + + /* 8 - Vnormal */ + { { 1, 0 }, { 0, 0 }, 1, 0 }, + + /* 9 - Trader Bob */ + { { 1, 0 }, { 0, 0 }, 1, 0 }, + + /* 10 - Jetty Music */ + { { 37, 0 }, { 0, 0 }, 1, 0 }, + + /* 11 - Ferry Music */ + { { 38, 0 }, { 0, 0 }, 1, 0 }, + + /* 12 - Temple Upstairs */ + { { 30, 0 }, { 0, 0 }, 1, 0 }, + + /* 13 - Temple Downstairs */ + { { 34, 0 }, { 0, 0 }, 1, 0 }, + + /* 14 - Temple Maze */ + { { 35, 0 }, { 0, 0 }, 1, 0 }, + + /* 15 - Temple Skull */ + { { 36, 0 }, { 0, 0 }, 1, 0 }, + + /* 16 - Johns Theme (Love Story) */ + { { 43, 0 }, { 0, 0 }, 1, 0 }, + + /* 17 - Vmedium */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 18 - Vsoft */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 19 - Floda Upstairs */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 20 - Floda General */ + { { 29, 0 }, { 0, 0 }, 1, 0 }, + + /* 21 - Klunks Room */ + { { 39, 0 }, { 0, 0 }, 1, 0 }, + + /* 22 - Hotel Lola */ + { { 31, 0 }, { 0, 0 }, 1, 0 }, + + /* 23 - Hotel Escape 1 */ + { { 33, 0 }, { 0, 0 }, 1, 0 }, + + /* 24 - Amazon Fortress */ + { { 40, 0 }, { 0, 0 }, 1, 0 }, + + /* 25 - Waterfall Off */ + { { -3, 0 }, { 0, 0 }, 1, 0 }, + + /* 26 - Wave Torch */ + { { 22, 0 }, { 121, 0 }, 2, 0 }, + + /* 27 - Zombies Rez Out */ + { { 25, 0 }, { 20, 0 }, 2, 0 }, + + /* 28 - Open Door (standard) */ + { { 20, 0 }, { 1, 0 }, 2, 0 }, + + /* 29 - Close Door (standard) */ + { { 21, 0 }, { 2, 0 }, 2, 0 }, + + /* 30 - Cloth Unrolls */ + { { 23, 0 }, { 51, 0 }, 2, 0 }, + + /* 31 - Snake Slithers Off */ + { { 24, 0 }, { 122, 0 }, 2, 0 }, + + /* 32 - Hotel Fanfare 2 */ + { { 69, 1003, 0 }, { 0, 0 }, 2, 0 }, + + /* 33 - Floda Secret */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 34 - Temple Fanfare 1 */ + { { 60, 162, 0 }, { 0, 0 }, 2, 0 }, + + /* 35 - Commander Rocket 1 */ + { { 46, 0 }, { 0, 0 }, 1, 0 }, + }; + writeRecord(_tuneDemo, sizeof(_tuneDemo), GBVARS_MUSICDATATUNEDEMO_INDEX , GBVARS_QUEEN); +} + +static void addMusicdata_tune() { + tuneData _tune[] = { + /* 1 - Hotel Gangsters */ + { { 32, 0 }, { 0, 0 }, 1, 0 }, + + /* 2 - Hotel General */ + { { 41, 0 }, { 0, 0 }, 1, 0 }, + + /* 3 - Jungle */ + { { 15, 16, 0 }, { 0, 0 }, 1, 0 }, + + /* 4 - Jungle */ + { { 17, 0 }, { 0, 0 }, 1, 0 }, + + /* 5 - Jungle */ + { { 18, 0 }, { 0, 0 }, 1, 0 }, + + /* 6 - Jungle */ + { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, -10 }, + + /* 7 - Waterfall On */ + { { 3, 0 }, { 0, 0 }, 1, 0 }, + + /* 8 - Vnormal */ + { { 23, 0 }, { 0, 0 }, 1, 0 }, + + /* 9 - Trader Bob */ + { { 23, 0 }, { 0, 0 }, 1, 0 }, + + /* 10 - Jetty Music */ + { { 37, 0 }, { 0, 0 }, 1, 0 }, + + /* 11 - Ferry Music */ + { { 38, 0 }, { 0, 0 }, 1, 0 }, + + /* 12 - Temple Upstairs */ + { { 30, 0 }, { 0, 0 }, 1, 0 }, + + /* 13 - Temple Downstairs */ + { { 34, 36, 56, 0 }, { 0, 0 }, 0, 0 }, + + /* 14 - Temple Maze */ + { { 87, 35, 0 }, { 0, 0 }, 1, 0 }, + + /* 15 - Temple Skull */ + { { 76, 0 }, { 0, 0 }, 1, 0 }, + + /* 16 - Johns Theme (Love Story) */ + { { 44, 0 }, { 0, 0 }, 1, 0 }, + + /* 17 - Vmedium */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 18 - Vsoft */ + { { 28, 0 }, { 0, 0 }, 1, 0 }, + + /* 19 - Floda Upstairs */ + { { 28, 39, 0 }, { 0, 0 }, 0, 0 }, + + /* 20 - Floda General */ + { { 89, 63, 64, 65, 0 }, { 0, 0 }, 0, 0 }, + + /* 21 - Klunks Room */ + { { 43, 0 }, { 0, 0 }, 1, 0 }, + + /* 22 - Hotel Lola */ + { { 31, 0 }, { 0, 0 }, 1, 0 }, + + /* 23 - Hotel Escape 1 */ + { { 52, 0 }, { 0, 0 }, 1, 0 }, + + /* 24 - Amazon Fortress */ + { { 40, 0 }, { 0, 0 }, 1, 0 }, + + /* 25 - Waterfall Off */ + { {-3, 0 }, { 0, 0 }, 1, 0 }, + + /* 26 - Wave Torch */ + { { 0, 0 }, { 121, 0 }, 2, 0 }, + + /* 27 - Zombies Rez Out */ + { { 0, 0 }, { 20, 0 }, 2, 0 }, + + /* 28 - Open Door (standard) */ + { { 0, 0 }, { 1, 0 }, 2, 0 }, + + /* 29 - Close Door (standard) */ + { { 0, 0 }, { 2, 0 }, 2, 0 }, + + /* 30 - Cloth Unrolls */ + { { 0, 0 }, { 51, 0 }, 2, 0 }, + + /* 31 - Snake Slithers Off */ + { { 0, 0 }, { 122, 0 }, 2, 0 }, + + /* 32 - Hotel Fanfare 2 */ + { { 69, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 33 - Floda Secret */ + { { 29, 42, 0 }, { 0, 0 }, 1, 0 }, + + /* 34 - Temple Fanfare 1 */ + { { 70, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 35 - Commander Rocket 1 */ + { { 45, 0 }, { 0, 0 }, 2, 0 }, + + /* 36 - Hotel Escape 2 */ + { { 52, 0 }, { 0, 0 }, 1, 0 }, + + /* 37 - Back of Truck */ + { { 51, 48, 33, 54, 52, 0 }, { 0, 0 }, 1, 0 }, + + /* 38 - Hotel Fanfare 1 */ + { { 67, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 39 - Truck Fanfare */ + { { 67, 177, 0 }, { 0, 0 }, 2, 0 }, + + /* 40 - Airport */ + { { 81, 0 }, { 0, 0 }, 1, 0 }, + + /* 41 - Plane Leaves */ + { { 68, 1198, 0 }, { 0, 0 }, 2, 0 }, + + /* 42 - Arrive Hotel */ + { { 26, 0 }, { 0, 0 }, 1, 0 }, + + /* 43 - Jungle Fanfare */ + { { 68, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 44 - General Fanfare */ + { { 57, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 45 - Johns Room */ + { { 90, 0 }, { 0, 0 }, 1, 0 }, + + /* 46 - Floda Lab */ + { { 92, 0 }, { 0, 0 }, 1, 0 }, + + /* 47 - Azura's Theme */ + { { 80, 0 }, { 0, 0 }, 1, 0 }, + + /* 48 - Use Record */ + { { 91, 2000, 0 }, { 0, 0 }, 2, 0 }, + + /* 49 - Franks Theme */ + { { 77, 0 }, { 0, 0 }, 1, 0 }, + + /* 50 - Anderson Doubts */ + { { 75, 0 }, { 0, 0 }, 1, 0 }, + + /* 51 - Bud and Lou Theme */ + { { 94, 1003, 0 }, { 0, 0 }, 1, 0 }, + + /* 52 - Gorilla Theme */ + { { 97, 1003, 0 }, { 0, 0 }, 1, 0 }, + + /* 53 - Missionaries Theme */ + { { 98, 1003, 0 }, { 0, 0 }, 1, 0 }, + + /* 54 - Sloth Theme */ + { { 100, 1003, 0 }, { 0, 0 }, 1, 0 }, + + /* 55 - Amazon Dungeon */ + { { 96, 0 }, { 0, 0 }, 1, 0 }, + + /* 56 - Throne Room */ + { { 78, 0 }, { 0, 0 }, 1, 0 }, + + /* 57 - Temple Puzzle */ + { { 88, 0 }, { 0, 0 }, 1, 0 }, + + /* 58 - Temple Fountain Room */ + { { 55, 0 }, { 0, 0 }, 1, 0 }, + + /* 59 - Light Switch */ + { { 0, 0 }, { 4, 0 }, 2, 0 }, + + /* 60 - Hydraulic Open */ + { { 0, 0 }, { 7, 0 }, 2, 0 }, + + /* 61 - Hydraulic Close */ + { { 0, 0 }, { 8, 0 }, 2, 0 }, + + /* 62 - Close Door (metal) */ + { { 0, 0 }, { 9, 0 }, 2, 0 }, + + /* 63 - Small Hatch Close */ + { { 0, 0 }, { 10, 0 }, 2, 0 }, + + /* 64 - Scissors Snip */ + { { 0, 0 }, { 5, 0 }, 2, 0 }, + + /* 65 - Pick up Sticky */ + { { 0, 0 }, { 6, 0 }, 2, 0 }, + + /* 66 - Oracle Rezzes In */ + { { 0, 0 }, { 11, 0 }, 2, 0 }, + + /* 67 - Sparkle SFX */ + { { 0, 0 }, { 12, 0 }, 2, 0 }, + + /* 68 - Splorch! */ + { { 0, 0 }, { 13, 0 }, 2, 0 }, + + /* 69 - Pour Liquid */ + { { 0, 0 }, { 3, 0 }, 2, 0 }, + + /* 70 - End Credit Medley */ + { { 95, 0 }, { 0, 0 }, 1, 0 }, + + /* 71 - Dino Ray */ + { { 0, 0 }, { 14, 0 }, 2, 0 }, + + /* 72 - Squish! */ + { { 0, 0 }, { 15, 0 }, 2, 0 }, + + /* 73 - Robot Laser */ + { { 0, 0 }, { 16, 0 }, 2, 0 }, + + /* 74 - Thud wood light */ + { { 0, 0 }, { 17, 0 }, 2, 0 }, + + /* 75 - Thud wood deep */ + { { 0, 0 }, { 18, 0 }, 2, 0 }, + + /* 76 - Thud metallic */ + { { 0, 0 }, { 19, 0 }, 2, 0 }, + + /* 77 - Cut Coconut */ + { { 0, 0 }, { 22, 0 }, 2, 0 }, + + /* 78 - Thud Stone */ + { { 0, 0 }, { 23, 0 }, 2, 0 }, + + /* 79 - Cloth Slide 1 */ + { { 0, 0 }, { 24, 0 }, 2, 0 }, + + /* 80 - Open Chest */ + { { 0, 0 }, { 25, 0 }, 2, 0 }, + + /* 81 - Close Chest */ + { { 0, 0 }, { 26, 0 }, 2, 0 }, + + /* 82 - Open Drawer */ + { { 0, 0 }, { 27, 0 }, 2, 0 }, + + /* 83 - Truck door closes */ + { { 0, 0 }, { 28, 0 }, 2, 0 }, + + /* 84 - Truck Starts */ + { { 0, 0 }, { 29, 0 }, 2, 0 }, + + /* 85 - Truck Drives Off */ + { { 0, 0 }, { 30, 0 }, 2, 0 }, + + /* 86 - Fish Splash */ + { { 0, 0 }, { 31, 0 }, 2, 0 }, + + /* 87 - Close Drawer/Push Ladder */ + { { 0, 0 }, { 33, 0 }, 2, 0 }, + + /* 88 - Agression Enhancer */ + { { 0, 0 }, { 32, 0 }, 2, 0 }, + + /* 89 - Stone Door Grind 1 */ + { { 0, 0 }, { 78, 0 }, 2, 0 }, + + /* 90 - Prequel 1 */ + { { 20, 0 }, { 0, 0 }, 1, 0 }, + + /* 91 - Intro Credits */ + { { 21, 0 }, { 0, 0 }, 2, 0 }, + + /* 92 - Valley 1 */ + { { 71, 0 }, { 0, 0 }, 1, 0 }, + + /* 93 - Valley 3 */ + { { 73, 0 }, { 0, 0 }, 1, 0 }, + + /* 94 - Fight Music */ + { { 72, 0 }, { 0, 0 }, 1, 0 }, + + /* 95 - Confrontation 1 */ + { { 93, 0 }, { 0, 0 }, 1, 0 }, + + /* 96 - Confrontation 2 */ + { { 74, 0 }, { 0, 0 }, 1, 0 }, + + /* 97 - Plane Hatch Open */ + { { 0, 0 }, { 35, 0 }, 2, 0 }, + + /* 98 - Plane Hatch Close */ + { { 0, 0 }, { 36, 0 }, 2, 0 }, + + /* 99 - Tie Vines */ + { { 0, 0 }, { 37, 0 }, 2, 0 }, + + /* 100 - Pterodactyl */ + { { 0, 0 }, { 38, 0 }, 2, 0 }, + + /* 101 - Beef Jerky Splash */ + { { 0, 0 }, { 39, 0 }, 2, 0 }, + + /* 102 - Piranha Burp */ + { { 0, 0 }, { 40, 0 }, 2, 0 }, + + /* 103 - Falling Vine */ + { { 0, 0 }, { 41, 0 }, 2, 0 }, + + /* 104 - Stone Door Grind 2 */ + { { 0, 0 }, { 79, 0 }, 2, 0 }, + + /* 105 - Stone Grind (light) */ + { { 0, 0 }, { 82, 0 }, 2, 0 }, + + /* 106 - Ape Takes Off Mask */ + { { 0, 0 }, { 44, 0 }, 2, 0 }, + + /* 107 - Bark Breaks */ + { { 0, 0 }, { 45, 0 }, 2, 0 }, + + /* 108 - Stone Click */ + { { 0, 0 }, { 46, 0 }, 2, 0 }, + + /* 109 - Sproing! */ + { { 0, 0 }, { 42, 0 }, 2, 0 }, + + /* 110 - Cash Register */ + { { 0, 0 }, { 48, 0 }, 2, 0 }, + + /* 111 - Squeaky Toy */ + { { 0, 0 }, { 49, 0 }, 2, 0 }, + + /* 112 - Falling Chains */ + { { 0, 0 }, { 50, 0 }, 2, 0 }, + + /* 113 - Open Locker Door */ + { { 0, 0 }, { 52, 0 }, 2, 0 }, + + /* 114 - Close Locker Door */ + { { 0, 0 }, { 53, 0 }, 2, 0 }, + + /* 115 - Rub Pencil */ + { { 0, 0 }, { 54, 0 }, 2, 0 }, + + /* 116 - Open Safe */ + { { 0, 0 }, { 55, 0 }, 2, 0 }, + + /* 117 - Close Safe */ + { { 0, 0 }, { 56, 0 }, 2, 0 }, + + /* 118 - Push Chair */ + { { 0, 0 }, { 57, 0 }, 2, 0 }, + + /* 119 - Snake Hiss */ + { { 0, 0 }, { 58, 0 }, 2, 0 }, + + /* 120 - Oracle Rezzes Out */ + { { 0, 0 }, { 59, 0 }, 2, 0 }, + + /* 121 - Wall Crumbles */ + { { 0, 0 }, { 60, 0 }, 2, 0 }, + + /* 122 - Crypt Crumbles */ + { { 0, 0 }, { 61, 0 }, 2, 0 }, + + /* 123 - Joe Sucked Up */ + { { 0, 0 }, { 63, 0 }, 2, 0 }, + + /* 124 - Rocket Pack Zoom */ + { { 0, 0 }, { 47, 0 }, 2, 0 }, + + /* 125 - Piranha Splash */ + { { 0, 0 }, { 83, 0 }, 2, 0 }, + + /* 126 - Snap Branch */ + { { 0, 0 }, { 66, 0 }, 2, 0 }, + + /* 127 - Dino Horn */ + { { 0, 0 }, { 67, 0 }, 2, 0 }, + + /* 128 - Tyre Screech */ + { { 0, 0 }, { 68, 0 }, 2, 0 }, + + /* 129 - Oil Splat */ + { { 0, 0 }, { 70, 0 }, 2, 0 }, + + /* 130 - Punch */ + { { 0, 0 }, { 71, 0 }, 2, 0 }, + + /* 131 - Body Hits Ground */ + { { 0, 0 }, { 72, 0 }, 2, 0 }, + + /* 132 - Chicken */ + { { 0, 0 }, { 69, 0 }, 2, 0 }, + + /* 133 - Open Sarcophagus */ + { { 0, 0 }, { 21, 0 }, 2, 0 }, + + /* 134 - Close Sarcophagus */ + { { 0, 0 }, { 21, 0 }, 2, 0 }, + + /* 135 - Creaking Stick */ + { { 0, 0 }, { 62, 0 }, 2, 0 }, + + /* 136 - Pick Hits Stone */ + { { 0, 0 }, { 73, 0 }, 2, 0 }, + + /* 137 - Stalactite Crumbles */ + { { 0, 0 }, { 74, 0 }, 2, 0 }, + + /* 138 - Tic-Toc */ + { { 0, 0 }, { 76, 0 }, 2, 0 }, + + /* 139 - Stone Grind (heavy) */ + { { 0, 0 }, { 81, 0 }, 2, 0 }, + + /* 140 - Explosion */ + { { 0, 0 }, { 77, 0 }, 2, 0 }, + + /* 141 - Cloth Slide 2 */ + { { 0, 0 }, { 84, 0 }, 2, 0 }, + + /* 142 - Temple Laser */ + { { 0, 0 }, { 85, 0 }, 2, 0 }, + + /* 143 - Dino Transformation */ + { { 0, 0 }, { 86, 0 }, 2, 0 }, + + /* 144 - Experimental Laser */ + { { 0, 0 }, { 87, 0 }, 2, 0 }, + + /* 145 - Stone Grind (medium) */ + { { 0, 0 }, { 88, 0 }, 2, 0 }, + + /* 146 - Weeping God Grind */ + { { 0, 0 }, { 89, 0 }, 2, 0 }, + + /* 147 - Alien Hum */ + { { 0, 0 }, { 90, 0 }, 2, 0 }, + + /* 148 - Alien Puzzle */ + { { 0, 0 }, { 91, 0 }, 2, 0 }, + + /* 149 - Vacuum On */ + { { 0, 0 }, { 92, 0 }, 2, 0 }, + + /* 150 - Vacuum Off */ + { { 0, 0 }, { 93, 0 }, 2, 0 }, + + /* 151 - Elevator Starts */ + { { 0, 0 }, { 94, 0 }, 2, 0 }, + + /* 152 - Mummy Crumbles */ + { { 0, 0 }, { 95, 0 }, 2, 0 }, + + /* 153 - Temple Green Circle */ + { { 0, 0 }, { 96, 0 }, 2, 0 }, + + /* 154 - Rattle Bars */ + { { 0, 0 }, { 97, 0 }, 2, 0 }, + + /* 155 - Door Dissolves */ + { { 0, 0 }, { 98, 0 }, 2, 0 }, + + /* 156 - Altar Slides */ + { { 0, 0 }, { 99, 0 }, 2, 0 }, + + /* 157 - Light Torch */ + { { 0, 0 }, { 100, 0 }, 2, 0 }, + + /* 158 - Stamp Sound */ + { { 0, 0 }, { 34, 0 }, 2, 0 }, + + /* 159 - Plaster Loud */ + { { 0, 0 }, { 102, 0 }, 2, 0 }, + + /* 160 - Sparky Bathtub */ + { { 0, 0 }, { 103, 0 }, 2, 0 }, + + /* 161 - Ape Rezzes Out */ + { { 0, 0 }, { 104, 0 }, 2, 0 }, + + /* 162 - Song 159 */ + { { 0, 0 }, { 0, 0 }, 2, 0 }, + + /* 163 - Song 160 */ + { { 0, 0 }, { 0, 0 }, 2, 0 }, + + /* 164 - Song 161 */ + { { 0, 0 }, { 0, 0 }, 2, 0 }, + + /* 165 - Piranhas Swim */ + { { 0, 0 }, { 105, 0 }, 2, 0 }, + + /* 166 - Prison/Dungeon Door */ + { { 0, 0 }, { 43, 0 }, 2, 0 }, + + /* 167 - Fight Explosion */ + { { 0, 0 }, { 80, 0 }, 2, 0 }, + + /* 168 - Press Button */ + { { 0, 0 }, { 65, 0 }, 2, 0 }, + + /* 169 - Pull Lever */ + { { 0, 0 }, { 107, 0 }, 2, 0 }, + + /* 170 - Wrong Code */ + { { 0, 0 }, { 108, 0 }, 2, 0 }, + + /* 171 - Correct Code */ + { { 0, 0 }, { 109, 0 }, 2, 0 }, + + /* 172 - Sizzle */ + { { 0, 0 }, { 110, 0 }, 2, 0 }, + + /* 173 - Money In Slot */ + { { 0, 0 }, { 111, 0 }, 2, 0 }, + + /* 174 - Lightning Crack */ + { { 0, 0 }, { 112, 0 }, 2, 0 }, + + /* 175 - Machine Gun Fire */ + { { 0, 0 }, { 113, 0 }, 2, 0 }, + + /* 176 - Cage Descends */ + { { 0, 0 }, { 114, 0 }, 2, 0 }, + + /* 177 - Chair Activates */ + { { 0, 0 }, { 115, 0 }, 2, 0 }, + + /* 178 - Robot Powers On */ + { { 0, 0 }, { 116, 0 }, 2, 0 }, + + /* 179 - Grow Big */ + { { 0, 0 }, { 117, 0 }, 2, 0 }, + + /* 180 - Eat Food */ + { { 0, 0 }, { 118, 0 }, 2, 0 }, + + /* 181 - Head Shrink */ + { { 0, 0 }, { 119, 0 }, 2, 0 }, + + /* 182 - Grinding Gears */ + { { 0, 0 }, { 120, 0 }, 2, 0 }, + + /* 183 - Chair Splash */ + { { 0, 0 }, { 123, 0 }, 2, 0 }, + + /* 184 - Deflect Laser */ + { { 0, 0 }, { 124, 0 }, 2, 0 }, + + /* 185 - Zap Frank */ + { { 0, 0 }, { 125, 0 }, 2, 0 }, + + /* 186 - Frank Transforms */ + { { 0, 0 }, { 126, 0 }, 2, 0 }, + + /* 187 - Alarm Clock */ + { { 0, 0 }, { 127, 0 }, 2, 0 }, + + /* 188 - Slide Chute */ + { { 0, 0 }, { 64, 0 }, 2, 0 }, + + /* 189 - Puff */ + { { 0, 0 }, { 128, 0 }, 2, 0 }, + + /* 190 - Bite */ + { { 0, 0 }, { 129, 0 }, 2, 0 }, + + /* 191 - Stone Door Grind 2 */ + { { 0, 0 }, { 79, 0 }, 2, 0 }, + + /* 192 - Prequel 2 */ + { { 22, 0 }, { 0, 0 }, 1, 0 }, + + /* 193 - Prequel 3 */ + { { 24, 0 }, { 0, 0 }, 1, 0 }, + + /* 194 - Prequel 4 */ + { { 25, 0 }, { 0, 0 }, 1, 0 }, + + /* 195 - Stop Music */ + { { 1, 0 }, { 0, 0 }, 1, 0 }, + + /* 196 - Plane Flyby */ + { { 0, 0 }, { 101, 0 }, 2, 0 }, + + /* 197 - Commander Rocket 2 */ + { { 46, 0 }, { 0, 0 }, 1, 0 }, + + /* 198 - Commander Rocket 3 */ + { { 47, 0 }, { 0, 0 }, 1, 0 }, + + /* 199 - Rescue */ + { { 99, 0 }, { 0, 0 }, 1, 0 }, + + /* 200 - Slow Fanfare */ + { { 0, 0 }, { 0, 0 }, 1, 0 }, + + /* 201 - Plane Crash */ + { { 93, 0 }, { 0, 0 }, 1, 0 }, + + /* 202 - Plane Engine 1 */ + { { 0, 0 }, { 130, 0 }, 2, 0 }, + + /* 203 - Plane Engine 2 */ + { { 0, 0 }, { 131, 0 }, 2, 0 }, + + /* 204 - Boat In */ + { { 0, 0 }, { 132, 0 }, 2, 0 }, + + /* 205 - Boat Out */ + { { 0, 0 }, { 133, 0 }, 2, 0 }, + + /* 206 - Final Fanfare! */ + { { 21, 95, 21, 0 }, { 0, 0 }, 1, 0 }, + + /* 207 - Frank Destroyed */ + { { 25, 1044, 0 }, { 0, 0 }, 1, 0 }, + + + /* 208 - Jaspar Eats */ + { { 0, 0 }, { 134, 0 }, 2, 0 }, + + /* 209 - Compy Scream 1 */ + { { 0, 0 }, { 135, 0 }, 2, 0 }, + + /* 210 - Compy Scream 2 */ + { { 0, 0 }, { 136, 0 }, 2, 0 }, + + /* 211 - Punch Klunk Fanfare */ + { { 69, 1017, 0 }, { 0, 0 }, 1, 0 }, + + /* 212 - Talk Frank */ + { { 77, 1017, 0 }, { 0, 0 }, 1, 0 } + }; + writeRecord(_tune, sizeof(_tune), GBVARS_MUSICDATATUNE_INDEX , GBVARS_QUEEN); +} + +static void addMusicdata_sfxName() { + const char *_sfxName[] = { + /* 1 - Door Open (standard) */ + "116Bssss", + + /* 2 - Door Close (standard) */ + "105assss", + + /* 3 - Pour Liquid */ + "133sssss", + + /* 4 - Light Switch */ + "27ssssss", + + /* 5 - Scissor Snip */ + "15ssssss", + + /* 6 - Pick up Sticky */ + "79ssssss", + + /* 7 - Hydraulic Doors Open */ + "96ssssss", + + /* 8 - Hydraulic Doors Close */ + "97ssssss", + + /* 9 - Metallic Door Slams */ + "105sssss", + + /* 10 - Small Hatch Close */ + "106sssss", + + /* 11 - Oracle Rezzes In */ + "132sssss", + + /* 12 - Polish Sparkle */ + "132Cssss", + + /* 13 - Splorch! */ + "137Bssss", + + /* 14 - Dino Ray Gun */ + "138sssss", + + /* 15 - Squish! */ + "137Assss", + + /* 16 - Robot Laser */ + "61ssssss", + + /* 17 - Thud wood light */ + "109sssss", + + /* 18 - Thud wood deep */ + "110sssss", + + /* 19 - Thud metallic */ + "111sssss", + + /* 20 - Zombies Rez Out */ + "77ssssss", + + /* 21 - Sarc Door Closes */ + "58ssssss", + + /* 22 - Thud breadboard fruit/Coconut */ + "131Assss", + + /* 23 - Thud stone */ + "75ssssss", + + /* 24 - Cloth Slide 1 */ + "135sssss", + + /* 25 - Open Chest */ + "112sssss", + + /* 26 - Close Chest */ + "121sssss", + + /* 27 - Open Drawer */ + "120sssss", + + /* 28 - Truck door closes */ + "122sssss", + + /* 29 - Truck Starts */ + "123Assss", + + /* 30 - Truck Drives Off */ + "123Bssss", + + /* 31 - Fish Splash */ + "18ssssss", + + /* 32 - Agression Enhancer */ + "138Bssss", + + /* 33 - Close Drawer/Push Ladder */ + "113sssss", + + /* 34 - *Stamp Sound */ + "40ssssss", + + /* 35 - plane hatch open */ + "3sssssss", + + /* 36 - plane hatch close */ + "4sssssss", + + /* 37 - tie vines */ + "11ssssss", + + /* 38 - Pterodactyl */ + "10ssssss", + + /* 39 - Beef Jerky Splash */ + "6sssssss", + + /* 40 - Piranha Burp */ + "7sssssss", + + /* 41 - Falling Vine */ + "13ssssss", + + /* 42 - Sproing! */ + "29ssssss", + + /* 43 - Prison/Dungeon Door */ + "33ssssss", + + /* 44 - Ape takes off mask */ + "24ssssss", + + /* 45 - Bark breaks */ + "25ssssss", + + /* 46 - Stone Click */ + "136sssss", + + /* 47 - Rocket Pack Zoom */ + "1006ssss", + + /* 48 - Cash Register */ + "36ssssss", + + /* 49 - Squeaky Toy */ + "37ssssss", + + /* 50 - Falling Chains */ + "38ssssss", + + /* 51 - Cloth Unravels */ + "64ssssss", + + /* 52 - Open Locker Door */ + "48ssssss", + + /* 53 - Close Locker Door */ + "49ssssss", + + /* 54 - Rub Pencil on Pad */ + "50ssssss", + + /* 55 - Open Safe */ + "51ssssss", + + /* 56 - Close Safe */ + "52ssssss", + + /* 57 - Push Chair */ + "59ssssss", + + /* 58 - Snake Hiss */ + "83ssssss", + + /* 59 - Oracle Rezzes Out */ + "70ssssss", + + /* 60 - Wall Crumbles */ + "73Asssss", + + /* 61 - Crypt Crumbles */ + "76ssssss", + + /* 62 - Creaking Stick */ + "74Asssss", + + /* 63 - Joe Sucked Up */ + "80ssssss", + + /* 64 - Slide Chute */ + "114assss", + + /* 65 - Press Button */ + "1007ssss", + + /* 66 - Snap Branch */ + "101sssss", + + /* 67 - Dino Horn */ + "103sssss", + + /* 68 - Tyre Screech */ + "125sssss", + + /* 69 - Chicken */ + "126sssss", + + /* 70 - Oil Splat */ + "127sssss", + + /* 71 - Punch */ + "128sssss", + + /* 72 - Body Hits Ground */ + "129sssss", + + /* 73 - Pick Hits Stone */ + "71ssssss", + + /* 74 - Stalactite Crumbles */ + "119sssss", + + /* 75 - *Drip */ + "93ssssss", + + /* 76 - Tic-Toc */ + "42Bsssss", + + /* 77 - Explosion */ + "88ssssss", + + /* 78 - Stone Door Grind 1 */ + "1001ssss", + + /* 79 - Stone Door Grind 2 */ + "1002ssss", + + /* 80 - *Fight Explosion */ + "1000ssss", + + /* 81 - Stone Grind (heavy) */ + "1003ssss", + + /* 82 - Stone Grind (light) */ + "89ssssss", + + /* 83 - Piranha Splash */ + "5sssssss", + + /* 84 - Cloth Slide 2 */ + "1005ssss", + + /* 85 - Temple Laser */ + "87ssssss", + + /* 86 - Dino Transformation */ + "55Bsssss", + + /* 87 - Experimental Laser */ + "55ssssss", + + /* 88 - Stone Grind (medium) */ + "134sssss", + + /* 89 - Weeping God Grind */ + "94ssssss", + + /* 90 - Alien Hum */ + "95ssssss", + + /* 91 - Alien Puzzle */ + "103Assss", + + /* 92 - Vacuum On */ + "21ssssss", + + /* 93 - Vacuum Off */ + "21Csssss", + + /* 94 - Elevator Starts */ + "44ssssss", + + /* 95 - Mummy Crumbles */ + "68ssssss", + + /* 96 - Temple Green Circle */ + "60Bsssss", + + /* 97 - Rattle Bars */ + "115sssss", + + /* 98 - Door Dissolves */ + "56ssssss", + + /* 99 - Altar Slides */ + "85ssssss", + + /* 100 - Light Torch */ + "81ssssss", + + /* 101 - Plane Flyby */ + "1027ssss", + + /* 102 - Plaster Loud */ + "41Bsssss", + + /* 103 - Sparky Bathtub */ + "73ssssss", + + /* 104 - Ape Rezzes Out */ + "14ssssss", + + /* 105 - Piranhas Swim */ + "17ssssss", + + /* 106 - *Gun Shot */ + "1004ssss", + + /* 107 - Pull Lever */ + "1008ssss", + + /* 108 - Wrong Code */ + "1009ssss", + + /* 109 - Correct Code */ + "1010ssss", + + /* 110 - Sizzle */ + "1011ssss", + + /* 111 - Money In Slot */ + "1012ssss", + + /* 112 - Lightning */ + "1013ssss", + + /* 113 - Machine Gun Fire */ + "1014ssss", + + /* 114 - Cage Descends */ + "1015ssss", + + /* 115 - Temple Chair Activates */ + "1016ssss", + + /* 116 - Robot Powers On */ + "1017ssss", + + /* 117 - Grow Big */ + "1018ssss", + + /* 118 - Eat Food */ + "1019ssss", + + /* 119 - Head Shrink */ + "1020ssss", + + /* 120 - Grinding Gears */ + "84ssssss", + + /* 121 - Wave Torch */ + "1021ssss", + + /* 122 - Snake Slithers Off */ + "1022ssss", + + /* 123 - Chair Splash */ + "26ssssss", + + /* 124 - Deflect Laser */ + "60ssssss", + + /* 125 - Zap Frank */ + "1023ssss", + + /* 126 - Frank Transforms */ + "1024ssss", + + /* 127 - Alarm Clock */ + "1025ssss", + + /* 128 - Puff */ + "35ssssss", + + /* 129 - Bite */ + "1026ssss", + + /* 130 - Plane Engine 1 */ + "1028ssss", + + /* 131 - Plane Engine 2 */ + "1029ssss", + + /* 132 - Boat In */ + "1030ssss", + + /* 133 - Boat Out */ + "1031ssss", + + /* 134 - Jaspar Eats */ + "1032ssss", + + /* 135 - Compy Scream 1 */ + "1033ssss", + + /* 136 - Compy Scream 2 */ + "1034ssss" + }; + + const char *first = _sfxName[0]; + const char *last = _sfxName[135]; + + UInt32 size = ((last - first) + 10); + + writeRecord((void *)first, size, GBVARS_MUSICDATASFXNAME_INDEX , GBVARS_QUEEN); +} + +static void addMusicdata_jungleList() { + int16 _jungleList[] = { 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 13, 14, 0 }; + + writeRecord(_jungleList, sizeof(_jungleList), GBVARS_MUSICDATAJUNGLELIST_INDEX , GBVARS_QUEEN); +} + +void Queen_addMusicdata() { + + addMusicdata_songDemo(); + addMusicdata_song(); + addMusicdata_tuneDemo(); + addMusicdata_tune(); + addMusicdata_sfxName(); + addMusicdata_jungleList(); +} diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_restables.c b/backends/platform/PalmOS/Src/builder/queen/bq_restables.c new file mode 100644 index 0000000000..29fd7fb370 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/queen/bq_restables.c @@ -0,0 +1,1096 @@ +#include +#include "b_globals.h" + +typedef struct { + char filename[13]; + UInt8 inBundle; + UInt32 offset; + UInt32 size; +} ResourceEntry; + +static void addRestables_resourceTablePEM10() { + ResourceEntry _resourceTablePEM10[] = { + { "1000SSSS.SB", 1, 0x00000000, 0x000027fe }, + { "1001SSSS.SB", 1, 0x000027fe, 0x00007af8 }, + { "1002SSSS.SB", 1, 0x0000a2f6, 0x000049e2 }, + { "1003SSSS.SB", 1, 0x0000ecd8, 0x00001d42 }, + { "1004SSSS.SB", 1, 0x00010a1a, 0x00001a1c }, + { "1005SSSS.SB", 1, 0x00012436, 0x00001a8a }, + { "1006SSSS.SB", 1, 0x00013ec0, 0x00009d41 }, + { "1007SSSS.SB", 1, 0x0001dc01, 0x00001372 }, + { "1008SSSS.SB", 1, 0x0001ef73, 0x00002e4a }, + { "1009SSSS.SB", 1, 0x00021dbd, 0x0000220c }, + { "1010SSSS.SB", 1, 0x00023fc9, 0x00003b1e }, + { "1011SSSS.SB", 1, 0x00027ae7, 0x00000dd8 }, + { "1012SSSS.SB", 1, 0x000288bf, 0x0000444c }, + { "1013SSSS.SB", 1, 0x0002cd0b, 0x00007e66 }, + { "1014SSSS.SB", 1, 0x00034b71, 0x00006e14 }, + { "1015SSSS.SB", 1, 0x0003b985, 0x0000760c }, + { "1016SSSS.SB", 1, 0x00042f91, 0x00004f8b }, + { "1017SSSS.SB", 1, 0x00047f1c, 0x00004848 }, + { "1018SSSS.SB", 1, 0x0004c764, 0x00007e94 }, + { "1019SSSS.SB", 1, 0x000545f8, 0x00003a70 }, + { "101SSSSS.SB", 1, 0x00058068, 0x0000191a }, + { "1020SSSS.SB", 1, 0x00059982, 0x00004d90 }, + { "1021SSSS.SB", 1, 0x0005e712, 0x00003dcc }, + { "1023SSSS.SB", 1, 0x000624de, 0x00003d7f }, + { "1024SSSS.SB", 1, 0x0006625d, 0x00004f8a }, + { "1025SSSS.SB", 1, 0x0006b1e7, 0x00006488 }, + { "1026SSSS.SB", 1, 0x0007166f, 0x00002022 }, + { "1027SSSS.SB", 1, 0x00073691, 0x00009e76 }, + { "1028SSSS.SB", 1, 0x0007d507, 0x0001b37c }, + { "1029SSSS.SB", 1, 0x00098883, 0x0000ce2c }, + { "1030SSSS.SB", 1, 0x000a56af, 0x0001e6e4 }, + { "1031SSSS.SB", 1, 0x000c3d93, 0x00011532 }, + { "1032SSSS.SB", 1, 0x000d52c5, 0x000034d4 }, + { "1033SSSS.SB", 1, 0x000d8799, 0x00002de6 }, + { "1034SSSS.SB", 1, 0x000db57f, 0x000099a1 }, + { "103ASSSS.SB", 1, 0x000e4f20, 0x00005040 }, + { "103SSSSS.SB", 1, 0x000e9f60, 0x00006a94 }, + { "105ASSSS.SB", 1, 0x000f09f4, 0x00001d04 }, + { "105SSSSS.SB", 1, 0x000f26f8, 0x000024de }, + { "106SSSSS.SB", 1, 0x000f4bd6, 0x00000ac4 }, + { "109SSSSS.SB", 1, 0x000f569a, 0x00000d96 }, + { "10SSSSSS.SB", 1, 0x000f6430, 0x000013f6 }, + { "110SSSSS.SB", 1, 0x000f7826, 0x00000c96 }, + { "111SSSSS.SB", 1, 0x000f84bc, 0x00000f72 }, + { "112SSSSS.SB", 1, 0x000f942e, 0x00000f1a }, + { "113SSSSS.SB", 1, 0x000fa348, 0x00003f5e }, + { "114ASSSS.SB", 1, 0x000fe2a6, 0x00001e54 }, + { "115SSSSS.SB", 1, 0x001000fa, 0x00002580 }, + { "116BSSSS.SB", 1, 0x0010267a, 0x00002350 }, + { "119SSSSS.SB", 1, 0x001049ca, 0x00003808 }, + { "11SSSSSS.SB", 1, 0x001081d2, 0x0000157e }, + { "120SSSSS.SB", 1, 0x00109750, 0x00002be4 }, + { "121SSSSS.SB", 1, 0x0010c334, 0x00001340 }, + { "122SSSSS.SB", 1, 0x0010d674, 0x0000173e }, + { "123ASSSS.SB", 1, 0x0010edb2, 0x00009e9d }, + { "123BSSSS.SB", 1, 0x00118c4f, 0x0000f613 }, + { "125SSSSS.SB", 1, 0x00128262, 0x0000e628 }, + { "126SSSSS.SB", 1, 0x0013688a, 0x0000372e }, + { "127SSSSS.SB", 1, 0x00139fb8, 0x0000ff1e }, + { "128SSSSS.SB", 1, 0x00149ed6, 0x00000e34 }, + { "129SSSSS.SB", 1, 0x0014ad0a, 0x00000b02 }, + { "130SSSSS.SB", 1, 0x0014b80c, 0x00000a10 }, + { "131ASSSS.SB", 1, 0x0014c21c, 0x000022d4 }, + { "132CSSSS.SB", 1, 0x0014e4f0, 0x000094c3 }, + { "132SSSSS.SB", 1, 0x001579b3, 0x00006183 }, + { "133SSSSS.SB", 1, 0x0015db36, 0x00006a13 }, + { "134SSSSS.SB", 1, 0x00164549, 0x00004ea3 }, + { "135SSSSS.SB", 1, 0x001693ec, 0x000017c8 }, + { "136SSSSS.SB", 1, 0x0016abb4, 0x000004a0 }, + { "137ASSSS.SB", 1, 0x0016b054, 0x00001826 }, + { "137BSSSS.SB", 1, 0x0016c87a, 0x00001d46 }, + { "138BSSSS.SB", 1, 0x0016e5c0, 0x000065f9 }, + { "138SSSSS.SB", 1, 0x00174bb9, 0x000053c3 }, + { "13SSSSSS.SB", 1, 0x00179f7c, 0x00001f32 }, + { "14SSSSSS.SB", 1, 0x0017beae, 0x00004921 }, + { "15SSSSSS.SB", 1, 0x001807cf, 0x000007aa }, + { "17SSSSSS.SB", 1, 0x00180f79, 0x00005080 }, + { "18SSSSSS.SB", 1, 0x00185ff9, 0x000015e2 }, + { "21CSSSSS.SB", 1, 0x001875db, 0x000048ec }, + { "21SSSSSS.SB", 1, 0x0018bec7, 0x0000bb40 }, + { "24SSSSSS.SB", 1, 0x00197a07, 0x000023fc }, + { "25SSSSSS.SB", 1, 0x00199e03, 0x000016d8 }, + { "26SSSSSS.SB", 1, 0x0019b4db, 0x000049dd }, + { "27SSSSSS.SB", 1, 0x0019feb8, 0x000010a0 }, + { "29SSSSSS.SB", 1, 0x001a0f58, 0x00004e50 }, + { "33SSSSSS.SB", 1, 0x001a5da8, 0x00005218 }, + { "35SSSSSS.SB", 1, 0x001aafc0, 0x00002c6c }, + { "36SSSSSS.SB", 1, 0x001adc2c, 0x000031d2 }, + { "37SSSSSS.SB", 1, 0x001b0dfe, 0x0000197a }, + { "38SSSSSS.SB", 1, 0x001b2778, 0x00002162 }, + { "3SSSSSSS.SB", 1, 0x001b48da, 0x00000d04 }, + { "40SSSSSS.SB", 1, 0x001b55de, 0x00000268 }, + { "41BSSSSS.SB", 1, 0x001b5846, 0x000005fe }, + { "42BSSSSS.SB", 1, 0x001b5e44, 0x00000308 }, + { "44SSSSSS.SB", 1, 0x001b614c, 0x000052c0 }, + { "48SSSSSS.SB", 1, 0x001bb40c, 0x000010a8 }, + { "49SSSSSS.SB", 1, 0x001bc4b4, 0x00001dd4 }, + { "4SSSSSSS.SB", 1, 0x001be288, 0x000009d2 }, + { "50SSSSSS.SB", 1, 0x001bec5a, 0x00003f8a }, + { "51SSSSSS.SB", 1, 0x001c2be4, 0x000015da }, + { "52SSSSSS.SB", 1, 0x001c41be, 0x0000125a }, + { "55BSSSSS.SB", 1, 0x001c5418, 0x00003d7f }, + { "55SSSSSS.SB", 1, 0x001c9197, 0x00004508 }, + { "56SSSSSS.SB", 1, 0x001cd69f, 0x0000520b }, + { "58SSSSSS.SB", 1, 0x001d28aa, 0x00003399 }, + { "59SSSSSS.SB", 1, 0x001d5c43, 0x000032b8 }, + { "5SSSSSSS.SB", 1, 0x001d8efb, 0x00004ae9 }, + { "60BSSSSS.SB", 1, 0x001dd9e4, 0x000050f2 }, + { "60SSSSSS.SB", 1, 0x001e2ad6, 0x00003c57 }, + { "61SSSSSS.SB", 1, 0x001e672d, 0x0000513d }, + { "64SSSSSS.SB", 1, 0x001eb86a, 0x00005a98 }, + { "68SSSSSS.SB", 1, 0x001f1302, 0x00003e85 }, + { "6SSSSSSS.SB", 1, 0x001f5187, 0x00001650 }, + { "70SSSSSS.SB", 1, 0x001f67d7, 0x00009645 }, + { "71SSSSSS.SB", 1, 0x001ffe1c, 0x00000fa3 }, + { "73ASSSSS.SB", 1, 0x00200dbf, 0x00008812 }, + { "73SSSSSS.SB", 1, 0x002095d1, 0x00006706 }, + { "74ASSSSS.SB", 1, 0x0020fcd7, 0x000029b2 }, + { "75SSSSSS.SB", 1, 0x00212689, 0x00000920 }, + { "76SSSSSS.SB", 1, 0x00212fa9, 0x00004ef8 }, + { "77SSSSSS.SB", 1, 0x00217ea1, 0x00003358 }, + { "79SSSSSS.SB", 1, 0x0021b1f9, 0x000016a8 }, + { "7SSSSSSS.SB", 1, 0x0021c8a1, 0x000010d4 }, + { "80SSSSSS.SB", 1, 0x0021d975, 0x0000441e }, + { "81SSSSSS.SB", 1, 0x00221d93, 0x0000517f }, + { "83SSSSSS.SB", 1, 0x00226f12, 0x000043e3 }, + { "84SSSSSS.SB", 1, 0x0022b2f5, 0x00003baa }, + { "85SSSSSS.SB", 1, 0x0022ee9f, 0x00004470 }, + { "87SSSSSS.SB", 1, 0x0023330f, 0x00005113 }, + { "88SSSSSS.SB", 1, 0x00238422, 0x00005275 }, + { "89SSSSSS.SB", 1, 0x0023d697, 0x00001a69 }, + { "93SSSSSS.SB", 1, 0x0023f100, 0x00000470 }, + { "94SSSSSS.SB", 1, 0x0023f570, 0x000051e4 }, + { "95SSSSSS.SB", 1, 0x00244754, 0x0000343b }, + { "96SSSSSS.SB", 1, 0x00247b8f, 0x00005110 }, + { "97SSSSSS.SB", 1, 0x0024cc9f, 0x00004972 }, + { "AMAZON.ACT", 1, 0x00251611, 0x0000a97a }, + { "AND1.DOG", 1, 0x0025bf8b, 0x000009ca }, + { "ANDERSON.ACT", 1, 0x0025c955, 0x00007c0a }, + { "ANDSON2.ACT", 1, 0x0026455f, 0x00007c0a }, + { "ANDSON_E.ACT", 1, 0x0026c169, 0x00003c42 }, + { "APE.ACT", 1, 0x0026fdab, 0x000084cd }, + { "APE.DOG", 1, 0x00278278, 0x000011d4 }, + { "APE2.DOG", 1, 0x0027944c, 0x000008da }, + { "APE3.DOG", 1, 0x00279d26, 0x00000788 }, + { "AQ.RL", 1, 0x0027a4ae, 0x00063f3a }, + { "AQ8.RL", 1, 0x002de3e8, 0x000167f8 }, + { "AQB2.MUS", 1, 0x002f4be0, 0x00039972 }, + { "AQBANK.MUS", 1, 0x0032e552, 0x0004fe89 }, + { "AQBANK.RL", 1, 0x0037e3db, 0x000059e9 }, + { "AZURA_E.ACT", 1, 0x00383dc4, 0x0000425a }, + { "AZURA_H.ACT", 1, 0x0038801e, 0x00008a7a }, + { "AZURA_H.BBK", 1, 0x00390a98, 0x0001a712 }, + { "AZURA_H.PCX", 1, 0x003ab1aa, 0x0000accb }, + { "B1.BBK", 1, 0x003b5e75, 0x000051fb }, + { "B1.LUM", 1, 0x003bb070, 0x00000018 }, + { "B1.MSK", 1, 0x003bb088, 0x00001f40 }, + { "B1.PCX", 1, 0x003bcfc8, 0x000162a8 }, + { "B2.BBK", 1, 0x003d3270, 0x000034b1 }, + { "B2.LUM", 1, 0x003d6721, 0x00000018 }, + { "B2.MSK", 1, 0x003d6739, 0x00001f40 }, + { "B2.PCX", 1, 0x003d8679, 0x0000a521 }, + { "BAT.SAM", 1, 0x003e2b9a, 0x00009d9a }, + { "BEETLE.ACT", 1, 0x003ec934, 0x00001e42 }, + { "BIGAM.ACT", 1, 0x003ee776, 0x00002d12 }, + { "BLANK000.SB", 1, 0x003f1488, 0x00000076 }, + { "BLUEP.CUT", 1, 0x003f14fe, 0x00000148 }, + { "BOB1.DOG", 1, 0x003f1646, 0x000010bc }, + { "BOB2.DOG", 1, 0x003f2702, 0x00000e5a }, + { "BOB3.DOG", 1, 0x003f355c, 0x00000df8 }, + { "BOB4.DOG", 1, 0x003f4354, 0x00000dea }, + { "BOB5.DOG", 1, 0x003f513e, 0x00000bf0 }, + { "BUD.ACT", 1, 0x003f5d2e, 0x00006582 }, + { "BUD1.DOG", 1, 0x003fc2b0, 0x0000129c }, + { "BUD2.DOG", 1, 0x003fd54c, 0x00000c0e }, + { "C1.BBK", 1, 0x003fe15a, 0x000026fd }, + { "C1.LUM", 1, 0x00400857, 0x00000018 }, + { "C1.MSK", 1, 0x0040086f, 0x00001f40 }, + { "C1.PCX", 1, 0x004027af, 0x00004888 }, + { "C10.BBK", 1, 0x00407037, 0x0003949f }, + { "C10.PCX", 1, 0x004404d6, 0x0000e6fd }, + { "C100A.CUT", 1, 0x0044ebd3, 0x000003be }, + { "C100B.CUT", 1, 0x0044ef91, 0x00000346 }, + { "C100C.CUT", 1, 0x0044f2d7, 0x0000019a }, + { "C100D.CUT", 1, 0x0044f471, 0x00000774 }, + { "C101A.CUT", 1, 0x0044fbe5, 0x0000021a }, + { "C101B.CUT", 1, 0x0044fdff, 0x000000e6 }, + { "C101C.CUT", 1, 0x0044fee5, 0x00000200 }, + { "C101D.CUT", 1, 0x004500e5, 0x00000144 }, + { "C101E.CUT", 1, 0x00450229, 0x00000144 }, + { "C102A.CUT", 1, 0x0045036d, 0x0000040e }, + { "C102B.CUT", 1, 0x0045077b, 0x0000040e }, + { "C102C.CUT", 1, 0x00450b89, 0x0000047e }, + { "C102D.CUT", 1, 0x00451007, 0x000003b8 }, + { "C102E.CUT", 1, 0x004513bf, 0x0000037e }, + { "C103A.CUT", 1, 0x0045173d, 0x000000b4 }, + { "C103B.CUT", 1, 0x004517f1, 0x00000104 }, + { "C103C.CUT", 1, 0x004518f5, 0x00000090 }, + { "C103D.CUT", 1, 0x00451985, 0x00000070 }, + { "C103E.CUT", 1, 0x004519f5, 0x000000da }, + { "C103F.CUT", 1, 0x00451acf, 0x0000084a }, + { "C103G.CUT", 1, 0x00452319, 0x0000068e }, + { "C103H.CUT", 1, 0x004529a7, 0x000003be }, + { "C103I.CUT", 1, 0x00452d65, 0x000001f2 }, + { "C103J.CUT", 1, 0x00452f57, 0x0000041c }, + { "C103K.CUT", 1, 0x00453373, 0x0000016a }, + { "C103L.CUT", 1, 0x004534dd, 0x00000458 }, + { "C11.BBK", 1, 0x00453935, 0x0000bf94 }, + { "C11.PCX", 1, 0x0045f8c9, 0x0000c01a }, + { "C11A.CUT", 1, 0x0046b8e3, 0x00000346 }, + { "C12A.CUT", 1, 0x0046bc29, 0x000004d0 }, + { "C13A.CUT", 1, 0x0046c0f9, 0x00000164 }, + { "C13B.CUT", 1, 0x0046c25d, 0x0000016c }, + { "C13C.CUT", 1, 0x0046c3c9, 0x000001fa }, + { "C13D.CUT", 1, 0x0046c5c3, 0x00000174 }, + { "C13E.CUT", 1, 0x0046c737, 0x000001d0 }, + { "C13F.CUT", 1, 0x0046c907, 0x000002d6 }, + { "C13G.CUT", 1, 0x0046cbdd, 0x00000152 }, + { "C13H.CUT", 1, 0x0046cd2f, 0x00000116 }, + { "C13I.CUT", 1, 0x0046ce45, 0x00000080 }, + { "C13J.CUT", 1, 0x0046cec5, 0x00000272 }, + { "C13K.CUT", 1, 0x0046d137, 0x00000192 }, + { "C13L.CUT", 1, 0x0046d2c9, 0x000001dc }, + { "C13M.CUT", 1, 0x0046d4a5, 0x00000468 }, + { "C13N.CUT", 1, 0x0046d90d, 0x0000015e }, + { "C14A.CUT", 1, 0x0046da6b, 0x000002fe }, + { "C14B.CUT", 1, 0x0046dd69, 0x00000126 }, + { "C14C.CUT", 1, 0x0046de8f, 0x00000150 }, + { "C14D.CUT", 1, 0x0046dfdf, 0x00000108 }, + { "C15A.CUT", 1, 0x0046e0e7, 0x00000264 }, + { "C15B.CUT", 1, 0x0046e34b, 0x00000136 }, + { "C15C.CUT", 1, 0x0046e481, 0x00000380 }, + { "C15D.CUT", 1, 0x0046e801, 0x000002d2 }, + { "C15E.CUT", 1, 0x0046ead3, 0x000000f4 }, + { "C16A.CUT", 1, 0x0046ebc7, 0x000005d6 }, + { "C16B.CUT", 1, 0x0046f19d, 0x0000057e }, + { "C17A.CUT", 1, 0x0046f71b, 0x00000156 }, + { "C18A.CUT", 1, 0x0046f871, 0x00000a60 }, + { "C18B.CUT", 1, 0x004702d1, 0x000012b8 }, + { "C18C.CUT", 1, 0x00471589, 0x00001202 }, + { "C18D.CUT", 1, 0x0047278b, 0x000009fa }, + { "C18E.CUT", 1, 0x00473185, 0x000009e4 }, + { "C19A.CUT", 1, 0x00473b69, 0x00001076 }, + { "C19B.CUT", 1, 0x00474bdf, 0x0000015c }, + { "C1A.CUT", 1, 0x00474d3b, 0x0000034e }, + { "C2.BBK", 1, 0x00475089, 0x00005908 }, + { "C2.LUM", 1, 0x0047a991, 0x00000018 }, + { "C2.MSK", 1, 0x0047a9a9, 0x00001f40 }, + { "C2.PCX", 1, 0x0047c8e9, 0x00007f3a }, + { "C2.SAM", 1, 0x00484823, 0x000147ac }, + { "C20A.CUT", 1, 0x00498fcf, 0x00000500 }, + { "C20B.CUT", 1, 0x004994cf, 0x00000168 }, + { "C20C.CUT", 1, 0x00499637, 0x00000170 }, + { "C20D.CUT", 1, 0x004997a7, 0x00000388 }, + { "C20E.CUT", 1, 0x00499b2f, 0x00000394 }, + { "C20F.CUT", 1, 0x00499ec3, 0x0000073a }, + { "C20G.CUT", 1, 0x0049a5fd, 0x0000029c }, + { "C21A.CUT", 1, 0x0049a899, 0x000000da }, + { "C21B.CUT", 1, 0x0049a973, 0x000000ee }, + { "C21C.CUT", 1, 0x0049aa61, 0x0000025e }, + { "C21D.CUT", 1, 0x0049acbf, 0x000002ec }, + { "C21E.CUT", 1, 0x0049afab, 0x00000602 }, + { "C21F.CUT", 1, 0x0049b5ad, 0x000003e2 }, + { "C21G.CUT", 1, 0x0049b98f, 0x00000136 }, + { "C21H.CUT", 1, 0x0049bac5, 0x00000172 }, + { "C21I.CUT", 1, 0x0049bc37, 0x0000024c }, + { "C21J.CUT", 1, 0x0049be83, 0x00000122 }, + { "C21K.CUT", 1, 0x0049bfa5, 0x00000584 }, + { "C21L.CUT", 1, 0x0049c529, 0x00000522 }, + { "C21M.CUT", 1, 0x0049ca4b, 0x000001ea }, + { "C21N.CUT", 1, 0x0049cc35, 0x00000610 }, + { "C21O.CUT", 1, 0x0049d245, 0x000000f4 }, + { "C21P.CUT", 1, 0x0049d339, 0x00000150 }, + { "C21Q.CUT", 1, 0x0049d489, 0x000002ec }, + { "C21R.CUT", 1, 0x0049d775, 0x00000106 }, + { "C21S.CUT", 1, 0x0049d87b, 0x0000012a }, + { "C21T.CUT", 1, 0x0049d9a5, 0x0000015e }, + { "C21U.CUT", 1, 0x0049db03, 0x000000c6 }, + { "C22A.CUT", 1, 0x0049dbc9, 0x00000156 }, + { "C22B.CUT", 1, 0x0049dd1f, 0x000000fc }, + { "C22C.CUT", 1, 0x0049de1b, 0x00000166 }, + { "C24A.CUT", 1, 0x0049df81, 0x000000ec }, + { "C24B.CUT", 1, 0x0049e06d, 0x000005ca }, + { "C25A.CUT", 1, 0x0049e637, 0x000002d0 }, + { "C25B.CUT", 1, 0x0049e907, 0x000002e4 }, + { "C25C.CUT", 1, 0x0049ebeb, 0x0000023e }, + { "C25D.CUT", 1, 0x0049ee29, 0x00000182 }, + { "C25E.CUT", 1, 0x0049efab, 0x00000126 }, + { "C25F.CUT", 1, 0x0049f0d1, 0x0000017c }, + { "C25G.CUT", 1, 0x0049f24d, 0x000001e2 }, + { "C25H.CUT", 1, 0x0049f42f, 0x00000218 }, + { "C25I.CUT", 1, 0x0049f647, 0x000001da }, + { "C26A.CUT", 1, 0x0049f821, 0x0000030e }, + { "C26B.CUT", 1, 0x0049fb2f, 0x000000be }, + { "C26C.CUT", 1, 0x0049fbed, 0x000001a4 }, + { "C2A.CUT", 1, 0x0049fd91, 0x000008d0 }, + { "C2B.CUT", 1, 0x004a0661, 0x000004b8 }, + { "C2C.CUT", 1, 0x004a0b19, 0x0000023e }, + { "C3.BBK", 1, 0x004a0d57, 0x00006875 }, + { "C3.LUM", 1, 0x004a75cc, 0x00000018 }, + { "C3.MSK", 1, 0x004a75e4, 0x00001f40 }, + { "C3.PCX", 1, 0x004a9524, 0x0000c40c }, + { "C3.SAM", 1, 0x004b5930, 0x00011c72 }, + { "C30A.CUT", 1, 0x004c75a2, 0x00000254 }, + { "C30B.CUT", 1, 0x004c77f6, 0x000003c4 }, + { "C30C.CUT", 1, 0x004c7bba, 0x00000722 }, + { "C30D.CUT", 1, 0x004c82dc, 0x00000206 }, + { "C30E.CUT", 1, 0x004c84e2, 0x00000976 }, + { "C30F.CUT", 1, 0x004c8e58, 0x0000010e }, + { "C30G.CUT", 1, 0x004c8f66, 0x000001e6 }, + { "C30H.CUT", 1, 0x004c914c, 0x0000014c }, + { "C31A.CUT", 1, 0x004c9298, 0x0000020c }, + { "C31B.CUT", 1, 0x004c94a4, 0x00000596 }, + { "C31C.CUT", 1, 0x004c9a3a, 0x000000e2 }, + { "C31D.CUT", 1, 0x004c9b1c, 0x000004e4 }, + { "C31E.CUT", 1, 0x004ca000, 0x000000ee }, + { "C31F.CUT", 1, 0x004ca0ee, 0x0000010e }, + { "C32A.CUT", 1, 0x004ca1fc, 0x000000ac }, + { "C32B.CUT", 1, 0x004ca2a8, 0x0000010c }, + { "C32C.CUT", 1, 0x004ca3b4, 0x000000e8 }, + { "C35A.CUT", 1, 0x004ca49c, 0x0000042a }, + { "C35B.CUT", 1, 0x004ca8c6, 0x000001c0 }, + { "C36A.CUT", 1, 0x004caa86, 0x0000078c }, + { "C39A.CUT", 1, 0x004cb212, 0x00000ed4 }, + { "C3A.CUT", 1, 0x004cc0e6, 0x00000610 }, + { "C3B.CUT", 1, 0x004cc6f6, 0x000000a0 }, + { "C3C.CUT", 1, 0x004cc796, 0x000005d8 }, + { "C3D.CUT", 1, 0x004ccd6e, 0x00000344 }, + { "C3E.CUT", 1, 0x004cd0b2, 0x0000013a }, + { "C3F.CUT", 1, 0x004cd1ec, 0x000000e0 }, + { "C3G.CUT", 1, 0x004cd2cc, 0x00000102 }, + { "C3H.CUT", 1, 0x004cd3ce, 0x00000120 }, + { "C4.BBK", 1, 0x004cd4ee, 0x00009420 }, + { "C4.LUM", 1, 0x004d690e, 0x00000018 }, + { "C4.MSK", 1, 0x004d6926, 0x00001f40 }, + { "C4.PCX", 1, 0x004d8866, 0x00009487 }, + { "C4.SAM", 1, 0x004e1ced, 0x00002754 }, + { "C40A.CUT", 1, 0x004e4441, 0x0000094a }, + { "C40B.CUT", 1, 0x004e4d8b, 0x000002c2 }, + { "C41A.CUT", 1, 0x004e504d, 0x00000b84 }, + { "C41B.CUT", 1, 0x004e5bd1, 0x00001ba0 }, + { "C41C.CUT", 1, 0x004e7771, 0x00000170 }, + { "C41D.CUT", 1, 0x004e78e1, 0x0000025c }, + { "C41E.CUT", 1, 0x004e7b3d, 0x000001b8 }, + { "C41F.CUT", 1, 0x004e7cf5, 0x0000009c }, + { "C41G.CUT", 1, 0x004e7d91, 0x000000fe }, + { "C41H.CUT", 1, 0x004e7e8f, 0x000000ba }, + { "C42A.CUT", 1, 0x004e7f49, 0x000003ce }, + { "C42B.CUT", 1, 0x004e8317, 0x00000802 }, + { "C42C.CUT", 1, 0x004e8b19, 0x000001ae }, + { "C42D.CUT", 1, 0x004e8cc7, 0x0000010e }, + { "C42E.CUT", 1, 0x004e8dd5, 0x00000106 }, + { "C42F.CUT", 1, 0x004e8edb, 0x00000166 }, + { "C44A.CUT", 1, 0x004e9041, 0x000004f8 }, + { "C44B.CUT", 1, 0x004e9539, 0x0000079e }, + { "C44C.CUT", 1, 0x004e9cd7, 0x0000030a }, + { "C45A.CUT", 1, 0x004e9fe1, 0x000000f8 }, + { "C45B.CUT", 1, 0x004ea0d9, 0x000000f8 }, + { "C45C.CUT", 1, 0x004ea1d1, 0x000000f8 }, + { "C45D.CUT", 1, 0x004ea2c9, 0x000000f8 }, + { "C45E.CUT", 1, 0x004ea3c1, 0x00000186 }, + { "C46A.CUT", 1, 0x004ea547, 0x000000f8 }, + { "C46B.CUT", 1, 0x004ea63f, 0x000000f8 }, + { "C46C.CUT", 1, 0x004ea737, 0x000000f8 }, + { "C46D.CUT", 1, 0x004ea82f, 0x000000f8 }, + { "C47A.CUT", 1, 0x004ea927, 0x00000640 }, + { "C48A.CUT", 1, 0x004eaf67, 0x00000656 }, + { "C48C.CUT", 1, 0x004eb5bd, 0x00000516 }, + { "C49B.CUT", 1, 0x004ebad3, 0x00000398 }, + { "C49C.CUT", 1, 0x004ebe6b, 0x00000132 }, + { "C49D.CUT", 1, 0x004ebf9d, 0x000004e4 }, + { "C4A.CUT", 1, 0x004ec481, 0x00000094 }, + { "C4B.CUT", 1, 0x004ec515, 0x000003f4 }, + { "C5.BBK", 1, 0x004ec909, 0x00004171 }, + { "C5.LUM", 1, 0x004f0a7a, 0x00000018 }, + { "C5.MSK", 1, 0x004f0a92, 0x00001f40 }, + { "C5.PCX", 1, 0x004f29d2, 0x000099f2 }, + { "C5.SAM", 1, 0x004fc3c4, 0x00003016 }, + { "C50A.CUT", 1, 0x004ff3da, 0x000004f2 }, + { "C50B.CUT", 1, 0x004ff8cc, 0x000001f8 }, + { "C50C.CUT", 1, 0x004ffac4, 0x0000086e }, + { "C50D.CUT", 1, 0x00500332, 0x000000e2 }, + { "C50E.CUT", 1, 0x00500414, 0x00000618 }, + { "C50F.CUT", 1, 0x00500a2c, 0x000003b8 }, + { "C50G.CUT", 1, 0x00500de4, 0x000008da }, + { "C50H.CUT", 1, 0x005016be, 0x000000ba }, + { "C50I.CUT", 1, 0x00501778, 0x000009d4 }, + { "C50J.CUT", 1, 0x0050214c, 0x000000f2 }, + { "C51A.CUT", 1, 0x0050223e, 0x0000080e }, + { "C51B.CUT", 1, 0x00502a4c, 0x000001d8 }, + { "C51C.CUT", 1, 0x00502c24, 0x000001d8 }, + { "C51D.CUT", 1, 0x00502dfc, 0x000000ec }, + { "C53A.CUT", 1, 0x00502ee8, 0x00000566 }, + { "C53B.CUT", 1, 0x0050344e, 0x0000018a }, + { "C54A.CUT", 1, 0x005035d8, 0x0000028c }, + { "C55A.CUT", 1, 0x00503864, 0x000006c8 }, + { "C56A.CUT", 1, 0x00503f2c, 0x000003ba }, + { "C56B.CUT", 1, 0x005042e6, 0x00000678 }, + { "C58A.CUT", 1, 0x0050495e, 0x000001cc }, + { "C59A.CUT", 1, 0x00504b2a, 0x0000014a }, + { "C5A.CUT", 1, 0x00504c74, 0x0000040c }, + { "C5C.CUT", 1, 0x00505080, 0x0000050c }, + { "C6.BBK", 1, 0x0050558c, 0x0000711b }, + { "C6.LUM", 1, 0x0050c6a7, 0x00000018 }, + { "C6.MSK", 1, 0x0050c6bf, 0x00001f40 }, + { "C6.PCX", 1, 0x0050e5ff, 0x0000c6c0 }, + { "C6.SAM", 1, 0x0051acbf, 0x00004a87 }, + { "C60A.CUT", 1, 0x0051f746, 0x00000170 }, + { "C61A.CUT", 1, 0x0051f8b6, 0x00000170 }, + { "C62A.CUT", 1, 0x0051fa26, 0x00000dde }, + { "C62B.CUT", 1, 0x00520804, 0x00000268 }, + { "C62C.CUT", 1, 0x00520a6c, 0x00000164 }, + { "C62D.CUT", 1, 0x00520bd0, 0x000002a2 }, + { "C63A.CUT", 1, 0x00520e72, 0x000002d0 }, + { "C63B.CUT", 1, 0x00521142, 0x0000098e }, + { "C63C.CUT", 1, 0x00521ad0, 0x000005d8 }, + { "C63D.CUT", 1, 0x005220a8, 0x00000194 }, + { "C63E.CUT", 1, 0x0052223c, 0x00000336 }, + { "C63F.CUT", 1, 0x00522572, 0x0000041a }, + { "C63G.CUT", 1, 0x0052298c, 0x00000170 }, + { "C63H.CUT", 1, 0x00522afc, 0x0000039a }, + { "C63I.CUT", 1, 0x00522e96, 0x000003ac }, + { "C63J.CUT", 1, 0x00523242, 0x000002f0 }, + { "C63K.CUT", 1, 0x00523532, 0x00000634 }, + { "C64A.CUT", 1, 0x00523b66, 0x00000128 }, + { "C66A.CUT", 1, 0x00523c8e, 0x000002e8 }, + { "C67A.CUT", 1, 0x00523f76, 0x000005b6 }, + { "C67B.CUT", 1, 0x0052452c, 0x0000054c }, + { "C69A.CUT", 1, 0x00524a78, 0x00000700 }, + { "C69B.CUT", 1, 0x00525178, 0x00000670 }, + { "C69C.CUT", 1, 0x005257e8, 0x00000688 }, + { "C69D.CUT", 1, 0x00525e70, 0x000006ac }, + { "C69E.CUT", 1, 0x0052651c, 0x000009cc }, + { "C69F.CUT", 1, 0x00526ee8, 0x00000aa2 }, + { "C69G.CUT", 1, 0x0052798a, 0x000019ac }, + { "C69H.CUT", 1, 0x00529336, 0x0000075a }, + { "C69I.CUT", 1, 0x00529a90, 0x000003f0 }, + { "C69J.CUT", 1, 0x00529e80, 0x0000008a }, + { "C69K.CUT", 1, 0x00529f0a, 0x000005c8 }, + { "C69L.CUT", 1, 0x0052a4d2, 0x0000062a }, + { "C69M.CUT", 1, 0x0052aafc, 0x000005ba }, + { "C69N.CUT", 1, 0x0052b0b6, 0x0000012c }, + { "C69O.CUT", 1, 0x0052b1e2, 0x000001e4 }, + { "C69Z.CUT", 1, 0x0052b3c6, 0x000017a4 }, + { "C6A.CUT", 1, 0x0052cb6a, 0x00000220 }, + { "C6B.CUT", 1, 0x0052cd8a, 0x000000da }, + { "C6C.CUT", 1, 0x0052ce64, 0x00000138 }, + { "C7.BBK", 1, 0x0052cf9c, 0x00013c13 }, + { "C7.PCX", 1, 0x00540baf, 0x0000a75d }, + { "C70A.CUT", 1, 0x0054b30c, 0x000002b8 }, + { "C70B.CUT", 1, 0x0054b5c4, 0x00000384 }, + { "C70B.SAM", 1, 0x0054b948, 0x00009a4e }, + { "C70C.CUT", 1, 0x00555396, 0x00000292 }, + { "C70D.CUT", 1, 0x00555628, 0x00000952 }, + { "C70E.CUT", 1, 0x00555f7a, 0x0000038c }, + { "C70F.CUT", 1, 0x00556306, 0x0000034c }, + { "C70F.SAM", 1, 0x00556652, 0x000076bf }, + { "C70G.CUT", 1, 0x0055dd11, 0x00000348 }, + { "C70G.SAM", 1, 0x0055e059, 0x00008d7d }, + { "C70H.CUT", 1, 0x00566dd6, 0x00000322 }, + { "C70I.CUT", 1, 0x005670f8, 0x000003d8 }, + { "C70J.CUT", 1, 0x005674d0, 0x00000184 }, + { "C70K.CUT", 1, 0x00567654, 0x000002c0 }, + { "C70L.CUT", 1, 0x00567914, 0x000002c0 }, + { "C70M.CUT", 1, 0x00567bd4, 0x000002ba }, + { "C70N.CUT", 1, 0x00567e8e, 0x000002ba }, + { "C71A.CUT", 1, 0x00568148, 0x00000094 }, + { "C71B.CUT", 1, 0x005681dc, 0x00000094 }, + { "C71C.CUT", 1, 0x00568270, 0x000000b2 }, + { "C72A.CUT", 1, 0x00568322, 0x00000730 }, + { "C72B.CUT", 1, 0x00568a52, 0x00000632 }, + { "C72C.CUT", 1, 0x00569084, 0x0000007c }, + { "C73A.CUT", 1, 0x00569100, 0x0000038a }, + { "C73B.CUT", 1, 0x0056948a, 0x000002b8 }, + { "C73C.CUT", 1, 0x00569742, 0x00000192 }, + { "C73D.CUT", 1, 0x005698d4, 0x000000c8 }, + { "C73E.CUT", 1, 0x0056999c, 0x00000330 }, + { "C73F.CUT", 1, 0x00569ccc, 0x00000344 }, + { "C73G.CUT", 1, 0x0056a010, 0x00000210 }, + { "C74A.CUT", 1, 0x0056a220, 0x0000075e }, + { "C74B.CUT", 1, 0x0056a97e, 0x0000018c }, + { "C74C.CUT", 1, 0x0056ab0a, 0x000001dc }, + { "C74D.CUT", 1, 0x0056ace6, 0x0000018c }, + { "C74F.CUT", 1, 0x0056ae72, 0x000000e0 }, + { "C75B.CUT", 1, 0x0056af52, 0x00000d00 }, + { "C76A.CUT", 1, 0x0056bc52, 0x00000072 }, + { "C76B.CUT", 1, 0x0056bcc4, 0x00000f28 }, + { "C8.BBK", 1, 0x0056cbec, 0x0000b5ce }, + { "C8.PCX", 1, 0x005781ba, 0x0000c31f }, + { "C8A.CUT", 1, 0x005844d9, 0x000007e4 }, + { "C8B.CUT", 1, 0x00584cbd, 0x000002a8 }, + { "C9.BBK", 1, 0x00584f65, 0x0000f68b }, + { "C9.PCX", 1, 0x005945f0, 0x0000a787 }, + { "C97A.CUT", 1, 0x0059ed77, 0x0000017e }, + { "C97B.CUT", 1, 0x0059eef5, 0x0000013c }, + { "C99D.CUT", 1, 0x0059f031, 0x00000094 }, + { "C99E.CUT", 1, 0x0059f0c5, 0x000002e6 }, + { "C99F.CUT", 1, 0x0059f3ab, 0x000002e6 }, + { "C9A.CUT", 1, 0x0059f691, 0x000001fa }, + { "C9B.CUT", 1, 0x0059f88b, 0x000000f8 }, + { "C9C.CUT", 1, 0x0059f983, 0x00000136 }, + { "C9D.CUT", 1, 0x0059fab9, 0x000000a0 }, + { "CDCLO.CUT", 1, 0x0059fb59, 0x000001f6 }, + { "CDINT.CUT", 1, 0x0059fd4f, 0x000017fe }, + { "CDINT061.SB", 1, 0x005a154d, 0x0000334c }, + { "CDINT063.SB", 1, 0x005a4899, 0x0000798b }, + { "CDINT072.SB", 1, 0x005ac224, 0x00005f03 }, + { "CDINT081.SB", 1, 0x005b2127, 0x000062b3 }, + { "CDINT091.SB", 1, 0x005b83da, 0x00008a0e }, + { "CDINT102.SB", 1, 0x005c0de8, 0x0000673a }, + { "CDINT111.SB", 1, 0x005c7522, 0x00008453 }, + { "CDINT141.SB", 1, 0x005cf975, 0x000031be }, + { "CDINT151.SB", 1, 0x005d2b33, 0x00002a7c }, + { "CDINT191.SB", 1, 0x005d55af, 0x00001fc8 }, + { "CDINT201.SB", 1, 0x005d7577, 0x00002cd8 }, + { "CDINT212.SB", 1, 0x005da24f, 0x00004b03 }, + { "CDINT231.SB", 1, 0x005ded52, 0x00008dc0 }, + { "CDINT241.SB", 1, 0x005e7b12, 0x000032cf }, + { "CDINT281.SB", 1, 0x005eade1, 0x000053a6 }, + { "CDINT291.SB", 1, 0x005f0187, 0x00002138 }, + { "CDINT301.SB", 1, 0x005f22bf, 0x00003dae }, + { "CDINT321.SB", 1, 0x005f606d, 0x00007e92 }, + { "CDINT351.SB", 1, 0x005fdeff, 0x00002000 }, + { "CDINT361.SB", 1, 0x005ffeff, 0x00005a8b }, + { "CDINT381.SB", 1, 0x0060598a, 0x00003882 }, + { "CDINT442.SB", 1, 0x0060920c, 0x0000471b }, + { "CDINT451.SB", 1, 0x0060d927, 0x00005929 }, + { "CDINT452.SB", 1, 0x00613250, 0x00007915 }, + { "CDINT461.SB", 1, 0x0061ab65, 0x00001c6a }, + { "CDINT463.SB", 1, 0x0061c7cf, 0x000030ae }, + { "CDINT464.SB", 1, 0x0061f87d, 0x0000c980 }, + { "CDINT471.SB", 1, 0x0062c1fd, 0x00003593 }, + { "CDINT481.SB", 1, 0x0062f790, 0x00004e60 }, + { "CDINT492.SB", 1, 0x006345f0, 0x00004594 }, + { "CDRES.CUT", 1, 0x00638b84, 0x000001f6 }, + { "CHANGE.SAM", 1, 0x00638d7a, 0x00005ef2 }, + { "CHEF.ACT", 1, 0x0063ec6c, 0x00005362 }, + { "CHEF.DOG", 1, 0x00643fce, 0x00000af0 }, + { "CHIEF1.DOG", 1, 0x00644abe, 0x000009ca }, + { "CHIEF2.DOG", 1, 0x00645488, 0x0000121e }, + { "CHIEF3.DOG", 1, 0x006466a6, 0x00000be4 }, + { "CHIEF4.DOG", 1, 0x0064728a, 0x000002c4 }, + { "CHORN.CUT", 1, 0x0064754e, 0x0000034a }, + { "CINTR.CUT", 1, 0x00647898, 0x00001768 }, + { "CLOGO.CUT", 1, 0x00649000, 0x000000aa }, + { "CMASK.CUT", 1, 0x006490aa, 0x00000386 }, + { "COCON.CUT", 1, 0x00649430, 0x000003d8 }, + { "COCONUT.SAM", 1, 0x00649808, 0x0000a047 }, + { "COMIC.CUT", 1, 0x0065384f, 0x0000094e }, + { "COMPY.ACT", 1, 0x0065419d, 0x00005533 }, + { "CONTROL.BBK", 1, 0x006596d0, 0x00000e0e }, + { "COPY.BBK", 1, 0x0065a4de, 0x00000002 }, + { "COPY.CUT", 1, 0x0065a4e0, 0x00000086 }, + { "COPY.LBM", 1, 0x0065a566, 0x000053ca }, + { "COPY.PCX", 1, 0x0065f930, 0x0000646f }, + { "CRAP.PCX", 1, 0x00665d9f, 0x0000724c }, + { "CRED.CUT", 1, 0x0066cfeb, 0x000003ae }, + { "CREDIT1.CRD", 1, 0x0066d399, 0x00000604 }, + { "CREDIT2.CRD", 1, 0x0066d99d, 0x000010d3 }, + { "CROWBAR.SAM", 1, 0x0066ea70, 0x00009aca }, + { "CUDRS.CUT", 1, 0x0067853a, 0x000001f6 }, + { "D1.BBK", 1, 0x00678730, 0x000061b7 }, + { "D1.LUM", 1, 0x0067e8e7, 0x00000018 }, + { "D1.MSK", 1, 0x0067e8ff, 0x00001f40 }, + { "D1.PCX", 1, 0x0068083f, 0x0000a331 }, + { "D1C.SAM", 1, 0x0068ab70, 0x0000ddd7 }, + { "D2.BBK", 1, 0x00698947, 0x00004630 }, + { "D2.LUM", 1, 0x0069cf77, 0x00000018 }, + { "D2.MSK", 1, 0x0069cf8f, 0x00001f40 }, + { "D2.PCX", 1, 0x0069eecf, 0x00008dc3 }, + { "D3.BBK", 1, 0x006a7c92, 0x00004b34 }, + { "D3.LUM", 1, 0x006ac7c6, 0x00000018 }, + { "D3.MSK", 1, 0x006ac7de, 0x00001f40 }, + { "D3.PCX", 1, 0x006ae71e, 0x0000a662 }, + { "D3.SAM", 1, 0x006b8d80, 0x0000c55a }, + { "D4.BBK", 1, 0x006c52da, 0x00013e0d }, + { "D4.LUM", 1, 0x006d90e7, 0x00000018 }, + { "D4.MSK", 1, 0x006d90ff, 0x00001f40 }, + { "D4.PCX", 1, 0x006db03f, 0x0000a69b }, + { "D5.BBK", 1, 0x006e56da, 0x000088a1 }, + { "D5.PCX", 1, 0x006edf7b, 0x00007bc5 }, + { "D5.SAM", 1, 0x006f5b40, 0x00002ee7 }, + { "D5B.SAM", 1, 0x006f8a27, 0x0001128e }, + { "D6.BBK", 1, 0x00709cb5, 0x0000a480 }, + { "D6.LUM", 1, 0x00714135, 0x00000018 }, + { "D6.MSK", 1, 0x0071414d, 0x00001f40 }, + { "D6.PCX", 1, 0x0071608d, 0x000099a6 }, + { "D9.BBK", 1, 0x0071fa33, 0x00008461 }, + { "D9.PCX", 1, 0x00727e94, 0x0000b551 }, + { "DATA", 1, 0x007333e5, 0x00001434 }, + { "DEATH.ACT", 1, 0x00734819, 0x0000d83a }, + { "DEATH1.DOG", 1, 0x00742053, 0x000017ca }, + { "DEATH2.DOG", 1, 0x0074381d, 0x0000081e }, + { "DEINO.ACT", 1, 0x0074403b, 0x0000e199 }, + { "DFRANK.ACT", 1, 0x007521d4, 0x000052e2 }, + { "DISK1.SAM", 1, 0x007574b6, 0x000033da }, + { "DOG.ACT", 1, 0x0075a890, 0x00002a62 }, + { "DOG.DOG", 1, 0x0075d2f2, 0x0000023a }, + { "E1.BBK", 1, 0x0075d52c, 0x0001765b }, + { "E1.PCX", 1, 0x00774b87, 0x0000dcc7 }, + { "E2.BBK", 1, 0x0078284e, 0x0000cefc }, + { "E2.PCX", 1, 0x0078f74a, 0x0000f5f2 }, + { "E3.BBK", 1, 0x0079ed3c, 0x00011042 }, + { "E3.PCX", 1, 0x007afd7e, 0x0000a4d0 }, + { "EQDATA.LHA", 1, 0x007ba24e, 0x00031a7a }, + { "F1.BBK", 1, 0x007ebcc8, 0x00004716 }, + { "F1.LUM", 1, 0x007f03de, 0x00000018 }, + { "F1.MSK", 1, 0x007f03f6, 0x00001f40 }, + { "F1.PCX", 1, 0x007f2336, 0x0000991d }, + { "F1.SAM", 1, 0x007fbc53, 0x0000fd04 }, + { "F1B.PCX", 1, 0x0080b957, 0x00005739 }, + { "F2.BBK", 1, 0x00811090, 0x00006a18 }, + { "F2.LUM", 1, 0x00817aa8, 0x00000018 }, + { "F2.MSK", 1, 0x00817ac0, 0x00001f40 }, + { "F2.PCX", 1, 0x00819a00, 0x00009f28 }, + { "F2B.PCX", 1, 0x00823928, 0x00004abb }, + { "F3.BBK", 1, 0x008283e3, 0x00002c59 }, + { "F3.LUM", 1, 0x0082b03c, 0x00000018 }, + { "F3.MSK", 1, 0x0082b054, 0x00001f40 }, + { "F3.PCX", 1, 0x0082cf94, 0x0000aa0c }, + { "F3.SAM", 1, 0x008379a0, 0x0000a940 }, + { "F4.BBK", 1, 0x008422e0, 0x0000b561 }, + { "F4.LUM", 1, 0x0084d841, 0x00000018 }, + { "F4.MSK", 1, 0x0084d859, 0x00001f40 }, + { "F4.PCX", 1, 0x0084f799, 0x00014df0 }, + { "F4B.PCX", 1, 0x00864589, 0x000117d8 }, + { "F4S.PCX", 1, 0x00875d61, 0x0000833e }, + { "FALL.SAM", 1, 0x0087e09f, 0x0000cbda }, + { "FAYE.ACT", 1, 0x0088ac79, 0x00013fda }, + { "FAYE2.DOG", 1, 0x0089ec53, 0x0000098e }, + { "FAYE3.DOG", 1, 0x0089f5e1, 0x000005d8 }, + { "FAYE4.DOG", 1, 0x0089fbb9, 0x00000c40 }, + { "FAYE5.CUT", 1, 0x008a07f9, 0x0000007a }, + { "FAYE5.DOG", 1, 0x008a0873, 0x000009ce }, + { "FAYE6.DOG", 1, 0x008a1241, 0x00000466 }, + { "FAYE_E.ACT", 1, 0x008a16a7, 0x00002d4a }, + { "FAYE_H.ACT", 1, 0x008a43f1, 0x0000807a }, + { "FAYE_H.BBK", 1, 0x008ac46b, 0x0000e9fb }, + { "FAYE_H.PCX", 1, 0x008bae66, 0x000096b5 }, + { "FRANK.ACT", 1, 0x008c451b, 0x00008342 }, + { "FRANK.DOG", 1, 0x008cc85d, 0x00000e48 }, + { "FRANK_H.ACT", 1, 0x008cd6a5, 0x0000ad60 }, + { "FRANK_H.BBK", 1, 0x008d8405, 0x00016369 }, + { "FRANK_H.PCX", 1, 0x008ee76e, 0x00008dd6 }, + { "GET_GEM.SAM", 1, 0x008f7544, 0x000099d2 }, + { "GET_HORN.BBK", 1, 0x00900f16, 0x000045d8 }, + { "GET_HORN.SAM", 1, 0x009054ee, 0x00005dde }, + { "GM.CUT", 1, 0x0090b2cc, 0x0000009c }, + { "GOONS.ACT", 1, 0x0090b368, 0x0000728a }, + { "GUARDS.ACT", 1, 0x009125f2, 0x0000504a }, + { "HENRY.ACT", 1, 0x0091763c, 0x0000b102 }, + { "HENRY.DOG", 1, 0x0092273e, 0x00001280 }, + { "HENRY2.DOG", 1, 0x009239be, 0x00000b24 }, + { "HORN.SAM", 1, 0x009244e2, 0x000067b2 }, + { "HUGH.ACT", 1, 0x0092ac94, 0x0000e8da }, + { "I1.SAM", 1, 0x0093956e, 0x0000cbf2 }, + { "IAN.ACT", 1, 0x00946160, 0x0000a542 }, + { "IAN1.DOG", 1, 0x009506a2, 0x00000518 }, + { "IAN2.DOG", 1, 0x00950bba, 0x00000a9a }, + { "J1.BBK", 1, 0x00951654, 0x000025fc }, + { "J1.LUM", 1, 0x00953c50, 0x00000018 }, + { "J1.MSK", 1, 0x00953c68, 0x00001f40 }, + { "J1.PCX", 1, 0x00955ba8, 0x00008d84 }, + { "J1.SAM", 1, 0x0095e92c, 0x00008442 }, + { "J2.BBK", 1, 0x00966d6e, 0x00000e97 }, + { "J2.LUM", 1, 0x00967c05, 0x00000018 }, + { "J2.MSK", 1, 0x00967c1d, 0x00001f40 }, + { "J2.PCX", 1, 0x00969b5d, 0x0000c33c }, + { "J2.SAM", 1, 0x00975e99, 0x0000a1e3 }, + { "J3.BBK", 1, 0x0098007c, 0x00003289 }, + { "J3.LUM", 1, 0x00983305, 0x00000018 }, + { "J3.MSK", 1, 0x0098331d, 0x00001f40 }, + { "J3.PCX", 1, 0x0098525d, 0x000094b4 }, + { "J4.BBK", 1, 0x0098e711, 0x00006e28 }, + { "J4.LUM", 1, 0x00995539, 0x00000018 }, + { "J4.MSK", 1, 0x00995551, 0x00001f40 }, + { "J4.PCX", 1, 0x00997491, 0x00008e90 }, + { "J5.BBK", 1, 0x009a0321, 0x00004521 }, + { "J5.LUM", 1, 0x009a4842, 0x00000018 }, + { "J5.MSK", 1, 0x009a485a, 0x00001f40 }, + { "J5.PCX", 1, 0x009a679a, 0x00009b37 }, + { "J5.SAM", 1, 0x009b02d1, 0x000042f2 }, + { "J6.BBK", 1, 0x009b45c3, 0x000043d7 }, + { "J6.LUM", 1, 0x009b899a, 0x00000018 }, + { "J6.MSK", 1, 0x009b89b2, 0x00001f40 }, + { "J6.PCX", 1, 0x009ba8f2, 0x0000a5c5 }, + { "J7.BBK", 1, 0x009c4eb7, 0x00003234 }, + { "J7.LUM", 1, 0x009c80eb, 0x00000018 }, + { "J7.MSK", 1, 0x009c8103, 0x00001f40 }, + { "J7.PCX", 1, 0x009ca043, 0x0000cd63 }, + { "J7.SAM", 1, 0x009d6da6, 0x000083aa }, + { "J8.BBK", 1, 0x009df150, 0x0000320d }, + { "J8.LUM", 1, 0x009e235d, 0x00000018 }, + { "J8.MSK", 1, 0x009e2375, 0x00001f40 }, + { "J8.PCX", 1, 0x009e42b5, 0x0000c0e2 }, + { "J8.SAM", 1, 0x009f0397, 0x0000024e }, + { "JASPAR.ACT", 1, 0x009f05e5, 0x00004fb2 }, + { "JIM1.DOG", 1, 0x009f5597, 0x00001276 }, + { "JIM2.DOG", 1, 0x009f680d, 0x00001282 }, + { "JIM3.DOG", 1, 0x009f7a8f, 0x00000df6 }, + { "JIMTAM.ACT", 1, 0x009f8885, 0x0000a08a }, + { "JOE.BBK", 1, 0x00a0290f, 0x00014b8a }, + { "JOE1.BBK", 1, 0x00a17499, 0x00012a5a }, + { "JOED_A.BBK", 1, 0x00a29ef3, 0x00009b8a }, + { "JOED_B.BBK", 1, 0x00a33a7d, 0x0000a50a }, + { "JOEU_A.BBK", 1, 0x00a3df87, 0x00009b8a }, + { "JOEU_B.BBK", 1, 0x00a47b11, 0x0000a50a }, + { "JOE_A.BBK", 1, 0x00a5201b, 0x00009b8a }, + { "JOE_B.BBK", 1, 0x00a5bba5, 0x0000dc5a }, + { "JOE_E.ACT", 1, 0x00a697ff, 0x0000388a }, + { "JOE_H.ACT", 1, 0x00a6d089, 0x0000dace }, + { "JOHN.ACT", 1, 0x00a7ab57, 0x00006312 }, + { "JOHN1.DOG", 1, 0x00a80e69, 0x0000067c }, + { "JOURNAL.BBK", 1, 0x00a814e5, 0x0000a318 }, + { "JOURNAL.PCX", 1, 0x00a8b7fd, 0x00009c70 }, + { "KISS1.SAM", 1, 0x00a9546d, 0x0000f722 }, + { "KLUNK.ACT", 1, 0x00aa4b8f, 0x00007c30 }, + { "KLUNK1.DOG", 1, 0x00aac7bf, 0x00000e6a }, + { "KLUNK2.DOG", 1, 0x00aad629, 0x00000ed0 }, + { "KLUNK2.SAM", 1, 0x00aae4f9, 0x0001737c }, + { "L1.BBK", 1, 0x00ac5875, 0x00000002 }, + { "L1.PCX", 1, 0x00ac5877, 0x000043f7 }, + { "L2.BBK", 1, 0x00ac9c6e, 0x00000002 }, + { "L2.PCX", 1, 0x00ac9c70, 0x0000ba60 }, + { "LARIS.ACT", 1, 0x00ad56d0, 0x0000355a }, + { "LARIS.DOG", 1, 0x00ad8c2a, 0x00000f32 }, + { "LARIS3.DOG", 1, 0x00ad9b5c, 0x0000079a }, + { "LITTLEP.ACT", 1, 0x00ada2f6, 0x000002e2 }, + { "LOLA.ACT", 1, 0x00ada5d8, 0x0001342d }, + { "LOLA1.DOG", 1, 0x00aeda05, 0x00000ad6 }, + { "LOU.ACT", 1, 0x00aee4db, 0x00005552 }, + { "LOU1.DOG", 1, 0x00af3a2d, 0x000010ac }, + { "LOU2.DOG", 1, 0x00af4ad9, 0x00000bae }, + { "M1.BBK", 1, 0x00af5687, 0x00006d5c }, + { "M1.PCX", 1, 0x00afc3e3, 0x000193ce }, + { "M2.BBK", 1, 0x00b157b1, 0x00001a4a }, + { "M2.PCX", 1, 0x00b171fb, 0x0000a9d3 }, + { "M2.SAM", 1, 0x00b21bce, 0x0001433c }, + { "MAN1.DOG", 1, 0x00b35f0a, 0x0000101e }, + { "MAN2.DOG", 1, 0x00b36f28, 0x000007a4 }, + { "MASK.SAM", 1, 0x00b376cc, 0x000081ea }, + { "N1.BBK", 1, 0x00b3f8b6, 0x00002d74 }, + { "N1.LUM", 1, 0x00b4262a, 0x00000018 }, + { "N1.MSK", 1, 0x00b42642, 0x00001f40 }, + { "N1.PCX", 1, 0x00b44582, 0x0000cbe7 }, + { "N10.BBK", 1, 0x00b51169, 0x00000002 }, + { "N10.PCX", 1, 0x00b5116b, 0x0000a28d }, + { "N10.SAM", 1, 0x00b5b3f8, 0x000147f8 }, + { "N11.BBK", 1, 0x00b6fbf0, 0x00000d48 }, + { "N11.PCX", 1, 0x00b70938, 0x00008e85 }, + { "N12.BBK", 1, 0x00b797bd, 0x000049aa }, + { "N12.LUM", 1, 0x00b7e167, 0x00000018 }, + { "N12.MSK", 1, 0x00b7e17f, 0x00001f40 }, + { "N12.PCX", 1, 0x00b800bf, 0x000074ea }, + { "N13.BBK", 1, 0x00b875a9, 0x000046b7 }, + { "N13.LUM", 1, 0x00b8bc60, 0x00000018 }, + { "N13.MSK", 1, 0x00b8bc78, 0x00001f40 }, + { "N13.PCX", 1, 0x00b8dbb8, 0x00008640 }, + { "N13.SAM", 1, 0x00b961f8, 0x00025a26 }, + { "N13B.SAM", 1, 0x00bbbc1e, 0x0000250a }, + { "N14.BBK", 1, 0x00bbe128, 0x000073ec }, + { "N14.PCX", 1, 0x00bc5514, 0x0000b3f3 }, + { "N14.SAM", 1, 0x00bd0907, 0x0002550a }, + { "N14B.PCX", 1, 0x00bf5e11, 0x0000b933 }, + { "N15.BBK", 1, 0x00c01744, 0x00000002 }, + { "N15.PCX", 1, 0x00c01746, 0x0000ae43 }, + { "N16.BBK", 1, 0x00c0c589, 0x000014c0 }, + { "N16.LUM", 1, 0x00c0da49, 0x00000018 }, + { "N16.MSK", 1, 0x00c0da61, 0x00001f40 }, + { "N16.PCX", 1, 0x00c0f9a1, 0x0000e038 }, + { "N2.BBK", 1, 0x00c1d9d9, 0x00007377 }, + { "N2.LUM", 1, 0x00c24d50, 0x00000018 }, + { "N2.MSK", 1, 0x00c24d68, 0x00001f40 }, + { "N2.PCX", 1, 0x00c26ca8, 0x00007d65 }, + { "N3.BBK", 1, 0x00c2ea0d, 0x00004fe2 }, + { "N3.LUM", 1, 0x00c339ef, 0x00000018 }, + { "N3.MSK", 1, 0x00c33a07, 0x00001f40 }, + { "N3.PCX", 1, 0x00c35947, 0x0000a6de }, + { "N4.BBK", 1, 0x00c40025, 0x0000acc0 }, + { "N4.LUM", 1, 0x00c4ace5, 0x00000018 }, + { "N4.MSK", 1, 0x00c4acfd, 0x00001f40 }, + { "N4.PCX", 1, 0x00c4cc3d, 0x00006e0b }, + { "N5.BBK", 1, 0x00c53a48, 0x0000202a }, + { "N5.LUM", 1, 0x00c55a72, 0x00000018 }, + { "N5.MSK", 1, 0x00c55a8a, 0x00001f40 }, + { "N5.PCX", 1, 0x00c579ca, 0x000092f0 }, + { "N6.BBK", 1, 0x00c60cba, 0x00001d97 }, + { "N6.LUM", 1, 0x00c62a51, 0x00000018 }, + { "N6.MSK", 1, 0x00c62a69, 0x00001f40 }, + { "N6.PCX", 1, 0x00c649a9, 0x000086e2 }, + { "N7.BBK", 1, 0x00c6d08b, 0x000025f8 }, + { "N7.LUM", 1, 0x00c6f683, 0x00000018 }, + { "N7.MSK", 1, 0x00c6f69b, 0x00001f40 }, + { "N7.PCX", 1, 0x00c715db, 0x00008e79 }, + { "N8.BBK", 1, 0x00c7a454, 0x00007bb7 }, + { "N8.LUM", 1, 0x00c8200b, 0x00000018 }, + { "N8.MSK", 1, 0x00c82023, 0x00001f40 }, + { "N8.PCX", 1, 0x00c83f63, 0x0000be5f }, + { "N9.BBK", 1, 0x00c8fdc2, 0x0000c9bf }, + { "N9.LUM", 1, 0x00c9c781, 0x00000018 }, + { "N9.MSK", 1, 0x00c9c799, 0x00001f40 }, + { "N9.PCX", 1, 0x00c9e6d9, 0x0000aa4b }, + { "N9.SAM", 1, 0x00ca9124, 0x0000e902 }, + { "NAOMI.DOG", 1, 0x00cb7a26, 0x000013b6 }, + { "NAOMI2.DOG", 1, 0x00cb8ddc, 0x00000a40 }, + { "OBJECTS.BBK", 1, 0x00cb981c, 0x00019322 }, + { "ORACLE.ACT", 1, 0x00cd2b3e, 0x00004042 }, + { "ORACLE1.DOG", 1, 0x00cd6b80, 0x00001088 }, + { "ORACLE2.DOG", 1, 0x00cd7c08, 0x000003c0 }, + { "ORACLE3.DOG", 1, 0x00cd7fc8, 0x00000806 }, + { "PANEL.PCX", 1, 0x00cd87ce, 0x00002279 }, + { "PRIN1.CUT", 1, 0x00cdaa47, 0x0000007a }, + { "PRIN1.DOG", 1, 0x00cdaac1, 0x00000aea }, + { "PRIN2.DOG", 1, 0x00cdb5ab, 0x0000055a }, + { "PRIN4.DOG", 1, 0x00cdbb05, 0x00000720 }, + { "PRINCESS.ACT", 1, 0x00cdc225, 0x0000d732 }, + { "PRISON.ACT", 1, 0x00ce9957, 0x00006f22 }, + { "PUNCH.SAM", 1, 0x00cf0879, 0x00007e9a }, + { "PUSH.SAM", 1, 0x00cf8713, 0x00009308 }, + { "PYGMY.ACT", 1, 0x00d01a1b, 0x00010a63 }, + { "QUEEN.JAS", 1, 0x00d1247e, 0x0001371a }, + { "QUEEN2.JAS", 1, 0x00d25b98, 0x00008c00 }, + { "R1.BBK", 1, 0x00d2e798, 0x00001a4a }, + { "R1.PCX", 1, 0x00d301e2, 0x000065c0 }, + { "R2.BBK", 1, 0x00d367a2, 0x00001a4a }, + { "R2.PCX", 1, 0x00d381ec, 0x00005f32 }, + { "R3.BBK", 1, 0x00d3e11e, 0x00001a4a }, + { "R3.PCX", 1, 0x00d3fb68, 0x000061a1 }, + { "R4.BBK", 1, 0x00d45d09, 0x00001a4a }, + { "R4.PCX", 1, 0x00d47753, 0x00009ec3 }, + { "RASH.SAM", 1, 0x00d51616, 0x0000431a }, + { "RENEGADE.BBK", 1, 0x00d55930, 0x0000117a }, + { "RENEGADE.PCX", 1, 0x00d56aaa, 0x0000296d }, + { "RITA.ACT", 1, 0x00d59417, 0x000020ea }, + { "RITA_H.ACT", 1, 0x00d5b501, 0x00015cdb }, + { "ROCKET.SAM", 1, 0x00d711dc, 0x00027e20 }, + { "SEC.ACT", 1, 0x00d98ffc, 0x00006e6a }, + { "SEC1.DOG", 1, 0x00d9fe66, 0x00001672 }, + { "SEC2.DOG", 1, 0x00da14d8, 0x00000944 }, + { "SHEET.SAM", 1, 0x00da1e1c, 0x0000ad00 }, + { "SHIELD.SAM", 1, 0x00dacb1c, 0x00002afb }, + { "SHOWER.ACT", 1, 0x00daf617, 0x0000762a }, + { "SHOWERAM.DOG", 1, 0x00db6c41, 0x000005fc }, + { "SKULL.ACT", 1, 0x00db723d, 0x00001973 }, + { "SPARKY.ACT", 1, 0x00db8bb0, 0x0000f912 }, + { "SPARKY1.DOG", 1, 0x00dc84c2, 0x00000986 }, + { "SPARKY2.DOG", 1, 0x00dc8e48, 0x00000402 }, + { "SPARKY3.DOG", 1, 0x00dc924a, 0x0000126e }, + { "SPARKY4.DOG", 1, 0x00dca4b8, 0x0000043a }, + { "SPARKY5.DOG", 1, 0x00dca8f2, 0x0000091c }, + { "SPARKY6.DOG", 1, 0x00dcb20e, 0x000007b6 }, + { "SPARKY7.DOG", 1, 0x00dcb9c4, 0x0000095e }, + { "SPARKY8.DOG", 1, 0x00dcc322, 0x0000072a }, + { "SPARKY_H.ACT", 1, 0x00dcca4c, 0x0000280a }, + { "T1.BBK", 1, 0x00dcf256, 0x0000f492 }, + { "T1.LUM", 1, 0x00dde6e8, 0x00000018 }, + { "T1.MSK", 1, 0x00dde700, 0x00001f40 }, + { "T1.PCX", 1, 0x00de0640, 0x0000aa3d }, + { "T1.SAM", 1, 0x00deb07d, 0x0000711a }, + { "T10.BBK", 1, 0x00df2197, 0x0000a957 }, + { "T10.LUM", 1, 0x00dfcaee, 0x00000018 }, + { "T10.MSK", 1, 0x00dfcb06, 0x00001f40 }, + { "T10.PCX", 1, 0x00dfea46, 0x0001198a }, + { "T10.SAM", 1, 0x00e103d0, 0x0000bc49 }, + { "T11.BBK", 1, 0x00e1c019, 0x00001e84 }, + { "T11.LUM", 1, 0x00e1de9d, 0x00000018 }, + { "T11.MSK", 1, 0x00e1deb5, 0x00001f40 }, + { "T11.PCX", 1, 0x00e1fdf5, 0x00008e7e }, + { "T12.BBK", 1, 0x00e28c73, 0x000059b5 }, + { "T12.LUM", 1, 0x00e2e628, 0x00000018 }, + { "T12.MSK", 1, 0x00e2e640, 0x00001f40 }, + { "T12.PCX", 1, 0x00e30580, 0x00007b3c }, + { "T12.SAM", 1, 0x00e380bc, 0x0000fe4b }, + { "T13.BBK", 1, 0x00e47f07, 0x000043b4 }, + { "T13.LUM", 1, 0x00e4c2bb, 0x00000018 }, + { "T13.MSK", 1, 0x00e4c2d3, 0x00001f40 }, + { "T13.PCX", 1, 0x00e4e213, 0x00007591 }, + { "T14.BBK", 1, 0x00e557a4, 0x0000468b }, + { "T14.LUM", 1, 0x00e59e2f, 0x00000018 }, + { "T14.MSK", 1, 0x00e59e47, 0x00001f40 }, + { "T14.PCX", 1, 0x00e5bd87, 0x00007df5 }, + { "T14.SAM", 1, 0x00e63b7c, 0x00016db3 }, + { "T15.BBK", 1, 0x00e7a92f, 0x000096e6 }, + { "T15.LUM", 1, 0x00e84015, 0x00000018 }, + { "T15.MSK", 1, 0x00e8402d, 0x00001f40 }, + { "T15.PCX", 1, 0x00e85f6d, 0x00008b28 }, + { "T15.SAM", 1, 0x00e8ea95, 0x0000a7d0 }, + { "T15B.SAM", 1, 0x00e99265, 0x000164d7 }, + { "T16.BBK", 1, 0x00eaf73c, 0x000027ff }, + { "T16.LUM", 1, 0x00eb1f3b, 0x00000018 }, + { "T16.MSK", 1, 0x00eb1f53, 0x00001f40 }, + { "T16.PCX", 1, 0x00eb3e93, 0x00009110 }, + { "T17.BBK", 1, 0x00ebcfa3, 0x000056df }, + { "T17.LUM", 1, 0x00ec2682, 0x00000018 }, + { "T17.MSK", 1, 0x00ec269a, 0x00001f40 }, + { "T17.PCX", 1, 0x00ec45da, 0x00007db6 }, + { "T18.BBK", 1, 0x00ecc390, 0x00006174 }, + { "T18.LUM", 1, 0x00ed2504, 0x00000018 }, + { "T18.MSK", 1, 0x00ed251c, 0x00001f40 }, + { "T18.PCX", 1, 0x00ed445c, 0x000087d6 }, + { "T19.BBK", 1, 0x00edcc32, 0x0000aec8 }, + { "T19.LUM", 1, 0x00ee7afa, 0x00000018 }, + { "T19.MSK", 1, 0x00ee7b12, 0x00001f40 }, + { "T19.PCX", 1, 0x00ee9a52, 0x0000768e }, + { "T19.SAM", 1, 0x00ef10e0, 0x000167ea }, + { "T1B.SAM", 1, 0x00f078ca, 0x0002fa9f }, + { "T2.BBK", 1, 0x00f37369, 0x00004dea }, + { "T2.LUM", 1, 0x00f3c153, 0x00000018 }, + { "T2.MSK", 1, 0x00f3c16b, 0x00001f40 }, + { "T2.PCX", 1, 0x00f3e0ab, 0x00011404 }, + { "T2.SAM", 1, 0x00f4f4af, 0x0000aa32 }, + { "T20.BBK", 1, 0x00f59ee1, 0x0000611c }, + { "T20.LUM", 1, 0x00f5fffd, 0x00000018 }, + { "T20.MSK", 1, 0x00f60015, 0x00001f40 }, + { "T20.PCX", 1, 0x00f61f55, 0x0000852a }, + { "T20.SAM", 1, 0x00f6a47f, 0x00007f9c }, + { "T20B.SAM", 1, 0x00f7241b, 0x0000a2bc }, + { "T21.BBK", 1, 0x00f7c6d7, 0x00000002 }, + { "T21.PCX", 1, 0x00f7c6d9, 0x0000b7b0 }, + { "T22.BBK", 1, 0x00f87e89, 0x00000002 }, + { "T22.PCX", 1, 0x00f87e8b, 0x0000a982 }, + { "T23.BBK", 1, 0x00f9280d, 0x00005bca }, + { "T23.LUM", 1, 0x00f983d7, 0x00000018 }, + { "T23.MSK", 1, 0x00f983ef, 0x00001f40 }, + { "T23.PCX", 1, 0x00f9a32f, 0x00008200 }, + { "T24.BBK", 1, 0x00fa252f, 0x0000aaf1 }, + { "T24.LUM", 1, 0x00fad020, 0x00000018 }, + { "T24.MSK", 1, 0x00fad038, 0x00001f40 }, + { "T24.PCX", 1, 0x00faef78, 0x00006f7e }, + { "T25.BBK", 1, 0x00fb5ef6, 0x0000a631 }, + { "T25.LUM", 1, 0x00fc0527, 0x00000018 }, + { "T25.MSK", 1, 0x00fc053f, 0x00001f40 }, + { "T25.PCX", 1, 0x00fc247f, 0x00008881 }, + { "T25.SAM", 1, 0x00fcad00, 0x000091ac }, + { "T26.BBK", 1, 0x00fd3eac, 0x00014578 }, + { "T26.LUM", 1, 0x00fe8424, 0x00000018 }, + { "T26.MSK", 1, 0x00fe843c, 0x00001f40 }, + { "T26.PCX", 1, 0x00fea37c, 0x00012570 }, + { "T26A.SAM", 1, 0x00ffc8ec, 0x000126a6 }, + { "T27.BBK", 1, 0x0100ef92, 0x0000a73e }, + { "T27.LUM", 1, 0x010196d0, 0x00000018 }, + { "T27.MSK", 1, 0x010196e8, 0x00001f40 }, + { "T27.PCX", 1, 0x0101b628, 0x000085fa }, + { "T28.BBK", 1, 0x01023c22, 0x00000002 }, + { "T28.PCX", 1, 0x01023c24, 0x000017d2 }, + { "T2B.SAM", 1, 0x010253f6, 0x00021df6 }, + { "T3.BBK", 1, 0x010471ec, 0x00004b24 }, + { "T3.LUM", 1, 0x0104bd10, 0x00000018 }, + { "T3.MSK", 1, 0x0104bd28, 0x00001f40 }, + { "T3.PCX", 1, 0x0104dc68, 0x0000724c }, + { "T3.SAM", 1, 0x01054eb4, 0x00006042 }, + { "T4.BBK", 1, 0x0105aef6, 0x00002dca }, + { "T4.MSK", 1, 0x0105dcc0, 0x00001f40 }, + { "T4.PCX", 1, 0x0105fc00, 0x00007566 }, + { "T5.BBK", 1, 0x01067166, 0x00001ac0 }, + { "T5.LUM", 1, 0x01068c26, 0x00000018 }, + { "T5.MSK", 1, 0x01068c3e, 0x00001f40 }, + { "T5.PCX", 1, 0x0106ab7e, 0x00009509 }, + { "T5.SAM", 1, 0x01074087, 0x000049aa }, + { "T5B.SAM", 1, 0x01078a31, 0x00022018 }, + { "T5C.SAM", 1, 0x0109aa49, 0x00011612 }, + { "T6.BBK", 1, 0x010ac05b, 0x00007db0 }, + { "T6.LUM", 1, 0x010b3e0b, 0x00000018 }, + { "T6.MSK", 1, 0x010b3e23, 0x00001f40 }, + { "T6.PCX", 1, 0x010b5d63, 0x000096b4 }, + { "T6.SAM", 1, 0x010bf417, 0x0000f04d }, + { "T6A.SAM", 1, 0x010ce464, 0x000199ee }, + { "T6B.PCX", 1, 0x010e7e52, 0x0000ad10 }, + { "T6B.SAM", 1, 0x010f2b62, 0x00010cba }, + { "T6C.SAM", 1, 0x0110381c, 0x00015041 }, + { "T7.BBK", 1, 0x0111885d, 0x0000c781 }, + { "T7.PCX", 1, 0x01124fde, 0x00006da0 }, + { "T7.SAM", 1, 0x0112bd7e, 0x000172ea }, + { "T8.BBK", 1, 0x01143068, 0x00002762 }, + { "T8.LUM", 1, 0x011457ca, 0x00000018 }, + { "T8.MSK", 1, 0x011457e2, 0x00001f40 }, + { "T8.PCX", 1, 0x01147722, 0x0000831b }, + { "T8.SAM", 1, 0x0114fa3d, 0x00012c01 }, + { "T9.BBK", 1, 0x0116263e, 0x000029f3 }, + { "T9.LUM", 1, 0x01165031, 0x00000018 }, + { "T9.MSK", 1, 0x01165049, 0x00001f40 }, + { "T9.PCX", 1, 0x01166f89, 0x0000735b }, + { "T9.SAM", 1, 0x0116e2e4, 0x0000d9e6 }, + { "TABLET.BBK", 1, 0x0117bcca, 0x00013902 }, + { "TABLET.PCX", 1, 0x0118f5cc, 0x0000af16 }, + { "TALLPYG.DOG", 1, 0x0119a4e2, 0x0000034a }, + { "TAM1.DOG", 1, 0x0119a82c, 0x00001e8a }, + { "TAM2.DOG", 1, 0x0119c6b6, 0x0000076c }, + { "TAM3.DOG", 1, 0x0119ce22, 0x000007c2 }, + { "TAM4.DOG", 1, 0x0119d5e4, 0x0000083c }, + { "TEMPLE.ACT", 1, 0x0119de20, 0x00005052 }, + { "TMPD.ACT", 1, 0x011a2e72, 0x0000b00c }, + { "TRADER.ACT", 1, 0x011ade7e, 0x0001424a }, + { "V1.BBK", 1, 0x011c20c8, 0x00006724 }, + { "V1.PCX", 1, 0x011c87ec, 0x000091ea }, + { "V1.SAM", 1, 0x011d19d6, 0x000061e5 }, + { "V10.BBK", 1, 0x011d7bbb, 0x000094e8 }, + { "V10.PCX", 1, 0x011e10a3, 0x0000946c }, + { "V11.BBK", 1, 0x011ea50f, 0x0000e122 }, + { "V11.PCX", 1, 0x011f8631, 0x0000946c }, + { "V2.BBK", 1, 0x01201a9d, 0x00007dfb }, + { "V2.LUM", 1, 0x01209898, 0x00000018 }, + { "V2.MSK", 1, 0x012098b0, 0x00001f40 }, + { "V2.PCX", 1, 0x0120b7f0, 0x0000876c }, + { "V3.BBK", 1, 0x01213f5c, 0x0000d716 }, + { "V3.LUM", 1, 0x01221672, 0x00000018 }, + { "V3.MSK", 1, 0x0122168a, 0x00001f40 }, + { "V3.PCX", 1, 0x012235ca, 0x00005efa }, + { "V4.BBK", 1, 0x012294c4, 0x0000571a }, + { "V4.PCX", 1, 0x0122ebde, 0x00010cd4 }, + { "V5.BBK", 1, 0x0123f8b2, 0x0001c43f }, + { "V5.MSK", 1, 0x0125bcf1, 0x00001f40 }, + { "V5.PCX", 1, 0x0125dc31, 0x00009148 }, + { "V5.SAM", 1, 0x01266d79, 0x0003953d }, + { "V5B.SAM", 1, 0x012a02b6, 0x0000ce6f }, + { "V5C.SAM", 1, 0x012ad125, 0x0000f142 }, + { "V5D.SAM", 1, 0x012bc267, 0x00000f50 }, + { "V5E.SAM", 1, 0x012bd1b7, 0x00009352 }, + { "V5X.SAM", 1, 0x012c6509, 0x0001d7c2 }, + { "V6.BBK", 1, 0x012e3ccb, 0x0000d716 }, + { "V6.LUM", 1, 0x012f13e1, 0x00000018 }, + { "V6.MSK", 1, 0x012f13f9, 0x00001f40 }, + { "V6.PCX", 1, 0x012f3339, 0x000074ce }, + { "V7.BBK", 1, 0x012fa807, 0x000177cd }, + { "V7.PCX", 1, 0x01311fd4, 0x0000a3b4 }, + { "V8.BBK", 1, 0x0131c388, 0x00006724 }, + { "V8.PCX", 1, 0x01322aac, 0x0000a8d0 }, + { "VACUUM.SAM", 1, 0x0132d37c, 0x00009516 }, + { "WATER.ACT", 1, 0x01336892, 0x00001c02 }, + { "WEDGE.ACT", 1, 0x01338494, 0x0000390e }, + { "WEDGE.DOG", 1, 0x0133bda2, 0x000002c4 }, + { "WEENIE.SAM", 1, 0x0133c066, 0x0000b4d2 }, + { "WITCH1.DOG", 1, 0x01347538, 0x000012e4 }, + { "WITCH2.DOG", 1, 0x0134881c, 0x0000088e }, + { "WITCH3.DOG", 1, 0x013490aa, 0x00000df8 }, + { "WITCH4.DOG", 1, 0x01349ea2, 0x000002b2 }, + { "X1.BBK", 1, 0x0134a154, 0x00010e5d }, + { "X1.PCX", 1, 0x0135afb1, 0x0000cc4b }, + { "X10.BBK", 1, 0x01367bfc, 0x00009907 }, + { "X10.PCX", 1, 0x01371503, 0x0000a1b3 }, + { "X10_JOE.ACT", 1, 0x0137b6b6, 0x0000943a }, + { "X10_RITA.ACT", 1, 0x01384af0, 0x000076d9 }, + { "X11.BBK", 1, 0x0138c1c9, 0x00016966 }, + { "X11.PCX", 1, 0x013a2b2f, 0x0000c160 }, + { "X11_JOE.ACT", 1, 0x013aec8f, 0x0000872e }, + { "X11_RITA.ACT", 1, 0x013b73bd, 0x0000a6f2 }, + { "X2.BBK", 1, 0x013c1aaf, 0x0000df2b }, + { "X2.PCX", 1, 0x013cf9da, 0x00013ed5 }, + { "X2_JOE.ACT", 1, 0x013e38af, 0x00008042 }, + { "X2_RITA.ACT", 1, 0x013eb8f1, 0x0000df02 }, + { "X3.BBK", 1, 0x013f97f3, 0x00000002 }, + { "X3.PCX", 1, 0x013f97f5, 0x0000d165 }, + { "X3_RITA.ACT", 1, 0x0140695a, 0x0000a0fa }, + { "X4.BBK", 1, 0x01410a54, 0x00004b53 }, + { "X4.PCX", 1, 0x014155a7, 0x0000b51b }, + { "X4A.SAM", 1, 0x01420ac2, 0x0001b456 }, + { "X4B.SAM", 1, 0x0143bf18, 0x0002a1b4 }, + { "X4_JOE.ACT", 1, 0x014660cc, 0x000088a5 }, + { "X4_RITA.ACT", 1, 0x0146e971, 0x0000398a }, + { "X5.BBK", 1, 0x014722fb, 0x000075a0 }, + { "X5.PCX", 1, 0x0147989b, 0x0000adeb }, + { "X5_SPARK.ACT", 1, 0x01484686, 0x00006e5a }, + { "X6.BBK", 1, 0x0148b4e0, 0x0001889e }, + { "X6.PCX", 1, 0x014a3d7e, 0x0000be75 }, + { "X6_HUGH.ACT", 1, 0x014afbf3, 0x0000c25a }, + { "X7.BBK", 1, 0x014bbe4d, 0x00002ada }, + { "X7.PCX", 1, 0x014be927, 0x00009456 }, + { "X7A.SAM", 1, 0x014c7d7d, 0x0001b7cb }, + { "X7B.SAM", 1, 0x014e3548, 0x0003b107 }, + { "X8.BBK", 1, 0x0151e64f, 0x00032a14 }, + { "X8.PCX", 1, 0x01551063, 0x00013d4f }, + { "X9.BBK", 1, 0x01564db2, 0x00028337 }, + { "X9.PCX", 1, 0x0158d0e9, 0x0000a31c }, + { "ZOMBIE.ACT", 1, 0x01597405, 0x000078ea }, + { "ZOMBIE1.DOG", 1, 0x0159ecef, 0x00000f6a }, + { "ZOMBIE2.DOG", 1, 0x0159fc59, 0x00000c40 } +}; + + writeRecord(_resourceTablePEM10, sizeof(_resourceTablePEM10), GBVARS_RESOURCETABLEPM10_INDEX , GBVARS_QUEEN); +} + +void Queen_addRestables() { + addRestables_resourceTablePEM10(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_talk.c b/backends/platform/PalmOS/Src/builder/queen/bq_talk.c new file mode 100644 index 0000000000..4798a3bbe0 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/queen/bq_talk.c @@ -0,0 +1,518 @@ +#include +#include "b_globals.h" + +typedef struct { + const char name[11]; // Nstr + signed char state,faceDirection; // S,F + signed char body,bf,rf,af; + const char animation[80]; // SANIMstr + signed char ff; +} SpeechParameters; + +UInt8 *ptr; + +static UInt32 resize(void *p, UInt32 more) { + UInt32 old = MemPtrSize(p); + UInt8 *np = MemPtrNew(old + more); + MemMove(np, ptr, old); + MemPtrFree(ptr); + ptr = np; + + return old; +} + +#define DO_AddFunc(XX) \ + static UInt32 addTalk_speechParameters_part##XX() { \ + SpeechParameters _speechParameters_part[] = { + +#define DO_EndFunc \ + }; \ + UInt32 size = sizeof(_speechParameters_part); \ + UInt32 old = resize(ptr, size); \ + MemMove(ptr + old, _speechParameters_part, size); \ + return MemPtrSize(ptr); \ + } + +DO_AddFunc(1) + { "JOE",0,1,1,10,2,3,"",0}, + { "JOE",0,3,3,28,2,3,"",0}, + { "JOE",0,4,5,38,1,0,"",0}, + + { "JOE",1,1,1,45,-1,0,"",0}, + { "JOE",1,3,3,28,2,3,"",0}, + { "JOE",1,4,5,38,1,0,"",0}, + + { "JOE",2,1,1,46,-1,0,"",0}, + { "JOE",2,3,3,28,2,3,"",0}, + { "JOE",2,4,5,38,1,0,"",0}, + + { "JOE",3,1,1,47,-1,0,"",0}, + { "JOE",3,3,3,28,2,3,"",0}, + { "JOE",3,4,5,38,1,0,"",0}, + + { "JOE",4,1,1,50,-1,0,"",0}, + { "JOE",4,3,3,28,2,3,"",0}, + { "JOE",4,4,5,38,1,0,"",0}, + + { "JOE",5,1,2,0,0,0,"",0}, + { "JOE",5,3,4,0,0,0,"",0}, + { "JOE",5,4,6,0,0,0,"",0}, + + { "JOE",6,1,1,48,0,1,"",0}, + { "JOE",6,3,3,28,2,3,"",0}, + { "JOE",6,4,5,38,1,0,"",0}, + + { "JOE",7,1,1,51,0,1,"",0}, + { "JOE",7,3,3,28,2,3,"",0}, + { "JOE",7,4,5,38,1,0,"",0}, + + { "JOE",8,1,1,26,0,0,"",0}, + { "JOE",8,3,3,28,2,3,"",0}, + { "JOE",8,4,5,38,1,0,"",0}, + + { "JOE",9,1,1,29,0,0,"",0}, + { "JOE",9,3,3,28,0,0,"",0}, + { "JOE",9,4,5,38,0,0,"",0}, + + { "JOE",10,1,1,12,0,0,"T046,010,010,010,012,012,012,012,012,012,012,012,012,012,012,012,012,012,010,000",0}, + { "JOE",10,3,3,18,0,0,"",0}, + { "JOE",10,4,5,44,0,0,"",0}, + + { "JOE",11,1,1,53,-1,0,"",0}, + { "JOE",11,3,3,28,2,3,"",0}, + { "JOE",11,4,5,38,1,0,"",0}, + + { "JOE",12,1,1,10,2,3,"",0}, + { "JOE",12,3,3,28,2,0,"",0}, + { "JOE",12,4,5,38,1,0,"",0}, + + { "JOE",13,1,1,10,2,3,"T012,013,019,019,019,019,019,019,019,019,019,019,013,010,000",0}, + { "JOE",13,3,3,28,2,3,"",0}, + { "JOE",13,4,5,38,1,0,"",0}, + + { "JOE",14,1,1,16,2,3,"",16}, + { "JOE",14,3,3,28,2,3,"",0}, + { "JOE",14,4,5,38,1,0,"",0}, + + { "JOE",15,1,1,58,-1,0,"",0}, + { "JOE",15,3,3,28,2,3,"",0}, + { "JOE",15,4,5,38,1,0,"",0}, + + { "JOE",16,1,1,59,-1,0,"",0}, + { "JOE",16,3,3,28,2,3,"",0}, + { "JOE",16,4,5,38,1,0,"",0}, + + { "JOE",17,1,1,56,-1,0,"",0}, + { "JOE",17,3,3,28,2,3,"",0}, + { "JOE",17,4,5,38,1,0,"",0}, + + { "JOE",18,1,56,16,2,3,"T056,057,057,057,056,056,000",0}, + { "JOE",18,3,3,28,2,3,"",0}, + { "JOE",18,4,5,38,1,0,"",0}, + + { "JOE",19,1,54,16,2,3,"T054,055,057,056,000",0}, + { "JOE",19,3,3,28,2,3,"",0}, + { "JOE",19,4,5,38,1,0,"",0}, + + { "JOE",20,1,56,16,2,3,"T056,057,055,054,001,000",0}, + { "JOE",20,3,3,28,2,3,"",0}, + { "JOE",20,4,5,38,1,0,"",0}, + { "JOE",21,1,1,60,-1,0,"",0}, + { "JOE",21,3,3,28,2,3,"",0}, + { "JOE",21,4,61,38,1,0,"",0}, + + { "JOE",22,1,1,16,2,3,"T063,060,000",0}, + { "JOE",22,3,3,28,2,3,"",0}, + { "JOE",22,4,5,38,1,0,"",0}, + + { "JOE",23,1,1,16,2,3,"T060,063,001,000",0}, + { "JOE",23,3,3,28,2,3,"",0}, + { "JOE",23,4,5,38,1,0,"",0}, + + { "JOE",24,1,1,47,-2,0,"",0}, + { "JOE",24,3,3,28,2,3,"",0}, + { "JOE",24,4,5,38,1,0,"",0}, + + { "RICO",0,0,1,7,1,3,"",7}, + { "RICO",1,0,1,5,-1,0,"",7}, + { "RICO",2,0,1,9,0,3,"",7}, + { "RICO",3,0,1,4,-1,0,"",7}, + + { "EDDY",0,0,14,18,1,3,"",18}, + { "EDDY",1,0,14,0,0,0,"T016,017,017,016,016,017,017,016,016,017,017,000",18}, + + { "MIKE",0,0,1,2,2,3,"",2}, + + { "LOLA",0,0,30,33,2,3,"",33}, + { "LOLA",1,0,9,10,2,3,"",33}, + { "LOLA",2,0,30,33,2,3,"",33}, + { "LOLA",3,0,32,33,2,3,"",33}, + { "LOLA",4,0,8,0,0,0,"",33}, + { "LOLA",5,0,31,0,0,0,"",0}, + { "LOLA",6,0,31,0,0,0,"047,048,049,050,000",33}, +DO_EndFunc +DO_AddFunc(2) + { "LOLA_SHOWER",0,0,7,10,2,3,"",10}, + { "LOLA_SHOWER",1,0,9,10,2,3,"",10}, + { "LOLA_SHOWER",2,0,30,33,2,3,"",10}, + { "LOLA_SHOWER",3,0,32,33,2,3,"",10}, + { "LOLA_SHOWER",4,0,8,0,0,0,"",0}, + { "LOLA_SHOWER",5,0,61,0,0,0,"",0}, + { "LOLA_SHOWER",6,0,64,10,2,3,"",0}, + { "LOLA_SHOWER",7,0,31,0,0,0,"062,063,064,000",0}, + + { "SECRETARY",0,0,1,12,2,3,"",12}, + { "SECRETARY",1,0,1,12,2,0,"",12}, + { "SECRETARY",2,0,1,12,2,0,"",12}, + + { "SPARKY",0,0,21,23,2,3,"",23}, + { "SPARKY",1,0,21,22,0,0,"",0}, + { "SPARKY",2,0,21,22,0,0,"021,042,043,000",0}, + { "SPARKY",3,0,21,22,0,0,"043,042,021,000",0}, + { "SPARKY",4,0,43,43,1,0,"",0}, + { "SPARKY",14,0,21,29,5,0,"",29}, + + { "SPARKY-F",0,0,45,23,5,0,"",23}, + { "SPARKY-F",1,0,45,47,0,0,"",0}, + { "SPARKY-F",2,0,45,23,5,0,"045,046,046,045,000",23}, + { "SPARKY-F",14,0,45,29,5,0,"",29}, + + { "FAYE",0,0,19,35,2,3,"",35}, + { "FAYE",1,0,19,41,2,3,"",35}, + { "FAYE",2,0,19,28,-1,0,"",35}, + { "FAYE",3,0,19,20,0,0,"",0}, + { "FAYE",4,0,19,27,-1,0,"",35}, + { "FAYE",5,0,19,29,-1,0,"",35}, + { "FAYE",6,0,59,35,2,3,"",35}, + { "FAYE",7,0,19,30,-1,0,"",35}, + { "FAYE",8,0,19,31,-1,0,"",35}, + + { "BOB",0,0,27,34,2,3,"",34}, + { "BOB",1,0,27,28,-1,0,"",34}, + { "BOB",2,0,30,0,0,0,"",0}, + { "BOB",3,0,31,0,0,0,"",0}, + { "BOB",4,0,27,61,-1,0,"",34}, + { "BOB",5,0,27,42,1,0,"",42}, + + { "PYGMY",0,0,20,21,2,6,"",0}, + { "PYGMY",1,0,20,21,2,6,"020,068,068,068,068,068,068,068,068,020,000",0}, + { "PYGMY",2,0,20,21,2,6,"T028,029,030,031,031,031,031,030,029,028,035,000",0}, + { "PYGMY",3,0,20,21,2,6,"T035,036,037,038,037,038,037,038,036,035,000",0}, + { "PYGMY",4,0,20,21,2,6,"T032,033,032,033,032,033,035,000",0}, + { "PYGMY",5,0,20,21,2,6,"T023,022,021,022,023,024,025,026,027,026,025,024,023,000",0}, + { "PYGMY",6,0,20,21,2,6,"T034,034,034,035,000",0}, + + { "WITCH",0,0,39,40,2,6,"",40}, + { "WITCH",1,0,39,40,2,6,"073,074,000",40}, + { "WITCH",2,0,39,40,2,6,"074,073,000",40}, + { "WITCH",3,0,39,40,2,6,"T047,048,049,050,051,000",40}, + { "WITCH",4,0,39,40,2,6,"T052,053,054,055,056,057,058,057,056,056,056,055,054,053,052,000",40}, + { "WITCH",5,0,39,40,2,6,"069,070,071,072,073,074,000",40}, + { "WITCH",6,0,39,40,2,6,"074,073,072,071,070,069,070,000",40}, + { "WITCH",7,0,39,51,-1,0,"",40}, + { "WITCH",8,0,39,40,2,6,"T051,050,049,048,047,000",40}, + + { "CHIEF",0,0,1,7,1,7,"",3}, + { "CHIEF",1,0,1,2,2,6,"062,063,064,065,066,000",0}, + { "CHIEF",2,0,1,2,2,6,"066,065,064,063,062,000",0}, + { "CHIEF",3,0,1,17,-1,0,"",3}, + { "CHIEF",4,0,1,18,-1,0,"",3}, + { "CHIEF",5,0,1,19,-1,0,"",3}, + + { "NAOMI",0,0,1,2,2,3,"",2}, + { "NAOMI",1,0,1,2,2,6,"048,049,050,051,052,053,054,055,000",0}, + { "NAOMI",2,0,1,2,2,6,"055,054,053,052,051,050,049,048,000",0}, + { "NAOMI",3,0,1,13,-1,0,"",2}, + { "NAOMI",4,0,1,14,-1,0,"",2}, + { "NAOMI",5,0,1,10,-1,0,"",2}, + { "NAOMI",6,0,1,12,-1,0,"",2}, + { "NAOMI",7,0,1,12,-1,0,"T008,008,008,002,000",2}, + + { "WEDGEWOOD",0,0,8,1,2,0,"",8}, + { "WEDGEWOOD",1,0,1,1,3,0,"",1}, + + { "BUD",0,0,1,2,3,2,"",2}, + { "BUD",1,0,1,2,4,2,"T017,018,000",2}, + { "BUD",2,0,1,21,-1,0,"",2}, + { "BUD",3,0,1,14,-1,0,"",2}, + { "BUD",4,0,1,15,-1,0,"",2}, + { "BUD",5,0,1,20,-1,0,"",2}, + { "BUD",6,0,1,16,-1,0,"",2}, + { "BUD",7,0,1,19,-1,0,"",2}, + { "BUD",8,0,1,17,-1,0,"",2}, + { "BUD",9,0,1,14,-1,0,"T014,008,008,003,003,008,008,003,003,010,010,012,012,000",2}, + + { "LOU",0,0,1,2,2,3,"",2}, + { "LOU",1,0,1,2,4,2,"013,014,015,016,017,018,000",2}, + { "LOU",2,0,1,2,4,2,"018,017,016,015,014,013,000",2}, + + { "JIMMY",0,0,16,17,2,3,"",17}, + { "JIMMY",1,0,16,25,-1,0,"",17}, + { "JIMMY",2,0,16,26,-1,0,"",17}, + { "JIMMY",3,0,16,27,-1,0,"",17}, + { "JIMMY",4,0,16,28,-1,0,"",17}, + { "JIMMY",5,0,16,29,-1,0,"",17}, + + { "TAMMY",0,0,1,2,2,3,"",2}, + { "TAMMY",1,0,1,2,2,3,"T008,008,009,009,008,008,009,009,008,008,009,009,002,000",2}, + { "TAMMY",2,0,1,2,2,3,"T002,010,010,010,002,000",2}, + { "TAMMY",3,0,1,2,2,3,"T011,011,011,011,011,002,000",2}, + { "TAMMY",4,0,1,2,2,3,"T013,014,015,013,014,015,013,009,001,000",2}, + + { "SKULL",0,0,9,9,4,0,"",0}, + { "SKULL",1,0,1,9,4,0,"001,002,003,004,005,006,007,008,009,000",0}, + { "SKULL",2,0,1,9,4,0,"009,008,007,006,005,004,003,002,001,000",0}, +DO_EndFunc +DO_AddFunc(3) + { "APE",0,0,1,6,7,0,"",6}, + { "APE",1,0,1,6,7,0,"002,001,000",6}, + { "APE",2,0,1,6,7,0,"002,003,001,000",6}, + { "APE",3,0,1,6,7,0,"004,005,004,005,004,001,000",6}, + { "APE",4,0,1,6,7,0,"001,003,005,004,005,004,001,000",6}, + + { "APE1",0,0,15,16,7,0,"",16}, + { "APE2",0,0,14,6,7,0,"",6}, + + { "SHOWERAM",0,0,1,2,3,0,"",2}, + { "SHOWERAM",1,0,1,2,3,0,"026,027,028,029,001,000",2}, + { "SHOWERAM",2,0,1,2,3,0,"001,029,028,027,026,000",2}, + + { "PRINCESS1",0,0,19,23,2,3,"",23}, + { "PRINCESS1",1,0,19,41,-1,0,"",23}, + { "PRINCESS1",2,0,19,42,-1,0,"",23}, + { "PRINCESS1",3,0,19,45,-1,0,"",23}, + { "PRINCESS1",4,0,19,40,-1,0,"",23}, + { "PRINCESS1",5,0,19,45,2,3,"T40,043,044,045,000",45}, + { "PRINCESS1",6,0,19,45,-1,0,"T041,038,000",38}, + { "PRINCESS1",7,0,22,0,0,0,"",0}, + { "PRINCESS1",8,0,19,45,2,3,"T045,044,043,040,039,000",39}, + + { "PRINCESS2",0,0,46,23,2,3,"",23}, + { "PRINCESS2",1,0,46,29,2,3,"",29}, + { "PRINCESS2",2,0,46,29,2,3,"T029,036,035,000",35}, + + { "GUARDS",0,0,7,7,0,0,"",7}, + + { "AMGUARD",0,0,19,22,2,3,"",22}, + + { "MAN1",0,0,2,3,2,3,"",3}, + { "MAN2",0,0,9,10,1,2,"",10}, + + { "DOG",0,0,6,6,1,0,"",0}, + { "DOG",1,0,6,6,1,0,"010,009,008,000",0}, + { "DOG",2,0,6,6,1,0,"008,009,010,000",0}, + + { "CHEF",0,0,5,6,2,3,"",6}, + + { "HENRY",0,0,7,9,2,3,"",9}, + { "HENRY",1,0,7,21,-1,0,"",9}, + { "HENRY",2,0,7,19,-1,0,"",9}, + { "HENRY",3,0,7,20,-1,0,"",9}, + { "HENRY",4,0,8,9,2,3,"",9}, + { "HENRY",5,0,23,9,-1,0,"",9}, + { "HENRY",6,0,7,9,2,3,"T019,015,017,017,017,017,017,017,017,015,009,000",9}, + { "HENRY",7,0,7,9,2,3,"T018,010,000",10}, + { "HENRY",8,0,7,9,2,3,"T018,016,000",16}, + { "HENRY",9,0,7,9,2,3,"T018,011,000",11}, + { "HENRY",10,0,29,33,1,1,"",33}, + { "HENRY",11,0,7,30,2,0,"",9}, + { "HENRY",12,0,7,9,2,3,"025,026,000",26}, + { "HENRY",13,0,7,9,2,3,"027,028,027,028,000",28}, + { "HENRY",14,0,7,9,2,3,"026,025,007,000",9}, + + { "JOHAN",0,0,1,15,2,3,"",15}, + { "JOHAN",1,0,1,0,0,0,"T006,007,008,000",15}, + { "JOHAN",2,0,1,15,2,3,"T002,003,004,005,004,005,004,005,004,005,004,005,004,003,002,000",15}, + { "JOHAN",3,0,1,8,-1,0,"",15}, + { "JOHAN",4,0,1,0,0,0,"T008,007,006,001,000",15}, + + { "KLUNK",0,0,1,2,2,3,"",2}, + { "KLUNK",1,0,1,2,2,3,"019,020,021,022,001,000",2}, + { "KLUNK",2,0,1,2,2,3,"001,022,021,020,019,016,517,000",2}, + { "KLUNK",3,0,1,2,2,3,"T010,011,010,011,010,011,009,000",2}, + + { "FRANK",0,0,13,14,2,3,"",14}, + { "FRANK",1,0,13,20,0,1,"",14}, + { "FRANK",2,0,13,14,2,3,"025,026,027,027,027,026,026,026,027,027,026,026,027,025,013,000",14}, + { "FRANK",3,0,28,14,2,3,"",14}, + + { "DEATH",0,0,1,2,2,3,"",2}, + { "DEATH",1,0,1,2,2,3,"013,014,015,016,017,001,000",0}, + { "DEATH",2,0,1,2,2,3,"001,017,016,015,014,013,000",0}, + { "DEATH",3,0,1,2,2,3,"T018,019,020,021,021,022,022,020,021,022,020,021,022,023,024,524,000",2}, + { "DEATH",4,0,1,2,2,3,"T025,026,027,028,028,028,028,028,028,028,028,028,029,035,000",2}, + { "DEATH",5,0,1,2,2,3,"T030,031,032,033,033,033,033,033,033,033,033,033,034,035,000",2}, + { "DEATH",6,0,1,2,2,3,"T023,022,020,019,018,001,000",2}, + + { "JASPAR",0,0,1,1,22,0,"026,027,028,029,028,029,028,029,030,023,000",0}, + { "JASPAR",1,0,1,1,22,0,"023,026,000",0}, + + { "ORACLE",0,0,1,5,3,0,"",0}, + + { "ZOMBIE",0,0,1,5,2,3,"",5}, + { "ZOMBIE",1,0,1,12,-1,0,"",5}, + { "ZOMBIE",2,0,1,13,-1,0,"",5}, + { "ZOMBIE",3,0,1,1,5,5,"",5}, + + { "ZOMBIE2",0,0,14,14,0,0,"",0}, + { "ZOMBIE3",0,0,18,18,0,0,"",0}, + + { "ANDERSON",0,0,7,8,2,3,"",8}, + { "ANDERSON",1,0,7,8,1,0,"",8}, + { "ANDERSON",2,0,7,16,-1,0,"",8}, + { "ANDERSON",3,0,7,18,-1,0,"",8}, + { "ANDERSON",4,0,7,19,-1,0,"",8}, + { "ANDERSON",5,0,7,20,-1,0,"",8}, + { "ANDERSON",6,0,7,21,1,0,"",8}, + + { "COMPY",0,0,12,12,-1,0,"",0}, + { "COMPY",1,0,10,10,10,0,"010,011,012,012,013,014,014,000",0}, + { "COMPY",2,0,10,10,10,0,"014,013,012,000",0}, + + { "DEINO",0,0,13,13,-1,0,"",0}, + { "DEINO",1,0,9,9,9,0,"009,010,000",0}, + + { "TMPD",0,0,19,22,2,3,"",22}, + + { "IAN",0,0,7,9,2,3,"",9}, + { "IAN",1,0,8,25,3,0,"",25}, + { "IAN",2,0,7,21,-1,0,"",9}, + { "IAN",3,0,7,22,1,0,"",9}, + { "IAN",4,0,7,22,-1,0,"",9}, + { "IAN",5,0,7,24,-1,0,"",9}, + { "IAN",6,0,7,9,2,3,"034,034,034,035,035,036,036,035,035,036,035,036,035,000",9}, + { "IAN",7,0,7,31,-1,0,"",9}, +DO_EndFunc +DO_AddFunc(4) + { "FAYE-H",0,0,1,1,4,1,"",1}, + { "FAYE-H",1,0,1,1,4,1,"007,000",7}, + { "FAYE-H",2,0,1,1,4,1,"009,010,011,009,001,000",1}, + { "FAYE-H",3,0,1,1,4,1,"E012,013,000",1}, + { "FAYE-H",4,0,1,1,4,1,"E015,000",1}, + { "FAYE-H",5,0,1,1,4,1,"E014,000",1}, + + { "AZURA-H",0,0,1,1,4,1,"",1}, + { "AZURA-H",1,0,1,1,4,1,"007,000",7}, + { "AZURA-H",2,0,1,1,4,1,"009,010,011,009,001,000",1}, + { "AZURA-H",3,0,1,1,4,1,"E012,013,000",1}, + { "AZURA-H",4,0,1,1,4,1,"E015,000",1}, + { "AZURA-H",5,0,1,1,4,1,"E014,000",1}, + + { "FRANK-H",0,0,1,1,4,1,"",1}, + { "FRANK-H",1,0,1,1,4,1,"E009,000",1}, + { "FRANK-H",2,0,1,1,4,1,"E007,000",1}, + { "FRANK-H",3,0,1,1,4,1,"010,011,012,013,014,015,010,000",1}, + + { "JOE-E",0,0,1,2,4,1,"",2}, + { "JOE-E",6,0,1,2,4,1,"008,009,008,002,000",2}, + + { "AZURA-E",0,0,1,1,5,1,"",1}, + { "AZURA-E",1,0,1,1,5,1,"009,010,009,008,000",1}, + + { "FAYE-E",0,0,1,4,4,1,"",1}, + { "FAYE-E",1,0,1,4,4,1,"002,003,002,001,000",1}, + + { "ANDSON-E",0,0,1,3,4,1,"",1}, + { "ANDSON-E",1,0,1,3,4,1,"002,001,000",1}, + + { "JOE-H",0,0,1,1,4,4,"",1}, + { "JOE-H",1,0,1,1,2,3,"012,013,014,000",14}, + { "JOE-H",2,0,1,1,2,3,"010,011,000",11}, + { "JOE-H",3,0,1,1,2,3,"014,013,012,001,000",1}, + { "JOE-H",4,0,1,13,1,0,"",13}, + + { "RITA-H",0,0,7,1,2,3,"",1}, + { "RITA-H",1,0,7,0,0,0,"009,010,011,012,013,000",13}, + { "RITA-H",2,0,7,0,0,0,"014,015,016,000",16}, + { "RITA-H",3,0,7,0,0,0,"013,012,011,010,000",10}, + { "RITA-H",4,0,7,0,0,0,"009,007,008,007,009,000",9}, + { "RITA-H",5,0,7,0,0,0,"016,015,014,000",14}, + + { "RITA",0,0,1,4,2,3,"",4}, + { "RITA",1,0,2,4,2,3,"",4}, + + { "SPARKY-H",0,0,1,1,2,3,"",1}, + + { "HUGH",0,0,1,1,2,3,"",1}, + { "HUGH",1,0,7,7,2,3,"",7}, + + { "X2_JOE",0,0,1,1,2,3,"",1}, + { "X2_JOE",1,0,1,1,2,3,"001,007,008,008,007,001,000",1}, + + { "X2_RITA",0,0,1,1,2,3,"",1}, + { "X2_RITA",1,0,1,1,2,3,"001,007,008,008,007,001,000",1}, + + { "X3_RITA",0,0,1,1,4,1,"",1}, + { "X3_RITA",1,0,1,1,4,1,"007,000",7}, + { "X3_RITA",2,0,1,1,4,1,"009,010,011,009,001,000",1}, + { "X3_RITA",3,0,1,1,4,1,"E012,013,000",1}, + { "X3_RITA",4,0,1,1,4,1,"E015,000",1}, + { "X3_RITA",5,0,1,1,4,1,"E014,000",1}, + + { "X4_JOE",0,0,1,1,3,4,"",1}, + { "X4_JOE",1,0,1,13,2,3,"",13}, + { "X4_JOE",2,0,1,1,3,4,"009,010,011,012,013,000",13}, + { "X4_JOE",3,0,1,1,3,4,"012,011,010,009,000",9}, + { "X4_JOE",4,0,1,1,3,4,"001,019,000",19}, + + { "X4_RITA",0,0,1,1,0,1,"",1}, + { "X4_RITA",1,0,1,7,0,1,"",7}, + { "X4_RITA",2,0,1,1,3,4,"004,005,006,006,006,006,007,000",7}, + { "X4_RITA",3,0,1,1,3,4,"005,004,001,000",1}, + { "X4_RITA",4,0,1,1,3,4,"001,003,000",3}, + + { "X5_SPARKY",0,0,1,1,2,3,"",1}, + { "X5_SPARKY",1,0,1,1,2,3,"001,010,011,011,001,000",1}, + { "X5_SPARKY",2,0,1,1,2,3,"001,007,008,009,000",9}, + + { "X6_HUGH",0,0,1,1,2,3,"",1}, + { "X6_HUGH",1,0,1,1,2,3,"007,007,007,007,,001,000",1}, + { "X6_HUGH",2,0,1,1,2,3,"008,008,008,008,008,009,009,008,008,008,009,008,000",8}, + + { "X10_JOE",0,0,1,2,2,3,"",2}, + { "X10_JOE",1,0,1,8,2,3,"",8}, + { "X10_JOE",2,0,1,2,2,3,"014,014,014,015,015,014,014,015,015,000",2}, + + { "X10_RITA",0,0,1,2,2,3,"",2}, + + { "X11_JOE",0,0,1,2,0,1,"",2}, + + { "X11_RITA",0,0,1,2,0,1,"",2}, + { "X11_RITA",1,0,1,2,1,0,"003,004,000",4}, + + { "JOHN", 0, 0, 1, 2, 2, 3, "", 1 }, + { "JOHN", 1, 0, 1, 15, -1, 0, "", 1 }, + { "JOHN", 2, 0, 1, 16, -1, 0, "", 1 }, + { "JOHN", 3, 0, 1, 17, -1, 0, "", 1 }, + + { "STEVE", 0, 0, 8, 2, 2, 3, "", 2 }, + { "STEVE", 1, 0, 8, 16, -1, 0, "", 2 }, + { "STEVE", 2, 0, 9, 18, -1, 0, "T016,017,017,016,008,000", 2 }, + { "STEVE", 3, 0, 8, 18, -1, 0, "", 2 }, + + { "TONY", 0, 0, 1, 2, 2, 3, "", 1 }, + { "TONY", 1, 0, 1, 12, -1, 0, "", 1 }, + + { "*",0,0,0,0,0,0,"",0} +DO_EndFunc + +static void addTalk_speechParameters() { + UInt32 remove, size; + + remove = 10; + ptr = MemPtrNew(remove); + + size = addTalk_speechParameters_part1(); + size = addTalk_speechParameters_part2(); + size = addTalk_speechParameters_part3(); + size = addTalk_speechParameters_part4(); + + size = MemPtrSize(ptr) - remove; + + writeRecord(ptr + remove, size, GBVARS_SPEECHPARAMETERS_INDEX , GBVARS_QUEEN); + MemPtrFree(ptr); +} + +void Queen_addTalk() { + addTalk_speechParameters(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c b/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c new file mode 100644 index 0000000000..e5f7c2721f --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c @@ -0,0 +1,117 @@ +#include +#include "b_globals.h" + +static void addAkos_bigScaleTable() { +byte bigCostumeScaleTable[768] = { + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, + + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, + + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, +}; + writeRecord(bigCostumeScaleTable, sizeof(bigCostumeScaleTable), GBVARS_BIGSCALETABLE_INDEX , GBVARS_SCUMM); +} + + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addAkos() { + addAkos_bigScaleTable(); + +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c b/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c new file mode 100644 index 0000000000..1fe8d561af --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c @@ -0,0 +1,689 @@ +#include +#include "b_globals.h" + +static void addCharset_germanCharsetDataV2() { + byte germanCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, + 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, + 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, + 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, + 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, + 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x0e, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0e, 0x00, + 0x7c, 0x82, 0xba, 0xa2, 0xa2, 0xba, 0x82, 0x7c, + 0x70, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x70, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x66, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, + 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x00, + 0x42, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x1c, 0x36, 0x36, 0x7c, 0x66, 0x66, 0x7c, 0x40, + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, + }; + + writeRecord(germanCharsetDataV2, sizeof(germanCharsetDataV2), GBVARS_GERMANCHARSETDATAV2_INDEX , GBVARS_SCUMM); +} + +static void addCharset_frenchCharsetDataV2() { + byte frenchCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, + 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, + 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, + 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, + 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, + 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, + 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, + }; + + writeRecord(frenchCharsetDataV2, sizeof(frenchCharsetDataV2), GBVARS_FRENCHCHARSETDATAV2_INDEX , GBVARS_SCUMM); +} + +static void addCharset_englishCharsetDataV2() { + byte englishCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0C, 0x18, 0x3E, 0x03, 0x00, + 0x80, 0xC0, 0x60, 0x30, 0x18, 0x7C, 0xC0, 0x00, + 0x00, 0x03, 0x3E, 0x18, 0x0C, 0x06, 0x03, 0x01, + 0x00, 0xC0, 0x7C, 0x18, 0x30, 0x60, 0xC0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x7F, + 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0C, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0C, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18, + 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, + 0x18, 0x66, 0xC3, 0xDB, 0xDB, 0xC3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, 0x00, + 0x18, 0x3E, 0x58, 0x3C, 0x1A, 0x7C, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, + 0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00, + 0x06, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, + 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, + 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00, + 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E, 0x00, + 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, + 0x06, 0x0E, 0x1E, 0x66, 0x7F, 0x06, 0x06, 0x00, + 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00, + 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, + 0x7E, 0x66, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x0E, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x00, + 0x7C, 0x82, 0xBA, 0xA2, 0xBA, 0x82, 0x7C, 0x00, + 0x70, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00, + 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, + 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, + 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, + 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, + 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7E, 0x00, + 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, + 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, + 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, + 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00, + 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, + 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x66, 0x00, + 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, + 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x0E, 0x00, + 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66, 0x00, + 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, + 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, + 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, + 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, + 0x0C, 0x12, 0x30, 0x7C, 0x30, 0x62, 0xFC, 0x00, + 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, + 0x00, 0x10, 0x30, 0x7F, 0x7F, 0x30, 0x10, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, + 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x00, + 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x00, 0x0E, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x7C, + 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C, + 0x00, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, + 0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00, + 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, + 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, + 0x00, 0x00, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, + 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x78, + 0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, + 0x01, 0x03, 0x06, 0x6C, 0x78, 0x70, 0x60, 0x00, + 0x18, 0x3C, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xFF, 0x7E, 0x3C, 0x18, + 0x10, 0x30, 0x70, 0xFF, 0xFF, 0x70, 0x30, 0x10, + 0x08, 0x0C, 0x0E, 0xFF, 0xFF, 0x0E, 0x0C, 0x08, + }; + + writeRecord(englishCharsetDataV2, sizeof(englishCharsetDataV2), GBVARS_ENGLISHCHARSETDATAV2_INDEX , GBVARS_SCUMM); +} + +static void addCharset_italianCharsetDataV2() { + byte italianCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, + 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, + 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, + 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, + 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, + 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, + 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, + }; + + writeRecord(italianCharsetDataV2, sizeof(italianCharsetDataV2), GBVARS_ITALIANCHARSETDATAV2_INDEX , GBVARS_SCUMM); +} + +static void addCharset_spanishCharsetDataV2() { + byte spanishCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, + 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, + 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, + 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, + 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, + 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, + 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, + }; + + writeRecord(spanishCharsetDataV2, sizeof(spanishCharsetDataV2), GBVARS_SPANISHCHARSETDATAV2_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addCharset() { + addCharset_germanCharsetDataV2(); + addCharset_frenchCharsetDataV2(); + addCharset_englishCharsetDataV2(); + addCharset_italianCharsetDataV2(); + addCharset_spanishCharsetDataV2(); +} diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c b/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c new file mode 100644 index 0000000000..ec4c2bee87 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c @@ -0,0 +1,44 @@ +#include +#include "b_globals.h" + + +static void addCostume_smallCostumeScaleTable() { + byte smallCostumeScaleTable[256] = { + 0xFF, 0xFD, 0x7D, 0xBD, 0x3D, 0xDD, 0x5D, 0x9D, + 0x1D, 0xED, 0x6D, 0xAD, 0x2D, 0xCD, 0x4D, 0x8D, + 0x0D, 0xF5, 0x75, 0xB5, 0x35, 0xD5, 0x55, 0x95, + 0x15, 0xE5, 0x65, 0xA5, 0x25, 0xC5, 0x45, 0x85, + 0x05, 0xF9, 0x79, 0xB9, 0x39, 0xD9, 0x59, 0x99, + 0x19, 0xE9, 0x69, 0xA9, 0x29, 0xC9, 0x49, 0x89, + 0x09, 0xF1, 0x71, 0xB1, 0x31, 0xD1, 0x51, 0x91, + 0x11, 0xE1, 0x61, 0xA1, 0x21, 0xC1, 0x41, 0x81, + 0x01, 0xFB, 0x7B, 0xBB, 0x3B, 0xDB, 0x5B, 0x9B, + 0x1B, 0xEB, 0x6B, 0xAB, 0x2B, 0xCB, 0x4B, 0x8B, + 0x0B, 0xF3, 0x73, 0xB3, 0x33, 0xD3, 0x53, 0x93, + 0x13, 0xE3, 0x63, 0xA3, 0x23, 0xC3, 0x43, 0x83, + 0x03, 0xF7, 0x77, 0xB7, 0x37, 0xD7, 0x57, 0x97, + 0x17, 0xE7, 0x67, 0xA7, 0x27, 0xC7, 0x47, 0x87, + 0x07, 0xEF, 0x6F, 0xAF, 0x2F, 0xCF, 0x4F, 0x8F, + 0x0F, 0xDF, 0x5F, 0x9F, 0x1F, 0xBF, 0x3F, 0x7F, + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE +}; + writeRecord(smallCostumeScaleTable, sizeof(smallCostumeScaleTable), GBVARS_SMALLSCALETABLE_INDEX , GBVARS_SCUMM); +} +void addCostume() { + addCostume_smallCostumeScaleTable(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c b/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c new file mode 100644 index 0000000000..98ed7f919e --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c @@ -0,0 +1,100 @@ +#include +#include "b_globals.h" + +typedef struct { + Int32 num; + char string[80]; +} ResString; + +static void addDialogs_string_map_table_v7() { + ResString string_map_table_v7[] = { + {96, "game name and version"}, //that's how it's supposed to be + {77, "Select a game to LOAD"}, + {76, "Name your SAVE game"}, + {70, "save"}, //boot8 + {71, "load"}, //boot9 + {72, "play"}, //boot10 + {73, "cancel"}, //boot11 + {74, "quit"}, //boot12 + {75, "ok"}, //boot13 + {85, "game paused"}, // boot3 + + /* this is the almost complete string map for v7 + {63, "how may I serve you?"}, + {64, "the dig v1.0"}, //(game name/version) + {67, "text display only"}, + {68, "c:\\dig"}, //boot007 (save path ?) + {69, "the dig"}, //boot21 (game name) + {70, "save"}, //boot8 + {71, "load"}, //boot9 + {72, "play"}, //boot10 + {73, "cancel"}, //boot11 + {74, "quit"}, //boot12 + {75, "ok"}, //boot13 + {76, "name your save game"}, //boot19 + {77, "select a game to load"}, //boot20 + {78, "you must enter a name"},//boot14 + {79, "saving '%s'"}, //boot17 + {80, "loading '%s'"}, //boot18 + {81, "the game was NOT saved"}, //boot15 + {82, "the game was NOT loaded"}, //boot16 + {83, "how may I serve you?"}, + {84, "how may I serve you?"}, + {85, "game paused"}, // boot3 + {86, "Are you sure you want to restart"}, + {87, "Are you sure you want to quit?"}, //boot05 + {89, "how may I serve you?"}, + {90, "music"}, //boot22 + {91, "voice"}, //boot23 + {92, "sfx"}, //boot24 + {93, "disabled"}, //boot25 + {94, "text speed"}, //boot26 + {95, "text display"}, //boot27 + {96, "the dig v1.0"},*/ + + }; + writeRecord(string_map_table_v7, sizeof(string_map_table_v7), GBVARS_STRINGMAPTABLEV7_INDEX , GBVARS_SCUMM); +} + +static void addDialogs_string_map_table_v6() { + ResString string_map_table_v6[] = { + {117, "How may I serve you?"}, + {109, "Select a game to LOAD"}, + {108, "Name your SAVE game"}, + {96, "Save"}, + {97, "Load"}, + {98, "Play"}, + {99, "Cancel"}, + {100, "Quit"}, + {101, "OK"}, + {93, "Game paused"}, + }; + writeRecord(string_map_table_v6, sizeof(string_map_table_v6), GBVARS_STRINGMAPTABLEV6_INDEX , GBVARS_SCUMM); +} + +static void addDialogs_string_map_table_v5() { + ResString string_map_table_v5[] = { + {28, "How may I serve you?"}, + {20, "Select a game to LOAD"}, + {19, "Name your SAVE game"}, + {7, "Save"}, + {8, "Load"}, + {9, "Play"}, + {10, "Cancel"}, + {11, "Quit"}, + {12, "OK"}, + {4, "Game paused"} + }; + writeRecord(string_map_table_v5, sizeof(string_map_table_v5), GBVARS_STRINGMAPTABLEV5_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addDialogs() { + addDialogs_string_map_table_v7(); + addDialogs_string_map_table_v6(); + addDialogs_string_map_table_v5(); + +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c b/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c new file mode 100644 index 0000000000..0ac90e5636 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c @@ -0,0 +1,111 @@ +#include +#include "b_globals.h" +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +typedef struct { + Int8 numOfIterations; + Int8 deltaTable[16]; // four times l / t / r / b + Int8 stripTable[16]; // ditto +} TransitionEffect; +/////////////////////////////////////////////////////////////////// +static void addGfx_transitionEffects() { + TransitionEffect transitionEffects[5] = { + // Iris effect (looks like an opening/closing camera iris) + { + 13, // Number of iterations + { + 1, 1, -1, 1, + -1, 1, -1, -1, + 1, -1, -1, -1, + 1, 1, 1, -1 + }, + { + 0, 0, 39, 0, + 39, 0, 39, 24, + 0, 24, 39, 24, + 0, 0, 0, 24 + } + }, + + // Box wipe (a box expands from the upper-left corner to the lower-right corner) + { + 25, // Number of iterations + { + 0, 1, 2, 1, + 2, 0, 2, 1, + 2, 0, 2, 1, + 0, 0, 0, 0 + }, + { + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 0, 1, 0, + 255, 0, 0, 0 + } + }, + + // Box wipe (a box expands from the lower-right corner to the upper-left corner) + { + 25, // Number of iterations + { + -2, -1, 0, -1, + -2, -1, -2, 0, + -2, -1, -2, 0, + 0, 0, 0, 0 + }, + { + 39, 24, 39, 24, + 39, 24, 39, 24, + 38, 24, 38, 24, + 255, 0, 0, 0 + } + }, + + // Inverse box wipe + { + 25, // Number of iterations + { + 0, -1, -2, -1, + -2, 0, -2, -1, + -2, 0, -2, -1, + 0, 0, 0, 0 + }, + { + 0, 24, 39, 24, + 39, 0, 39, 24, + 38, 0, 38, 24, + 255, 0, 0, 0 + } + }, + + // Inverse iris effect, specially tailored for V1/V2 games + { + 9, // Number of iterations + { + -1, -1, 1, -1, + -1, 1, 1, 1, + -1, -1, -1, 1, + 1, -1, 1, 1 + }, + { + 7, 7, 32, 7, + 7, 8, 32, 8, + 7, 8, 7, 8, + 32, 7, 32, 8 + } + } + }; + + writeRecord(transitionEffects, sizeof(transitionEffects), GBVARS_TRANSITIONEFFECTS_INDEX , GBVARS_SCUMM); +} + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addGfx() { + addGfx_transitionEffects(); + +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c b/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c new file mode 100644 index 0000000000..f3f4261d99 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c @@ -0,0 +1,432 @@ +#include +#include "b_globals.h" + +enum Language { + UNK_LANG = -1, // Use default language (i.e. none specified) + EN_ANY = 0, + EN_USA = 1, + DE_DEU = 2, + FR_FRA = 3, + IT_ITA = 4, + PT_BRA = 5, + ES_ESP = 6, + JA_JPN = 7, + ZH_TWN = 8, + KO_KOR = 9, + SE_SWE = 10, + EN_GRB = 11, + HB_ISR = 20, + RU_RUS = 21, + CZ_CZE = 22, + NL_NLD = 23, + NB_NOR = 24 +}; + +enum Platform { + kPlatformUnknown = -1, + kPlatformPC = 0, + kPlatformAmiga = 1, + kPlatformAtariST = 2, + kPlatformMacintosh = 3, + kPlatformFMTowns = 4, + kPlatformWindows = 5, + kPlatformNES = 6, + kPlatformC64 = 7 +/* + kPlatformSEGA, + kPlatformPCEngine +*/ +}; + +typedef struct { + const char md5[32 + 1]; + const char target[16 + 1]; + enum Language language; + enum Platform platform; +} MD5Table; + +static void addScumm_mdtable() { + MD5Table md5table[] = { + { "0305e850382b812fec6e5998ef88a966", "pjs-demo", NL_NLD, kPlatformWindows }, + { "035deab53b47bc43abc763560d0f8d4b", "playfate", EN_ANY, kPlatformPC }, + { "037385a953789190298494d92b89b3d0", "catalog2", EN_ANY, kPlatformWindows }, + { "0425954a9db5c340861672892c3e678d", "samdemo", EN_ANY, kPlatformMacintosh }, + { "04401d747f1a2c1c4b388daff71ed378", "ft", DE_DEU, kPlatformMacintosh }, + { "04687cdf7f975a89d2474929f7b80946", "indy3towns", EN_ANY, kPlatformFMTowns }, + { "0557df19f046a84c2fdc63507c6616cb", "farmdemo", NL_NLD, kPlatformWindows }, + { "06b187468113f9ae5a400b148a847fac", "atlantis", EN_ANY, kPlatformMacintosh }, + { "07433205acdca3bc553d0e731588b35f", "airport", EN_ANY, kPlatformWindows }, + { "07b810e37be7489263f7bc7627d4765d", "freddi4", RU_RUS, kPlatformWindows }, + { "084ed0fa98a6d1e9368d67fe9cfbd417", "freddemo", EN_ANY, kPlatformWindows }, + { "0855496dde35356b1a9691e22ba84cdc", "freddemo", EN_ANY, kPlatformWindows }, + { "08cc5c3eedaf72ebe12734eee94f7fa2", "balloon", EN_ANY, kPlatformUnknown }, + { "09820417db26687bb7fe0c83cc4c553b", "ft", EN_ANY, kPlatformUnknown }, + { "0a212fa35fa8421f31c1f3961272caf0", "monkeyvga", DE_DEU, kPlatformAmiga }, + { "0ab19be9e2a3f6938226638b2a3744fe", "timedemo", EN_ANY, kPlatformUnknown }, + { "0ac41e2e3d2174e5a042a6b565328dba", "racedemo", EN_ANY, kPlatformUnknown }, + { "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", RU_RUS, kPlatformPC }, + { "0cccfa5223099a60e76cfcca57a1a141", "freddi3", NL_NLD, kPlatformWindows }, + { "0d1b69471605201ef2fa9cec1f5f02d2", "maniac", ES_ESP, kPlatformPC }, + { "0e4c5d54a0ad4b26132e78b5ea76642a", "snmidemo", EN_ANY, kPlatformPC }, + { "0f5935bd5e88ba6f09e558d64459746d", "1grademo", EN_ANY, kPlatformWindows }, + { "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", IT_ITA, kPlatformUnknown }, + { "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3EGA", FR_FRA, kPlatformAtariST }, + { "0fb73eddfcf584c02ba097984df131ba", "samnmax", DE_DEU, kPlatformUnknown }, + { "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", EN_ANY, kPlatformWindows }, + { "114acdc2659a273c220f86ee9edb24c1", "maniac", FR_FRA, kPlatformPC }, + { "11ddf1fde76e3156eb3a38da213f484e", "monkey2", IT_ITA, kPlatformAmiga }, + { "11e6e244078ff09b0f3832e35420e0a7", "catalog", EN_ANY, kPlatformWindows }, + { "132bff65e6367c09cc69318ce1b59333", "monkey2", EN_ANY, kPlatformAmiga }, + { "145bd3373574feb668cc2eea2ec6cf86", "balloon", RU_RUS, kPlatformWindows }, + { "14d48c95b43ddeb983254cf6c43851f1", "freddi4", NL_NLD, kPlatformWindows }, + { "157367c3c21e0d03a0cba44361b4cf65", "indy3EGA", EN_ANY, kPlatformAtariST }, + { "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkeyvga", EN_ANY, kPlatformPC }, + { "16542a7342a918bfe4ba512007d36c47", "FreddisFunShop", EN_ANY, kPlatformUnknown }, + { "16effd200aa6b8abe9c569c3e578814d", "f4-demo", NL_NLD, kPlatformWindows }, + { "179879b6e35c1ead0d93aab26db0951b", "fbear", EN_ANY, kPlatformWindows }, + { "17b5d5e6af4ae89d62631641d66d5a05", "indy3", IT_ITA, kPlatformPC }, + { "17fa250eb72dae2dad511ba79c0b6b0a", "dottdemo", FR_FRA, kPlatformPC }, + { "182344899c2e2998fca0bebcd82aa81a", "atlantis", EN_ANY, kPlatformPC }, + { "183d7464902d40d00800e8ee1f04117c", "maniac", DE_DEU, kPlatformPC }, + { "1875b90fade138c9253a8e967007031a", "indy3", UNK_LANG, kPlatformPC }, + { "187d315f6b5168f68680dfe8c3d76a3e", "loom", HB_ISR, kPlatformPC }, + { "1900e501a52fbf55bde6e4196f6d2aa6", "zak", IT_ITA, kPlatformPC }, + { "19263586f749a560c1adf8b3393a9593", "socks", RU_RUS, kPlatformWindows }, + { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", EN_ANY, kPlatformMacintosh }, + { "1c792d28376d45e145cb916bca0400a2", "sf2-demo", NL_NLD, kPlatformUnknown }, + { "1ca86e2cf9aaa2068738a1e5ba477e60", "zakTowns", JA_JPN, kPlatformFMTowns }, + { "1d05cd189e4908f79b57e78a4402f292", "monkeyega", EN_ANY, kPlatformPC }, + { "1dd3c11ea4439adfe681e4e405b624e1", "monkeyega", FR_FRA, kPlatformPC }, + { "1dd7aa088e09f96d06818aa9a9deabe0", "indy3EGA", EN_ANY, kPlatformMacintosh }, + { "1fbebd7b2b692df5297870447a80cfed", "atlantis", DE_DEU, kPlatformPC }, + { "2012f854d83d9cc6f73b2b544cd8bbf8", "water", RU_RUS, kPlatformWindows }, + { "2108d83dcf09f8adb4bc524669c8cf51", "PuttTime", EN_ANY, kPlatformUnknown }, + { "21a6592322f92550f144f68a8a4e685e", "dig", FR_FRA, kPlatformMacintosh }, + { "21abe302e1b1e2b66d6f5c12e241ebfd", "freddicove", RU_RUS, kPlatformWindows }, + { "225e18566e810c634bf7de63e7568e3e", "mustard", EN_ANY, kPlatformUnknown }, + { "22c9eb04455440131ffc157aeb8d40a8", "fbdemo", EN_ANY, kPlatformWindows }, + { "22d07d6c386c9c25aca5dac2a0c0d94b", "maniac", SE_SWE, kPlatformNES }, + { "22f4ea88a09da12df9308ba30bcb7d0f", "loom", EN_ANY, kPlatformPC }, + { "2723fea3dae0cb47768c424b145ae0e7", "tentacle", EN_ANY, kPlatformPC }, + { "27b3a4224ad63d5b04627595c1c1a025", "zak", IT_ITA, kPlatformAmiga }, + { "28d24a33448fab6795850bc9f159a4a2", "indydemo", JA_JPN, kPlatformFMTowns }, + { "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", EN_ANY, kPlatformPC }, + { "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", ES_ESP, kPlatformPC }, + { "2ccd8891ce4d3f1a334d21bff6a88ca2", "monkey", EN_ANY, kPlatformMacintosh }, + { "2d1e891fe52df707c30185e52c50cd92", "monkey", EN_ANY, kPlatformPC }, + { "2d388339d6050d8ccaa757b64633954e", "zakTowns", EN_ANY, kPlatformFMTowns }, + { "2d4536a56e01da4b02eb021e7770afa2", "zakTowns", EN_ANY, kPlatformFMTowns }, + { "2e85f7aa054930c692a5b1bed1dfc295", "footdemo", EN_ANY, kPlatformUnknown }, + { "2fe369ad70f52a8cf7ad6077ee64f81a", "loom", DE_DEU, kPlatformAmiga }, + { "305d3dd57c96c65b017bc70c8c7cfb5e", "monkey", DE_DEU, kPlatformPC }, + { "30ba1e825d4ad2b448143ae8df18482a", "pj2demo", NL_NLD, kPlatformWindows }, + { "319a4dde52c7960b5aae8a1ec348d918", "monkeyvga", DE_DEU, kPlatformAmiga }, + { "31aa57f460a3d12429f0552a46a90b39", "puttdemo", EN_ANY, kPlatformPC }, + { "31b8fda4c8c7413fa6b39997e776eba4", "loomTowns", JA_JPN, kPlatformFMTowns }, + { "32709cbeeb3044b34129950860a83f14", "pajama2", RU_RUS, kPlatformWindows }, + { "32a433dea56b86a55b59e4ff7d755711", "ftpcdemo", EN_ANY, kPlatformPC }, + { "330f631502e381a4e199a3f7cb483c20", "indy3EGA", DE_DEU, kPlatformAmiga }, + { "3433be9866ca4261b2d5d25374e3f243", "monkeyvga", FR_FRA, kPlatformAmiga }, + { "3486ede0f904789267d4bcc5537a46d4", "zoodemo", EN_ANY, kPlatformMacintosh }, + { "35a2d3040fa512f8232d9e443319d84d", "dig", EN_ANY, kPlatformMacintosh }, + { "362c1d281fb9899254cda66ad246c66a", "digdemo", EN_ANY, kPlatformUnknown }, + { "3686cf8f89e102ececf4366e1d2c8126", "monkey2", EN_ANY, kPlatformPC }, + { "36a6750e03fb505fc19fc2bf3e4dbe91", "pj2demo", EN_ANY, kPlatformUnknown }, + { "37aed3f91c1ef959e0bd265f9b13781f", "pajama", EN_ANY, kPlatformUnknown }, + { "37f56ceb13e401a7ac7d9e6b37fecaf7", "loom", EN_ANY, kPlatformPC }, + { "37ff1b308999c4cca7319edfcc1280a0", "puttdemo", EN_ANY, kPlatformWindows }, + { "3824e60cdf639d22f6df92a03dc4b131", "fbear", EN_ANY, kPlatformPC }, + { "387a544b8b10b26912d8413bab63a853", "mi2demo", EN_ANY, kPlatformPC }, + { "3905799e081b80a61d4460b7b733c206", "maniac", EN_ANY, kPlatformNES }, + { "3938ee1aa4433fca9d9308c9891172b1", "zakTowns", EN_ANY, kPlatformFMTowns }, + { "399b217b0c8d65d0398076da486363a9", "indy3", DE_DEU, kPlatformPC }, + { "39cb9dec16fa16f38d79acd80effb059", "loom", FR_FRA, kPlatformAmiga }, + { "39cb9dec16fa16f38d79acd80effb059", "loom", IT_ITA, kPlatformAmiga }, + { "3a03dab514e4038df192d8a8de469788", "atlantis", EN_ANY, kPlatformAmiga }, + { "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3towns", JA_JPN, kPlatformFMTowns }, + { "3b301b7892f883ce42ab4be6a274fea6", "samnmax", EN_ANY, kPlatformPC }, + { "3de99ef0523f8ca7958faa3afccd035a", "spyfox", EN_ANY, kPlatformUnknown }, + { "3df6ead57930488bc61e6e41901d0e97", "fbear", EN_ANY, kPlatformMacintosh }, + { "40564ec47da48a67787d1f9bd043902a", "maniac", EN_ANY, kPlatformPC }, + { "4167a92a1d46baa4f4127d918d561f88", "tentacle", EN_ANY, kPlatformUnknown }, + { "430bc518017b6fac046f58bab6baad5d", "monkey2", JA_JPN, kPlatformFMTowns }, + { "45082a5c9f42ba14dacfe1fdeeba819d", "ff5demo", EN_ANY, kPlatformWindows }, + { "45152f7cf2ba8f43cf8a8ea2e740ae09", "monkeyvga", ES_ESP, kPlatformPC }, + { "46b53fd430adcfbed791b48a0d4b079f", "funpack", EN_ANY, kPlatformPC }, + { "477dbafbd66a53c98416dc01aef019ad", "monkeyega", IT_ITA, kPlatformPC }, + { "47e75b1bdcb44c78cb94883d1731ccf8", "fbdemo", EN_ANY, kPlatformPC }, + { "49210e124e4c2b30f1290a9ef6306301", "monkeyega", EN_ANY, kPlatformPC }, + { "499c958affc394f2a3868f1eb568c3ee", "f4-demo", NL_NLD, kPlatformWindows }, + { "4af4a6b248103c1fe9edef619677f540", "moondemo", EN_ANY, kPlatformMacintosh }, + { "4ba37f835be11a59d969f90f272f575b", "water", EN_ANY, kPlatformUnknown }, + { "4ba7fb331296c283e73d8f5b2096e551", "samnmax", ES_ESP, kPlatformUnknown }, + { "4bedb49943df95a9c900a5a82ccbe9de", "ft", FR_FRA, kPlatformUnknown }, + { "4cb9c3618f71668f8e4346c8f323fa82", "monkey2", EN_ANY, kPlatformMacintosh }, + { "4ce2d5b355964bbcb5e5ce73236ef868", "freddicove", RU_RUS, kPlatformWindows }, + { "4d34042713958b971cb139fba4658586", "indy4", JA_JPN, kPlatformFMTowns }, + { "4dbff3787aedcd96b0b325f2d92d7ad9", "maze", EN_ANY, kPlatformUnknown }, + { "4dc780f1bc587a193ce8a97652791438", "loom", EN_ANY, kPlatformAmiga }, + { "4e5867848ee61bc30d157e2c94eee9b4", "timedemo", EN_ANY, kPlatformUnknown }, + { "4edbf9d03550f7ba01e7f34d69b678dd", "spydemo", NL_NLD, kPlatformWindows }, + { "4f04b321a95d4315ce6d65f8e1dd0368", "maze", EN_ANY, kPlatformUnknown }, + { "4f267a901719623de7dde83e47d5b474", "atlantis", DE_DEU, kPlatformAmiga }, + { "4f580a021eee026f3b4589e17d130d78", "freddi4", UNK_LANG, kPlatformUnknown }, + { "4fa6870d9bc8c313b65d54b1da5a1891", "pajama", NL_NLD, kPlatformWindows }, + { "4fbbe9f64b8bc547503a379a301183ce", "tentacle", IT_ITA, kPlatformUnknown }, + { "5057fb0e99e5aa29df1836329232f101", "freddi2", UNK_LANG, kPlatformWindows }, + { "507bb360688dc4180fdf0d7597352a69", "freddi", SE_SWE, kPlatformWindows }, + { "50fcdc982a25063b78ad46bf389b8e8d", "tentacle", IT_ITA, kPlatformPC }, + { "51305e929e330e24a75a0351c8f9975e", "freddi2", EN_ANY, kPlatformUnknown }, + { "5262a27afcaee04e5c4900220bd463e7", "PuttsFunShop", EN_ANY, kPlatformUnknown }, + { "52a4bae0746a11d7b1e8554e91a6645c", "zak", FR_FRA, kPlatformPC }, + { "53e94115b55dd51d4b8ff0871aa1df1e", "spydemo", EN_ANY, kPlatformUnknown }, + { "54a936ad06161ff7bfefcb96200f7bff", "monkeyvga", EN_ANY, kPlatformAmiga }, + { "55518cd73cf9c6d23ea29c51ee06bdfe", "ft", IT_ITA, kPlatformUnknown }, + { "55e4cc866ff9046824e1c638ba2b8c7f", "ft", RU_RUS, kPlatformUnknown }, + { "566165a7338fa11029e7c14d94fa70d0", "freddemo", EN_ANY, kPlatformWindows }, + { "5798972220cd458be2626d54c80f71d7", "atlantis", IT_ITA, kPlatformAmiga }, + { "57b0d89af79befe1cabce3bece869e7f", "tentacle", DE_DEU, kPlatformPC }, + { "589601b676c98b1c0c987bc031ab68b3", "chase", EN_ANY, kPlatformUnknown }, + { "58fdf4c7ad13540a734e18f8584cad89", "puttzoo", EN_ANY, kPlatformMacintosh }, + { "590e6546aacd0d374b7f3a4f53013ab1", "freddicove", EN_ANY, kPlatformUnknown }, + { "5a35e36fd777e9c37a49c5b2faca52f9", "loom", EN_ANY, kPlatformPC }, + { "5b08000a9c47b2887df6506ac767ca68", "fbear", EN_ANY, kPlatformUnknown }, + { "5bd335265a61caa3d78956ad9f88ba23", "footdemo", EN_ANY, kPlatformUnknown }, + { "5c21fc49aee8f46e58fef21579e614a1", "thinker1", EN_ANY, kPlatformUnknown }, + { "5d88b9d6a88e6f8e90cded9d01b7f082", "loomcd", EN_ANY, kPlatformPC }, + { "5e8fb66971a60e523e5afbc4c129c0e8", "socks", EN_ANY, kPlatformUnknown }, + { "5fbe557049892eb4b709d90916ec97ca", "indy3EGA", EN_ANY, kPlatformPC }, + { "600abd3e9f47e63e670188b7e4e86ac7", "spyozon", EN_ANY, kPlatformUnknown }, + { "6027e9ca9c35746d95dee2068cec17e5", "zak", DE_DEU, kPlatformAmiga }, + { "60ba818dc3bede86d40357e3913f8505", "ft", EN_ANY, kPlatformUnknown }, + { "613f64f78ea26c7353b2a5940eb61d6a", "zak", FR_FRA, kPlatformAtariST }, + { "624cdb93654667c869d204a64af7e57f", "maniac", EN_ANY, kPlatformPC }, + { "6271130f440066830eca9056c1d7926f", "water", RU_RUS, kPlatformWindows }, + { "66236cd1aec24e1d4aff4c4cc93b7e18", "indy3EGA", FR_FRA, kPlatformPC }, + { "66fd5ff9a810dfeb6d6bdada18221140", "monkeyvga", IT_ITA, kPlatformPC }, + { "672dec94b82f7f0877ebb5b5cf7f4bc1", "pajama", EN_ANY, kPlatformUnknown }, + { "675d71151e9b5a968c8ce46d9fbf4cbf", "zak", EN_ANY, kPlatformPC }, + { "68155a6bf082221525f431c2cbdac8ab", "SamsFunShop", EN_ANY, kPlatformUnknown }, + { "684732efb5799c0f78804c99d8de9aba", "puttputt", EN_ANY, kPlatformMacintosh }, + { "6886e5d08cee329b1f2e743ae2e3ceed", "monkey2", DE_DEU, kPlatformPC }, + { "695fe0b3963333b7e15b37514db3c745", "kinddemo", EN_ANY, kPlatformUnknown }, + { "697c9b7c55a05d8199c48b48e379d2c8", "puttmoon", HB_ISR, kPlatformPC }, + { "69ea626f1f87eecb78ea0d6c6b983a1d", "monkey2", IT_ITA, kPlatformPC }, + { "6a30a07f353a75cdc602db27d73e1b42", "puttputt", EN_ANY, kPlatformWindows }, + { "6af2419fe3db5c2fdb091ae4e5833770", "racedemo", NL_NLD, kPlatformUnknown }, + { "6b19d0e25cbf720d05822379b8b90ed9", "timedemo", NL_NLD, kPlatformWindows }, + { "6b257bb2827dd894b8109a50a1a18b5a", "FF5Demo", NL_NLD, kPlatformWindows }, + { "6b3ec67da214f558dc5ceaa2acd47453", "indy3EGA", EN_ANY, kPlatformPC }, + { "6bf70eee5de3d24d2403e0dd3d267e8a", "spyfox", EN_ANY, kPlatformWindows }, + { "6c2bff0e327f2962e809c2e1a82d7309", "monkeyvga", EN_ANY, kPlatformAmiga }, + { "6df20c50c1ab19799de9be7ae7716881", "fbdemo", EN_ANY, kPlatformMacintosh }, + { "6e959d65358eedf9b68b81e304b97fa4", "tentacle", DE_DEU, kPlatformUnknown }, + { "6ea966b4d660c870b9ee790d1fbfc535", "monkey2", ES_ESP, kPlatformAmiga }, + { "6f0be328c64d689bb606d22a389e1b0f", "loom", EN_ANY, kPlatformMacintosh }, + { "6f6ef668c608c7f534fea6e6d3878dde", "indy3EGA", DE_DEU, kPlatformPC }, + { "701246819d1a70573f41bf33fc19214f", "soccer", EN_ANY, kPlatformWindows }, + { "7020931d5a2be0a49d68e7a1882363e4", "zak", EN_ANY, kPlatformPC }, + { "71523b539491527d9860f4407faf0411", "monkeyega", EN_ANY, kPlatformPC }, + { "71fe97c3108678cf604f14abe342341b", "spyfox2", NL_NLD, kPlatformWindows }, + { "7222f260253f325c21fcfa68b5bfab67", "sf2-demo", EN_ANY, kPlatformUnknown }, + { "72ac6bc980d5101c2142189d746bd62f", "spyfox", RU_RUS, kPlatformWindows }, + { "73e5ab7dbb9a8061cc6d25df02dbd1e7", "loom", EN_ANY, kPlatformPC }, + { "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", RU_RUS, kPlatformWindows }, + { "754feb59d3bf86b8a00840df74fd7b26", "f3-mdemo", NL_NLD, kPlatformWindows }, + { "75ba23fff4fd63fa446c02864f2a5a4b", "zak", IT_ITA, kPlatformPC }, + { "75bff95816b84672b877d22a911ab811", "freddi3", RU_RUS, kPlatformWindows }, + { "771bc18ec6f93837b839c992b211904b", "monkeyega", DE_DEU, kPlatformPC }, + { "77f5c9cc0986eb729c1a6b4c8823bbae", "zakTowns", EN_ANY, kPlatformFMTowns }, + { "780e4a0ae2ff17dc296f4a79543b44f8", "puttmoon", UNK_LANG, kPlatformPC }, + { "78bd5f036ea35a878b74e4f47941f784", "freddi4", RU_RUS, kPlatformWindows }, + { "7974365d3dc0f43a2748c975f91ff042", "monkey2", ES_ESP, kPlatformPC }, + { "7bad72e332a59f9fcc1d437f4edad32a", "puttcircus", RU_RUS, kPlatformUnknown }, + { "7c2e76087027eeee9c8f8985f93a1cc5", "f4-demo", EN_ANY, kPlatformUnknown }, + { "7ddeaf52c8b9a50551ce0aa2ac811d07", "BluesABCTimeDemo", EN_ANY, kPlatformUnknown }, + { "7e151c17adf624f1966c8fc5827c95e9", "puttputt", EN_ANY, kPlatformUnknown }, + { "7ea2da67ebabea4ac20cee9f4f9d2934", "airdemo", EN_ANY, kPlatformMacintosh }, + { "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", FR_FRA, kPlatformUnknown }, + { "7f45ddd6dbfbf8f80c0c0efea4c295bc", "maniac", EN_ANY, kPlatformPC }, + { "7fc6cdb46b4c9d384c52327f4bca6416", "football", EN_ANY, kPlatformWindows }, + { "810a9da887aefa597b0cf3c77d262897", "BluesABCTimeDemo", EN_ANY, kPlatformWindows }, + { "81bbfa181184cb494e7a81dcfa94fbd9", "maniac", FR_FRA, kPlatformNES }, + { "8299d9b8a1b0e7b881bae7a9971dc5e2", "zak", EN_ANY, kPlatformAtariST }, + { "8368f552b1e3eba559f8d559bcc4cadb", "freddi3", UNK_LANG, kPlatformUnknown }, + { "861e59ed72a1cd0e6d454f7ee7e2bf3d", "comi", RU_RUS, kPlatformUnknown }, + { "86be8ada36371d4fdc35659d0e912a26", "indy3EGA", ES_ESP, kPlatformPC }, + { "86c9902b7bec1a17926d4dae85beaa45", "airdemo", EN_ANY, kPlatformWindows }, + { "870d1e3c86bc50846d808d14a36b4e08", "monkeyvga", ES_ESP, kPlatformAmiga }, + { "87f6e8037b7cc996e13474b491a7a98e", "maniac", IT_ITA, kPlatformPC }, + { "8801fb4a1200b347f7a38523339526dd", "jungle", EN_ANY, kPlatformWindows }, + { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", ES_ESP, kPlatformUnknown }, + { "898ce8eb1234a955ef75e87141902bb3", "freddi3", RU_RUS, kPlatformWindows }, + { "8a484262363a8e18be87112454f1456b", "pjgames", EN_ANY, kPlatformWindows }, + { "8aa05d3cdb0e795436043f0546af2da2", "tentacle", FR_FRA, kPlatformUnknown }, + { "8afb3cf9f95abf208358e984f0c9e738", "funpack", EN_ANY, kPlatformUnknown }, + { "8bdb0bf87b5e303dd35693afb9351215", "ft", DE_DEU, kPlatformUnknown }, + { "8d479e36f35e80257dfc102cf4b8a912", "farmdemo", EN_ANY, kPlatformWindows }, + { "8e3241ddd6c8dadf64305e8740d45e13", "balloon", EN_ANY, kPlatformUnknown }, + { "8e4ee4db46954bfe2912e259a16fad82", "monkey2", FR_FRA, kPlatformPC }, + { "8eb84cee9b429314c7f0bdcf560723eb", "monkey", EN_ANY, kPlatformFMTowns }, + { "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", EN_ANY, kPlatformUnknown }, + { "8f3758ff98c9c5d78e5d635222cad026", "atlantis", IT_ITA, kPlatformPC }, + { "8fec68383202d38c0d25e9e3b757c5df", "comidemo", UNK_LANG, kPlatformUnknown }, + { "8ffd618a776a4c0d8922bb28b09f8ce8", "airdemo", EN_ANY, kPlatformWindows }, + { "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", HB_ISR, kPlatformPC }, + { "90c755e1c9b9b8a4129d37b2259d0655", "chase", EN_ANY, kPlatformUnknown }, + { "910e31cffb28226bd68c569668a0d6b4", "monkeyega", ES_ESP, kPlatformPC }, + { "91469353f7be1b122fa88d23480a1320", "zak", FR_FRA, kPlatformAmiga }, + { "92b078d9d6d9d751da9c26b8b3075779", "tentacle", FR_FRA, kPlatformPC }, + { "92e7727e67f5cd979d8a1070e4eb8cb3", "puttzoo", EN_ANY, kPlatformUnknown }, + { "92fc0073a4cf259ff36070ecb8628ba8", "thinkerk", EN_ANY, kPlatformUnknown }, + { "96a3069a3c63caa7329588ce1fef41ee", "spyozon", RU_RUS, kPlatformUnknown }, + { "9708cf716ed8bcc9ff3fcfc69413b746", "puttputt", EN_ANY, kPlatformPC }, + { "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", EN_ANY, kPlatformUnknown }, + { "98744fe66ff730e8c2b3b1f58803ab0b", "playfate", EN_ANY, kPlatformPC }, + { "99a3699f80b8f776efae592b44b9b991", "maniac", FR_FRA, kPlatformPC }, + { "99b6f822b0b2612415407865438697d6", "fate", EN_ANY, kPlatformPC }, + { "9bc548e179cdb0767009401c094d0895", "maniac", DE_DEU, kPlatformAmiga }, + { "9bd2a8f72613e715c199246dd511e10f", "atlantis", ES_ESP, kPlatformPC }, + { "9bda5fee51d2fda5253d02c642016bf4", "spyfox", NL_NLD, kPlatformWindows }, + { "9c0fee288ad564a7d25ec3e841810d79", "indy3EGA", EN_ANY, kPlatformAmiga }, + { "9c143c5905055d5df7a0f014ab379aee", "moondemo", EN_ANY, kPlatformWindows }, + { "9c92eeaf517a31b7221ec2546ab669fd", "puttmoon", EN_ANY, kPlatformWindows }, + { "9cdd327c1034c046cb595d251c44da2f", "chase", RU_RUS, kPlatformWindows }, + { "9d4ab3e0e1d1ebc6ba8a6a4c470ed184", "spydemo", EN_ANY, kPlatformWindows }, + { "9d7b67be003fea60be4dcbd193611936", "ftdemo", EN_ANY, kPlatformMacintosh }, + { "9dc02577bf50d4cfaf3de3fbac06fbe2", "puttmoon", EN_ANY, kPlatformMacintosh }, + { "9e5e0fb43bd22f4628719b7501adb717", "monkeyega", FR_FRA, kPlatformAtariST }, + { "a194f15f51ee62badab74b9e7da97693", "bb2demo", EN_ANY, kPlatformWindows }, + { "a28135a7ade38cc0208b04507c46efd1", "spyfox", DE_DEU, kPlatformWindows }, + { "a2bb6aa0537402c1b3c2ea899ccef64b", "smaller", EN_ANY, kPlatformWindows }, + { "a3036878840720fbefa41e6965fa4a0a", "samnmax", EN_ANY, kPlatformPC }, + { "a525c1753c1db5011c00417da37887ef", "PuttTime", EN_ANY, kPlatformUnknown }, + { "a561d2e2413cc1c71d5a1bf87bf493ea", "lost", EN_ANY, kPlatformUnknown }, + { "a570381b028972d891052ee1e51dc011", "maniac", EN_ANY, kPlatformAtariST }, + { "a654fb60c3b67d6317a7894ffd9f25c5", "pj3-demo", EN_ANY, kPlatformWindows }, + { "a7cacad9c40c4dc9e1812abf6c8af9d5", "circdemo", EN_ANY, kPlatformUnknown }, + { "a85856675429fe88051744f755b72f93", "farm", EN_ANY, kPlatformWindows }, + { "a86f9c49355579c30d4a55b477c0d869", "baseball2001", EN_ANY, kPlatformUnknown }, + { "a9543ef0d79bcb47cd76ec197ad0a967", "puttmoon", EN_ANY, kPlatformUnknown }, + { "a9f2f04b1ecaab9495b59befffe9bf88", "pj3-demo", EN_ANY, kPlatformUnknown }, + { "aa6a91b7f6f119d1b7b1f2a4c9e24d59", "moondemo", EN_ANY, kPlatformPC }, + { "aa7a07d94ae853f6460be4ce0a1bf530", "monkeyega", FR_FRA, kPlatformPC }, + { "aa8a0cb65f3afbbe2c14c3f9f92775a3", "monkey", FR_FRA, kPlatformPC }, + { "aaa587701cde7e74692c68c1024b85eb", "racedemo", NL_NLD, kPlatformUnknown }, + { "ab0693e9324cfcf498fdcbb12acf8bb4", "puttcircus", EN_ANY, kPlatformUnknown }, + { "ac1642b6edfb8521ca03760126f1c250", "dottdemo", DE_DEU, kPlatformPC }, + { "ac62d50e39492ee3738b4e83a5ac780f", "freddi2", NL_NLD, kPlatformWindows }, + { "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", EN_ANY, kPlatformUnknown }, + { "ae94f110a14ce71fc515d5b648827a8f", "tentacle", ES_ESP, kPlatformPC }, + { "b23f7cd7c304d7dff08e92a96120d5b4", "zak", EN_ANY, kPlatformPC }, + { "b250d0f9cc83f80ced56fe11a4fb057c", "maniac", EN_ANY, kPlatformPC }, + { "b289a2a8cbedbf45786e0b4ad2f510f1", "samnmax", IT_ITA, kPlatformPC }, + { "b597e0403cc0002f69170e6caba7edd9", "indy3EGA", EN_ANY, kPlatformPC }, + { "b628506f7def772e40de0aa5440fb8e1", "activity", EN_ANY, kPlatformWindows }, + { "b886b0a5d909c7158a914e1d7c1c6c65", "loom", FR_FRA, kPlatformPC }, + { "b8955d7d23b4972229060d1592489fef", "freddicove", NL_NLD, kPlatformWindows }, + { "bd126753de619a495f9f22adc951c8d5", "monkey2", IT_ITA, kPlatformPC }, + { "be39a5d4db60e8aa736b9086778cb45c", "spyozon", EN_ANY, kPlatformWindows }, + { "bf8b52fdd9a69c67f34e8e9fec72661c", "farmdemo", EN_ANY, kPlatformWindows }, + { "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", EN_ANY, kPlatformWindows }, + { "c0039ad982999c92d0de81910d640fa0", "freddi", NL_NLD, kPlatformWindows }, + { "c13225cb1bbd3bc9fe578301696d8021", "game", EN_ANY, kPlatformUnknown }, + { "c24c490373aeb48fbd54caa8e7ae376d", "loom", DE_DEU, kPlatformAtariST }, + { "c25755b08a8d0d47695e05f1e2111bfc", "f4-demo", EN_ANY, kPlatformWindows }, + { "c30ef068add4277104243c31ce46c12b", "monkey2", FR_FRA, kPlatformAmiga }, + { "c3196c5349e53e387aaff1533d95e53a", "snmdemo", EN_ANY, kPlatformPC }, + { "c3b22fa4654bb580b20325ebf4174841", "puttzoo", NL_NLD, kPlatformWindows }, + { "c3df37df9d3b481b45f75283a9907c47", "loom", IT_ITA, kPlatformPC }, + { "c4787c3e8b5e2dfda90850ee800af00f ", "zak", FR_FRA, kPlatformPC }, + { "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", EN_ANY, kPlatformUnknown }, + { "c5d10e190d4b4d59114b824f2fdbd00e", "loomTowns", EN_ANY, kPlatformFMTowns }, + { "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", EN_ANY, kPlatformPC }, + { "c6907d44f1166941d982864cd42cdc89", "pajama2", DE_DEU, kPlatformWindows }, + { "c7890e038806df2bb5c0c8c6f1986ea2", "monkeyvga", EN_ANY, kPlatformPC }, + { "c7be10f775404fd9785a8b92a06d240c", "indy4", EN_ANY, kPlatformFMTowns }, + { "c83079157ec765a28de445aec9768d60", "dottdemo", EN_ANY, kPlatformPC }, + { "c8aac5e3e701874e2fa4117896f9e1b1", "freddemo", EN_ANY, kPlatformMacintosh }, + { "cb1559e8405d17a5a278a6b5ad9338d1", "f3-mdemo", EN_ANY, kPlatformUnknown }, + { "cc8ba2b0df2f9c450bcf055fe2711979", "snmdemo", DE_DEU, kPlatformPC }, + { "cd9c05e755d7bf8e9b9590ad1ebe273e", "digdemo", EN_ANY, kPlatformMacintosh }, + { "cdd760228cf1010c2903f37e788ea31c", "zak", DE_DEU, kPlatformPC }, + { "ce3edc99cd4f478c5b37104d70c68ca5", "zakTowns", JA_JPN, kPlatformFMTowns }, + { "ce6a4cef315b20fef58a95bc40a2d8d3", "monkeyega", FR_FRA, kPlatformPC }, + { "ce7733f185b838e248927c7ba1a04204", "maniac", FR_FRA, kPlatformAmiga }, + { "ce7fd0c382389a6791fc3e199c117ef4", "indy3EGA", ES_ESP, kPlatformPC }, + { "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", RU_RUS, kPlatformUnknown }, + { "cf8d13446ec6cb6222287a925fd47c1d", "baseball", EN_ANY, kPlatformWindows }, + { "cf90b4db5486ef798db78fe6fbf897e5", "pj3-demo", EN_ANY, kPlatformWindows }, + { "d06fbe28818fef7bfc45c2cdf0c0849d", "zak", DE_DEU, kPlatformPC }, + { "d0b531227a27c6662018d2bd05aac52a", "monkeyvga", DE_DEU, kPlatformPC }, + { "d37c55388294b66e53e7ced3af88fa68", "ff2-demo", EN_ANY, kPlatformUnknown }, + { "d43352a805d78b5f4936c6d7779bf575", "samnmax", RU_RUS, kPlatformPC }, + { "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", EN_ANY, kPlatformWindows }, + { "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", RU_RUS, kPlatformWindows }, + { "d4e79c3d8645b8266cd78c325bc35154", "pajama2", EN_ANY, kPlatformUnknown }, + { "d62047a6729349ab36f7ee065bf26509", "dig", RU_RUS, kPlatformUnknown }, + { "d62d248c3df6ec177405e2cb23d923b2", "indy3EGA", IT_ITA, kPlatformPC }, + { "d6dd0646404768a63e963891a96daadd", "atlantis", EN_ANY, kPlatformMacintosh }, + { "d7ab7cd6105546016e6a0d46fb36b964", "pjs-demo", EN_ANY, kPlatformUnknown }, + { "d8323015ecb8b10bf53474f6e6b0ae33", "dig", UNK_LANG, kPlatformUnknown }, + { "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", EN_ANY, kPlatformNES }, + { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", EN_ANY, kPlatformUnknown }, + { "d9d0dd93d16ab4dec55cabc2b86bbd17", "samdemo", EN_ANY, kPlatformPC }, + { "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", EN_ANY, kPlatformFMTowns }, + { "da6269b18fcb08189c0aa9c95533cce2", "monkey", IT_ITA, kPlatformPC }, + { "da669b20271b85182e9c17a2a37ea02e", "monkey2", DE_DEU, kPlatformAmiga }, + { "dd30a53035393baa5a5e222e716559af", "maniac", FR_FRA, kPlatformAtariST }, + { "de4efb910210736813c9a1185384bace", "zoodemo", EN_ANY, kPlatformWindows }, + { "debe337f73d660e951ece7c1f1c81add", "zak", EN_ANY, kPlatformPC }, + { "defb8cb9ec4b0f91acfb6b61c6129ad9", "PuttTime", RU_RUS, kPlatformWindows }, + { "df03ee021aa9b81d90cab9c26da07614", "indy3EGA", IT_ITA, kPlatformAmiga }, + { "df047cc4792150f601290357566d36a6", "freddi", EN_ANY, kPlatformUnknown }, + { "e01acc8c12ef44e8f778fe87e5f90f4e", "fbpack", EN_ANY, kPlatformUnknown }, + { "e144f5f49d9241d2a9dee2576b3d09cb", "airdemo", EN_ANY, kPlatformWindows }, + { "e17db1ddf91b39ca6bbc8ad3ed19e883", "monkey", JA_JPN, kPlatformFMTowns }, + { "e246e02db9630533a40d99c9f54a8e01", "monkey2", EN_ANY, kPlatformMacintosh }, + { "e361a7058ed8e8ebb462663c0a3ae8d6", "puttputt", HB_ISR, kPlatformPC }, + { "e41de1c2a15abbcdbf9977e2d7e8a340", "freddi2", RU_RUS, kPlatformWindows }, + { "e534d29afb3c6e0ee9dc3d53c5956714", "atlantis", DE_DEU, kPlatformAmiga }, + { "e63a0b9249b5ca4cc4d3ac34305ae360", "freddi", NB_NOR, kPlatformWindows }, + { "e689bdf67f98b1d760ce4487ec0e8d06", "indy3EGA", FR_FRA, kPlatformAmiga }, + { "e6cd81b25ab1453a8a6d3482118c391e", "pass", EN_ANY, kPlatformPC }, + { "e72bb4c2b613db2cf50f89ff6350e70a", "ft", ES_ESP, kPlatformUnknown }, + { "e781230da44a44e2f0770edb2b3b3633", "maniac", EN_ANY, kPlatformAmiga }, + { "e94c7cc3686fce406d3c91b5eae5a72d", "zak", EN_ANY, kPlatformAmiga }, + { "eae95b2b3546d8ba86ae1d397c383253", "dog", EN_ANY, kPlatformUnknown }, + { "ebd0b2c8a387f18887282afe6cad894a", "sf3-demo", EN_ANY, kPlatformUnknown }, + { "ebd324dcf06a4c49e1ba5c231eee1060", "f4-demo", EN_ANY, kPlatformUnknown }, + { "ed361270102e355afe5236954216aba2", "lost", EN_ANY, kPlatformUnknown }, + { "edfdb24a499d92c59f824c52987c0eec", "atlantis", FR_FRA, kPlatformPC }, + { "ef347474f3c7be3b29584eaa133cca05", "samnmax", FR_FRA, kPlatformPC }, + { "ef74d9071d4e564b037cb44bd6774de7", "fbear", HB_ISR, kPlatformPC }, + { "efe0a04a703e765ebebe92b6c8aa6b86", "baseball2003", EN_ANY, kPlatformWindows }, + { "f049e38c1f8302b5db6170f1872af89a", "monkey", ES_ESP, kPlatformPC }, + { "f06e66fd45b2f8b0f4a2833ff4476050", "fbpack", HB_ISR, kPlatformPC }, + { "f08145577e4f13584cc90b3d6e9caa55", "pj3-demo", NL_NLD, kPlatformUnknown }, + { "f237bf8a5ef9af78b2a6a4f3901da341", "pjs-demo", EN_ANY, kPlatformUnknown }, + { "f27b1ba0eadaf2a6617b2b58192d1dbf", "samnmax", DE_DEU, kPlatformPC }, + { "f3d55aea441e260e9e9c7d2a187097e0", "zoodemo", EN_ANY, kPlatformWindows }, + { "f40a7f495f59188ca57a9d1d50301bb6", "puttdemo", EN_ANY, kPlatformMacintosh }, + { "f7711f9264d4d43c2a1518ec7c10a607", "pajama3", EN_ANY, kPlatformWindows }, + { "f79e60c17cca601e411f1f75e8ee9b5a", "spyfox2", EN_ANY, kPlatformUnknown }, + { "fa127d7c4bb47d05bb1c33ddcaa9f767", "loom", DE_DEU, kPlatformPC }, + { "fb66aa42de21675116346213f176a366", "monkeyvga", IT_ITA, kPlatformAmiga }, + { "fbbbb38a81fc9d6a61d509278390a290", "farm", EN_ANY, kPlatformMacintosh }, + { "fbdd947d21e8f5bac6d6f7a316af1c5a", "spydemo", EN_ANY, kPlatformUnknown }, + { "fc53ce0e5f6562b1c1e1b4b8203acafb", "samnmax", ES_ESP, kPlatformPC }, + { "fc6b6148e80d67939d9a18697c0f626a", "monkeyega", DE_DEU, kPlatformPC }, + { "fc8d197a22146e74766e9cb0cfcaf1da", "ff2-demo", EN_ANY, kPlatformUnknown }, + { "fcb78ebecab2757264c590890c319cc5", "PuttTime", NL_NLD, kPlatformWindows }, + { "fe381e45117878b1e942cb876b050fd6", "ft", EN_ANY, kPlatformMacintosh }, + { "fe60d6b5ff51b0553ac59963123b5777", "comi", UNK_LANG, kPlatformUnknown }, + { 0, 0, UNK_LANG, kPlatformUnknown } +}; + + writeRecord(md5table, sizeof(md5table), GBVARS_MD5TABLE_INDEX , GBVARS_SCUMM); +} + +void addScummTables() { + addScumm_mdtable(); +} diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c b/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c new file mode 100644 index 0000000000..528bcf5b25 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c @@ -0,0 +1,47 @@ +#include +#include "b_globals.h" + +typedef unsigned short bitmap_t; +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +static void addNewGui_guifont() { + UInt8 guifont[] = { +0,0,99,1,226,8,4,8,6,8,6,0,0,0,0,0,0,0,0,0,0,0,8,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,4,3,7,8,7,7,8,4,5,5,8,7,4,7,3,8,7,7,7,7,8,7,7,7,7,7,3,4,7,5,7,7,8,7,7,7,7,7,7,7,7,5,7,7, +7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,7,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0, +0,0,0,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,7,0,0,0,0,0,0,0,0,1,3,6,12, +24,62,3,0,128,192,96,48,24,124,192,0,0,3,62,24,12,6,3,1,0,192,124,24,48,96,192,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,74,72,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,60,66,153,161,161,153,66,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,96,96,96,96,0,0,96,0,102,102,102,0,0,0,0,0,102,102,255,102,255,102,102,0,24,62,96,60,6,124,24,0,98,102,12,24,48,102,70,0,60,102,60,56,103,102,63,0,96,48,16,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0, +0,102,60,255,60,102,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0,48,48,96,0,0,0,126,0,0,0,0,0,0,0,0,0,96,96,0,0,3,6,12,24,48,96,0,60,102,102,102,102,102,60,0,24,24,56,24,24,24,126,0,60,102,6,12,48,96,126,0,60,102,6,28,6,102,60,0,6, +14,30,102,127,6,6,0,126,96,124,6,6,102,60,0,60,102,96,124,102,102,60,0,126,102,12,24,24,24,24,0,60,102,102,60,102,102,60,0,60,102,102,62,6,102,60,0,0,0,96,0,0,96,0,0,0,0,48,0,0,48,48,96,14,24,48,96,48,24,14,0,0,0,120,0,120,0,0,0,112,24, +12,6,12,24,112,0,60,102,6,12,24,0,24,0,0,0,0,255,255,0,0,0,24,60,102,126,102,102,102,0,124,102,102,124,102,102,124,0,60,102,96,96,96,102,60,0,120,108,102,102,102,108,120,0,126,96,96,120,96,96,126,0,126,96,96,120,96,96,96,0,60,102,96,110,102,102,60,0,102,102,102, +126,102,102,102,0,120,48,48,48,48,48,120,0,30,12,12,12,12,108,56,0,102,108,120,112,120,108,102,0,96,96,96,96,96,96,126,0,99,119,127,107,99,99,99,0,102,118,126,126,110,102,102,0,60,102,102,102,102,102,60,0,124,102,102,124,96,96,96,0,60,102,102,102,102,60,14,0,124,102,102,124, +120,108,102,0,60,102,96,60,6,102,60,0,126,24,24,24,24,24,24,0,102,102,102,102,102,102,60,0,102,102,102,102,102,60,24,0,99,99,99,107,127,119,99,0,102,102,60,24,60,102,102,0,102,102,102,60,24,24,24,0,126,6,12,24,48,96,126,0,120,96,96,96,96,96,120,0,3,6,12,24,48, +96,192,0,120,24,24,24,24,24,120,0,0,0,0,0,0,219,219,0,0,0,0,0,0,0,0,255,102,102,102,0,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,14,24,62,24,24, +24,0,0,0,62,102,102,62,6,124,0,96,96,124,102,102,102,0,0,48,0,112,48,48,120,0,0,12,0,12,12,12,12,120,0,96,96,108,120,108,102,0,0,112,48,48,48,48,120,0,0,0,102,127,127,107,99,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96, +96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102,102,102,62,12,120,0,0,126,12,24,48,126,0, +24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,97,153,134,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48, +24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,60,96,96,96,60,24,56,24,36,60,102,126,96,60,0,102,0,60,102,126,96,60,0,48,24,60,102,126,96,60,0,0,216,0,112,48,48,120,0,48,72,0,112,48,48,120,0,96,48,0,112,48,48,120,0,102,24,60,102,126,102,102,0,0,0, +0,0,0,0,0,0,24,48,124,96,120,96,124,0,0,0,108,26,126,216,110,0,30,40,40,126,72,136,142,0,24,36,60,102,102,102,60,0,102,0,60,102,102,102,60,0,48,24,60,102,102,102,60,0,24,36,0,102,102,102,62,0,48,24,102,102,102,102,62,0,0,0,0,0,0,0,0,0,102,60,102, +102,102,102,60,0,102,0,102,102,102,102,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,12,24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,28,54,54,124,102,102,124,64,0,0,0 +}; + writeRecord(guifont, sizeof(guifont), GBVARS_GUIFONT_INDEX, GBVARS_COMMON); +} + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addNewGui() { + addNewGui_guifont(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c b/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c new file mode 100644 index 0000000000..9b2a7b0987 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c @@ -0,0 +1,334 @@ +#include +#include "b_globals.h" + +static void PlayerV2_note_lengths() { + UInt8 note_lengths[] = { + 0, + 0, 0, 2, + 0, 3, 4, + 5, 6, 8, + 9, 12, 16, + 18, 24, 32, + 36, 48, 64, + 72, 96 + }; + + writeRecord(note_lengths, sizeof(note_lengths), GBVARS_NOTELENGTHS_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_hull_offsets() { + UInt16 hull_offsets[] = { + 0, 12, 24, 36, 48, 60, + 72, 88, 104, 120, 136, 256, + 152, 164, 180 + }; + + writeRecord(hull_offsets, sizeof(hull_offsets), GBVARS_HULLOFFSETS_INDEX , GBVARS_SCUMM); +} + +typedef Int16 int16; + +static void PlayerV2_hulls() { + Int16 hulls[] = { + // hull 0 + 3, -1, 0, 0, 0, 0, 0, 0, + 0, -1, 0, 0, + // hull 1 (staccato) + 3, -1, 0, 32, 0, -1, 0, 0, + 0, -1, 0, 0, + // hull 2 (legato) + 3, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + // hull 3 (staccatissimo) + 3, -1, 0, 2, 0, -1, 0, 0, + 0, -1, 0, 0, + // hull 4 + 3, -1, 0, 6, 0, -1, 0, 0, + 0, -1, 0, 0, + // hull 5 + 3, -1, 0, 16, 0, -1, 0, 0, + 0, -1, 0, 0, + // hull 6 + (int16) 60000, -1, -1000, 20, 0, 0, 0, 0, + (int16) 40000, -1, -5000, 5, 0, -1, 0, 0, + // hull 7 + (int16) 50000, -1, 0, 8, 30000, -1, 0, 0, + 28000, -1, -5000, 5, 0, -1, 0, 0, + // hull 8 + (int16) 60000, -1, -2000, 16, 0, 0, 0, 0, + 28000, -1, -6000, 5, 0, -1, 0, 0, + // hull 9 + (int16) 55000, -1, 0, 8, (int16) 35000, -1, 0, 0, + (int16) 40000, -1, -2000, 10, 0, -1, 0, 0, + // hull 10 + (int16) 60000, -1, 0, 4, -2000, 8, 0, 0, + (int16) 40000, -1, -6000, 5, 0, -1, 0, 0, + // hull 12 + 0, -1, 150, 340, -150, 340, 0, -1, + 0, -1, 0, 0, + // hull 13 == 164 + 20000, -1, 4000, 7, 1000, 15, 0, 0, + (int16) 35000, -1, -2000, 15, 0, -1, 0, 0, + + // hull 14 == 180 + (int16) 35000, -1, 500, 20, 0, 0, 0, 0, + (int16) 45000, -1, -500, 60, 0, -1, 0, 0, + + // hull misc = 196 + (int16) 44000, -1, -4400, 10, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 53000, -1, -5300, 10, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 63000, -1, -6300, 10, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 44000, -1, -1375, 32, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 53000, -1, -1656, 32, 0, -1, 0, 0, + 0, -1, 0, 0, + + // hull 11 == 256 + (int16) 63000, -1, -1968, 32, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 44000, -1, - 733, 60, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 53000, -1, - 883, 60, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 63000, -1, -1050, 60, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 44000, -1, - 488, 90, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 53000, -1, - 588, 90, 0, -1, 0, 0, + 0, -1, 0, 0, + + (int16) 63000, -1, - 700, 90, 0, -1, 0, 0, + 0, -1, 0, 0 + }; + + writeRecord(hulls, sizeof(hulls), GBVARS_HULLS_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_freqmod_lengths() { + UInt16 freqmod_lengths[] = { + 0x1000, 0x1000, 0x20, 0x2000, 0x1000 + }; + + writeRecord(freqmod_lengths, sizeof(freqmod_lengths), GBVARS_FREQMODLENGTHS_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_freqmod_offsets() { + UInt16 freqmod_offsets[] = { + 0, 0x100, 0x200, 0x302, 0x202 + }; + + writeRecord(freqmod_offsets, sizeof(freqmod_offsets), GBVARS_FREQMODOFFSETS_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_freqmod_table() { + Int8 freqmod_table[0x502] = { + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 59, 62, 65, 67, + 70, 73, 75, 78, 80, 82, 85, 87, + 89, 91, 94, 96, 98, 100, 102, 103, + 105, 107, 108, 110, 112, 113, 114, 116, + 117, 118, 119, 120, 121, 122, 123, 123, + 124, 125, 125, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 125, 125, + 124, 123, 123, 122, 121, 120, 119, 118, + 117, 116, 114, 113, 112, 110, 108, 107, + 105, 103, 102, 100, 98, 96, 94, 91, + 89, 87, 85, 82, 80, 78, 75, 73, + 70, 67, 65, 62, 59, 57, 54, 51, + 48, 45, 42, 39, 36, 33, 30, 27, + 24, 21, 18, 15, 12, 9, 6, 3, + 0, -3, -6, -9, -12, -15, -18, -21, + -24, -27, -30, -33, -36, -39, -42, -45, + -48, -51, -54, -57, -59, -62, -65, -67, + -70, -73, -75, -78, -80, -82, -85, -87, + -89, -91, -94, -96, -98,-100,-102,-103, + -105,-107,-108,-110,-112,-113,-114,-116, + -117,-118,-119,-120,-121,-122,-123,-123, + -124,-125,-125,-126,-126,-126,-126,-126, + -126,-126,-126,-126,-126,-126,-125,-125, + -124,-123,-123,-122,-121,-120,-119,-118, + -117,-116,-114,-113,-112,-110,-108,-107, + -105,-103,-102,-100, -98, -96, -94, -91, + -89, -87, -85, -82, -80, -78, -75, -73, + -70, -67, -65, -62, -59, -57, -54, -51, + -48, -45, -42, -39, -36, -33, -30, -27, + -24, -21, -18, -15, -12, -9, -6, -3, + + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, + -128,-127,-126,-125,-124,-123,-122,-121, + -120,-119,-118,-117,-116,-115,-114,-113, + -112,-111,-110,-109,-108,-107,-106,-105, + -104,-103,-102,-101,-100, -99, -98, -97, + -96, -95, -94, -93, -92, -91, -90, -89, + -88, -87, -86, -85, -84, -83, -82, -81, + -80, -79, -78, -77, -76, -75, -74, -73, + -72, -71, -70, -69, -68, -67, -66, -65, + -64, -63, -62, -61, -60, -59, -58, -57, + -56, -55, -54, -53, -52, -51, -50, -49, + -48, -47, -46, -45, -44, -43, -42, -41, + -40, -39, -38, -37, -36, -35, -34, -33, + -32, -31, -30, -29, -28, -27, -26, -25, + -24, -23, -22, -21, -20, -19, -18, -17, + -16, -15, -14, -13, -12, -11, -10, -9, + -8, -7, -6, -5, -4, -3, -2, -1, + + -120, 120, + + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + -120,-120,-120,-120,-120,-120,-120,-120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + + 41, 35, -66,-124, -31, 108, -42, -82, + 82,-112, 73, -15, -15, -69, -23, -21, + -77, -90, -37, 60,-121, 12, 62,-103, + 36, 94, 13, 28, 6, -73, 71, -34, + -77, 18, 77, -56, 67, -69,-117, -90, + 31, 3, 90, 125, 9, 56, 37, 31, + 93, -44, -53, -4,-106, -11, 69, 59, + 19, 13,-119, 10, 28, -37, -82, 50, + 32,-102, 80, -18, 64, 120, 54, -3, + 18, 73, 50, -10, -98, 125, 73, -36, + -83, 79, 20, -14, 68, 64, 102, -48, + 107, -60, 48, -73, 50, 59, -95, 34, + -10, 34,-111, -99, -31,-117, 31, -38, + -80, -54,-103, 2, -71, 114, -99, 73, + 44,-128, 126, -59,-103, -43, -23,-128, + -78, -22, -55, -52, 83, -65, 103, -42, + -65, 20, -42, 126, 45, -36,-114, 102, + -125, -17, 87, 73, 97, -1, 105,-113, + 97, -51, -47, 30, -99,-100, 22, 114, + 114, -26, 29, -16,-124, 79, 74, 119, + 2, -41, -24, 57, 44, 83, -53, -55, + 18, 30, 51, 116, -98, 12, -12, -43, + -44, -97, -44, -92, 89, 126, 53, -49, + 50, 34, -12, -52, -49, -45,-112, 45, + 72, -45,-113, 117, -26, -39, 29, 42, + -27, -64, -9, 43, 120,-127,-121, 68, + 14, 95, 80, 0, -44, 97,-115, -66, + 123, 5, 21, 7, 59, 51,-126, 31, + 24, 112,-110, -38, 100, 84, -50, -79, + -123, 62, 105, 21, -8, 70, 106, 4, + -106, 115, 14, -39, 22, 47, 103, 104, + -44, -9, 74, 74, -48, 87, 104, 118, + -6, 22, -69, 17, -83, -82, 36,-120, + 121, -2, 82, -37, 37, 67, -27, 60, + -12, 69, -45, -40, 40, -50, 11, -11, + -59, 96, 89, 61,-105, 39,-118, 89, + 118, 45, -48, -62, -55, -51, 104, -44, + 73, 106, 121, 37, 8, 97, 64, 20, + -79, 59, 106, -91, 17, 40, -63,-116, + -42, -87, 11,-121,-105,-116, 47, -15, + 21, 29,-102,-107, -63,-101, -31, -64, + 126, -23, -88,-102, -89,-122, -62, -75, + 84, -65,-102, -25, -39, 35, -47, 85, + -112, 56, 40, -47, -39, 108, -95, 102, + 94, 78, -31, 48,-100, -2, -39, 113, + -97, -30, -91, -30, 12,-101, -76, 71, + 101, 56, 42, 70,-119, -87,-126, 121, + 122, 118, 120, -62, 99, -79, 38, -33, + -38, 41, 109, 62, 98, -32,-106, 18, + 52, -65, 57, -90, 63,-119, 94, -15, + 109, 14, -29, 108, 40, -95, 30, 32, + 29, -53, -62, 3, 63, 65, 7,-124, + 15, 20, 5, 101, 27, 40, 97, -55, + -59, -25, 44,-114, 70, 54, 8, -36, + -13, -88,-115, -2, -66, -14, -21, 113, + -1, -96, -48, 59, 117, 6,-116, 126, + -121, 120, 115, 77, -48, -66,-126, -66, + -37, -62, 70, 65, 43,-116, -6, 48, + 127, 112, -16, -89, 84,-122, 50,-107, + -86, 91, 104, 19, 11, -26, -4, -11, + -54, -66, 125, -97,-119,-118, 65, 27, + -3, -72, 79, 104, -10, 114, 123, 20, + -103, -51, -45, 13, -16, 68, 58, -76, + -90, 102, 83, 51, 11, -53, -95, 16 +}; + + writeRecord(freqmod_table, sizeof(freqmod_table), GBVARS_FREQMODTABLE_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_spk_freq_table() { + UInt16 spk_freq_table[12] = { + 36484, 34436, 32503, 30679, 28957, 27332, + 25798, 24350, 22983, 21693, 20476, 19326 +}; + + writeRecord(spk_freq_table, sizeof(spk_freq_table), GBVARS_SPKFREQTABLE_INDEX , GBVARS_SCUMM); +} + +static void PlayerV2_pcjr_freq_table() { + UInt16 pcjr_freq_table[12] = { + 65472, 61760, 58304, 55040, 52032, 49024, + 46272, 43648, 41216, 38912, 36736, 34624 +}; + + writeRecord(pcjr_freq_table, sizeof(pcjr_freq_table), GBVARS_PCJRFREQTABLE_INDEX , GBVARS_SCUMM); +} + +void addPlayerV2() { + PlayerV2_note_lengths(); + PlayerV2_hull_offsets(); + PlayerV2_hulls(); + PlayerV2_freqmod_lengths(); + PlayerV2_freqmod_offsets(); + PlayerV2_freqmod_table(); + PlayerV2_spk_freq_table(); + PlayerV2_pcjr_freq_table(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c b/backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c new file mode 100644 index 0000000000..635bba344f --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c @@ -0,0 +1,21 @@ +#include +#include "b_globals.h" + +static void addDimuseCodecs_imcTable() { + Int16 imcTable[] = { + 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011, + 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D, + 0x0032, 0x0037, 0x003C, 0x0042, 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, + 0x0082, 0x008F, 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133, + 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292, 0x02D4, 0x031C, + 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583, 0x0610, 0x06AB, 0x0756, 0x0812, + 0x08E0, 0x09C3, 0x0ABD, 0x0BD0, 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE, + 0x1706, 0x1954, 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B, + 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF +}; + writeRecord(imcTable, sizeof(imcTable), GBVARS_IMCTABLE_INDEX , GBVARS_SCUMM); +} + +void addDimuseCodecs() { + addDimuseCodecs_imcTable(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c new file mode 100644 index 0000000000..1614932343 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c @@ -0,0 +1,921 @@ +#include +#include "b_globals.h" +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +typedef Int16 int16; +typedef Int8 int8; +typedef unsigned char byte; + +typedef struct { + int8 roomId; + byte musicTableIndex; + byte unk1; + byte unk2; + byte unk3; + byte unk4; +} imuseRoomMap; + + +typedef struct { + byte opcode; + int16 soundId; + char name[20]; + byte param; + byte hookId; + char filename[13]; +} imuseDigTable; + +typedef struct { + byte opcode; + int16 soundId; + char name[20]; + byte param; + byte hookId; + int16 fadeDelay; + char filename[13]; +} imuseComiTable; + + + +typedef struct { + char audioName[9]; + byte opcode; + byte volume; + char name[21]; +} imuseFtStateTable; + +typedef struct { + char audioName[9]; + byte opcode; + byte volume; +} imuseFtSeqTable; + +typedef struct { + char name[20]; +} imuseFtNames; +/////////////////////////////////////////////////////////////////// + +static void addDimuseTables_digStateMusicMap() { + imuseRoomMap _digStateMusicMap[] = { + {0, 0, 0, 0, 0, 0 }, + {1, 0, 0, 0, 0, 0 }, + {2, 2, 0, 0, 0, 0 }, + {4, 3, 0, 0, 0, 0 }, + {5, 3, 0, 0, 0, 0 }, + {6, 3, 0, 0, 0, 0 }, + {7, 3, 0, 0, 0, 0 }, + {8, 4, 0, 0, 0, 0 }, + {9, 5, 0, 0, 0, 0 }, + {10, 4, 0, 0, 0, 0 }, + {12, 5, 0, 0, 0, 0 }, + {14, 5, 0, 0, 0, 0 }, + {15, 6, 29, 7, 0, 0 }, + {16, 8, 0, 0, 0, 0 }, + {17, 1, 0, 0, 0, 0 }, + {18, 9, 0, 0, 0, 0 }, + {19, 9, 0, 0, 0, 0 }, + {20, 6, 0, 0, 0, 0 }, + {21, 6, 0, 0, 0, 0 }, + {22, 44, 0, 0, 0, 0 }, + {23, 10, 7, 0, 0, 0 }, + {24, 26, 0, 0, 0, 0 }, + {25, 17, 0, 0, 0, 0 }, + {26, 17, 0, 0, 0, 0 }, + {27, 18, 0, 0, 0, 0 }, + {28, 1, 0, 0, 0, 0 }, + {29, 20, 0, 0, 0, 0 }, + {30, 22, 0, 0, 0, 0 }, + {31, 23, 0, 0, 0, 0 }, + {32, 22, 0, 0, 0, 0 }, + {33, 26, 0, 0, 0, 0 }, + {34, 24, 0, 0, 0, 0 }, + {35, 1, 0, 0, 0, 0 }, + {36, 1, 0, 0, 0, 0 }, + {37, 42, 0, 0, 0, 0 }, + {38, 43, 0, 0, 0, 0 }, + {39, 44, 0, 0, 0, 0 }, + {40, 1, 0, 0, 0, 0 }, + {41, 43, 0, 0, 0, 0 }, + {42, 44, 0, 0, 0, 0 }, + {43, 43, 0, 0, 0, 0 }, + {44, 45, 117,45, 114,46}, + {47, 1, 0, 0, 0, 0 }, + {48, 43, 0, 0, 0, 0 }, + {49, 44, 0, 0, 0, 0 }, + {51, 1, 0, 0, 0, 0 }, + {53, 28, 0, 0, 0, 0 }, + {54, 28, 0, 0, 0, 0 }, + {55, 29, 0, 0, 0, 0 }, + {56, 29, 0, 0, 0, 0 }, + {57, 29, 0, 0, 0, 0 }, + {58, 31, 0, 0, 0, 0 }, + {59, 1, 0, 0, 0, 0 }, + {60, 37, 0, 0, 0, 0 }, + {61, 39, 0, 0, 0, 0 }, + {62, 38, 0, 0, 0, 0 }, + {63, 39, 0, 0, 0, 0 }, + {64, 39, 0, 0, 0, 0 }, + {65, 40, 0, 0, 0, 0 }, + {67, 40, 0, 0, 0, 0 }, + {68, 39, 0, 0, 0, 0 }, + {69, 1, 0, 0, 0, 0 }, + {70, 49, 0, 0, 0, 0 }, + {73, 50, 0, 0, 0, 0 }, + {75, 51, 0, 0, 0, 0 }, + {76, 1, 0, 0, 0, 0 }, + {77, 52, 7, 0, 0, 0 }, + {78, 63, 0, 0, 0, 0 }, + {79, 1, 0, 0, 0, 0 }, + {82, 21, 0, 0, 0, 0 }, + {85, 1, 0, 0, 0, 0 }, + {86, 0, 0, 0, 0, 0 }, + {89, 33, 6, 35, 5, 34}, + {90, 16, 0, 0, 0, 0 }, + {91, 57, 0, 0, 0, 0 }, + {88, 32, 0, 0, 0, 0 }, + {92, 25, 0, 0, 0, 0 }, + {93, 0, 0, 0, 0, 0 }, + {95, 19, 0, 0, 0, 0 }, + {80, 41, 0, 0, 0, 0 }, + {81, 48, 0, 0, 0, 0 }, + {83, 27, 0, 0, 0, 0 }, + {94, 36, 0, 0, 0, 0 }, + {40, 1, 0, 0, 0, 0 }, + {96, 13, 0, 0, 0, 0 }, + {97, 14, 0, 0, 0, 0 }, + {98, 11, 0, 0, 0, 0 }, + {99, 15, 0, 0, 0, 0 }, + {100, 17, 0, 0, 0, 0 }, + {101, 38, 0, 0, 0, 0 }, + {103, 0, 0, 0, 0, 0 }, + {104, 0, 0, 0, 0, 0 }, + {11, 44, 0, 0, 0, 0 }, + {3, 47, 0, 0, 0, 0 }, + {105, 30, 128,29, 0, 0 }, + {106, 0, 0, 0, 0, 0 }, + {107, 1, 0, 0, 0, 0 }, + {108, 1, 0, 0, 0, 0 }, + {47, 1, 0, 0, 0, 0 }, + {50, 1, 0, 0, 0, 0 }, + {52, 0, 0, 0, 0, 0 }, + {71, 1, 0, 0, 0, 0 }, + {13, 1, 0, 0, 0, 0 }, + {72, 1, 0, 0, 0, 0 }, + {46, 33, 6, 35, 5, 34}, + {74, 1, 0, 0, 0, 0 }, + {84, 1, 0, 0, 0, 0 }, + {66, 1, 0, 0, 0, 0 }, + {102, 1, 0, 0, 0, 0 }, + {109, 1, 0, 0, 0, 0 }, + {110, 2, 0, 0, 0, 0 }, + {45, 1, 0, 0, 0, 0 }, + {87, 1, 0, 0, 0, 0 }, + {111, 1, 0, 0, 0, 0 }, + {-1, 1, 0, 0, 0, 0 } +}; + writeRecord(_digStateMusicMap, sizeof(_digStateMusicMap), GBVARS_DIGSTATEMUSICMAP_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_digStateMusicTable() { + imuseDigTable _digStateMusicTable[] = { + {0, 1000, "STATE_NULL", 0, 0, ""}, /* 00 */ + {0, 1001, "stateNoChange", 0, 0, ""}, /* 01 */ + {3, 1100, "stateAstShip", 2, 0, "ASTERO~1.IMU"}, /* 02 */ + {3, 1120, "stateAstClose", 2, 0, "ASTERO~2.IMU"}, /* 03 */ + {3, 1140, "stateAstInside", 0, 0, "ASTERO~3.IMU"}, /* 04 */ + {3, 1150, "stateAstCore", 0, 2, "ASTERO~4.IMU"}, /* 05 */ + {3, 1200, "stateCanyonClose", 0, 1, "CANYON~1.IMU"}, /* 06 */ + {3, 1205, "stateCanyonClose_m", 0, 0, "CANYON~2.IMU"}, /* 07 */ + {3, 1210, "stateCanyonOver", 0, 1, "CANYON~3.IMU"}, /* 08 */ + {3, 1220, "stateCanyonWreck", 0, 1, "CANYON~4.IMU"}, /* 09 */ + {3, 1300, "stateNexusCanyon", 10, 0, "NEXUS(~1.IMU"}, /* 10 */ + {3, 1310, "stateNexusPlan", 10, 0, "NEXUS(~1.IMU"}, /* 11 */ + {3, 1320, "stateNexusRamp", 10, 0, "NEXUS(~2.IMU"}, /* 12 */ + {3, 1330, "stateNexusMuseum", 10, 0, "NEXUS(~3.IMU"}, /* 13 */ + {3, 1340, "stateNexusMap", 10, 0, "NEXUS(~4.IMU"}, /* 14 */ + {3, 1350, "stateNexusTomb", 10, 0, "NE3706~5.IMU"}, /* 15 */ + {3, 1360, "stateNexusCath", 10, 0, "NE3305~5.IMU"}, /* 16 */ + {3, 1370, "stateNexusAirlock", 0, 0, "NE2D3A~5.IMU"}, /* 17 */ + {3, 1380, "stateNexusPowerOff", 0, 1, "NE8522~5.IMU"}, /* 18 */ + {3, 1400, "stateMuseumTramNear", 0, 1, "TRAM(M~1.IMU"}, /* 19 */ + {3, 1410, "stateMuseumTramFar", 0, 0, "TRAM(M~2.IMU"}, /* 20 */ + {3, 1420, "stateMuseumLockup", 0, 0, "MUSEUM~1.IMU"}, /* 21 */ + {3, 1433, "stateMuseumPool", 22, 1, "MUSEUM~2.IMU"}, /* 22 */ + {3, 1436, "stateMuseumSpire", 22, 2, "MUSEUM~3.IMU"}, /* 23 */ + {3, 1440, "stateMuseumMuseum", 22, 2, "MUSEUM~4.IMU"}, /* 24 */ + {3, 1450, "stateMuseumLibrary", 0, 0, "MUB575~5.IMU"}, /* 25 */ + {3, 1460, "stateMuseumCavern", 0, 0, "MUF9BE~5.IMU"}, /* 26 */ + {3, 1500, "stateTombTramNear", 0, 1, "TRAM(T~1.IMU"}, /* 27 */ + {3, 1510, "stateTombBase", 28, 2, "TOMB(A~1.IMU"}, /* 28 */ + {3, 1520, "stateTombSpire", 28, 2, "TOMB(A~2.IMU"}, /* 29 */ + {3, 1530, "stateTombCave", 28, 2, "TOMB(A~3.IMU"}, /* 30 */ + {3, 1540, "stateTombCrypt", 31, 1, "TOMB(C~1.IMU"}, /* 31 */ + {3, 1550, "stateTombGuards", 31, 1, "TOMB(C~2.IMU"}, /* 32 */ + {3, 1560, "stateTombInner", 0, 1, "TOMB(I~1.IMU"}, /* 33 */ + {3, 1570, "stateTombCreator1", 0, 0, "TOMB(C~3.IMU"}, /* 34 */ + {3, 1580, "stateTombCreator2", 0, 0, "TOMB(C~4.IMU"}, /* 35 */ + {3, 1600, "statePlanTramNear", 0, 1, "TRAM(P~1.IMU"}, /* 36 */ + {3, 1610, "statePlanTramFar", 0, 0, "TRAM(P~2.IMU"}, /* 37 */ + {3, 1620, "statePlanBase", 38, 2, "PLAN(A~1.IMU"}, /* 38 */ + {3, 1630, "statePlanSpire", 38, 2, "PLAN(A~2.IMU"}, /* 39 */ + {3, 1650, "statePlanDome", 0, 0, "PLAN(D~1.IMU"}, /* 40 */ + {3, 1700, "stateMapTramNear", 0, 1, "TRAM(M~3.IMU"}, /* 41 */ + {3, 1710, "stateMapTramFar", 0, 0, "TRAM(M~4.IMU"}, /* 42 */ + {3, 1720, "stateMapCanyon", 43, 2, "MAP(AM~1.IMU"}, /* 43 */ + {3, 1730, "stateMapExposed", 43, 2, "MAP(AM~2.IMU"}, /* 44 */ + {3, 1750, "stateMapNestEmpty", 43, 2, "MAP(AM~4.IMU"}, /* 45 */ + {3, 1760, "stateMapNestMonster", 0, 0, "MAP(MO~1.IMU"}, /* 46 */ + {3, 1770, "stateMapKlein", 0, 0, "MAP(KL~1.IMU"}, /* 47 */ + {3, 1800, "stateCathTramNear", 0, 1, "TRAM(C~1.IMU"}, /* 48 */ + {3, 1810, "stateCathTramFar", 0, 0, "TRAM(C~2.IMU"}, /* 49 */ + {3, 1820, "stateCathLab", 50, 1, "CATH(A~1.IMU"}, /* 50 */ + {3, 1830, "stateCathOutside", 50, 1, "CATH(A~2.IMU"}, /* 51 */ + {3, 1900, "stateWorldMuseum", 52, 0, "WORLD(~1.IMU"}, /* 52 */ + {3, 1901, "stateWorldPlan", 52, 0, "WORLD(~2.IMU"}, /* 53 */ + {3, 1902, "stateWorldTomb", 52, 0, "WORLD(~3.IMU"}, /* 54 */ + {3, 1903, "stateWorldMap", 52, 0, "WORLD(~4.IMU"}, /* 55 */ + {3, 1904, "stateWorldCath", 52, 0, "WO3227~5.IMU"}, /* 56 */ + {3, 1910, "stateEye1", 0, 0, "EYE1~1.IMU"}, /* 57 */ + {3, 1911, "stateEye2", 0, 0, "EYE2~1.IMU"}, /* 58 */ + {3, 1912, "stateEye3", 0, 0, "EYE3~1.IMU"}, /* 59 */ + {3, 1913, "stateEye4", 0, 0, "EYE4~1.IMU"}, /* 60 */ + {3, 1914, "stateEye5", 0, 0, "EYE5~1.IMU"}, /* 61 */ + {3, 1915, "stateEye6", 0, 0, "EYE6~1.IMU"}, /* 62 */ + {3, 1916, "stateEye7", 0, 0, "EYE7~1.IMU"}, /* 63 */ + {0, -1, "", 0, 0, ""} +}; + + writeRecord(_digStateMusicTable, sizeof(_digStateMusicTable), GBVARS_DIGSTATEMUSICTABLE_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_comiStateMusicTable() { + imuseComiTable _comiStateMusicTable[] = { + {0, 1000, "STATE_NULL", 0, 0, 0, ""}, /* 00 */ + {0, 1001, "stateNoChange", 0, 0, 0, ""}, /* 01 */ + {3, 1098, "stateCredits1", 0, 0, 60, "1098-C~1.IMX"}, /* 02 */ + {3, 1099, "stateMenu", 0, 0, 60, "1099-M~1.IMX"}, /* 03 */ + {3, 1100, "stateHold1", 4, 0, 60, "1100-H~1.IMX"}, /* 04 */ + {3, 1101, "stateWaterline1", 4, 0, 60, "1101-W~1.IMX"}, /* 05 */ + {3, 1102, "stateHold2", 6, 1, 60, "1102-H~1.IMX"}, /* 06 */ + {3, 1103, "stateWaterline2", 6, 0, 60, "1103-W~1.IMX"}, /* 07 */ + {3, 1104, "stateCannon", 0, 0, 60, "1104-C~1.IMX"}, /* 08 */ + {3, 1105, "stateTreasure", 0, 0, 60, "1105-T~1.IMX"}, /* 09 */ + {3, 1200, "stateFortBase", 10, 1, 60, "1200-F~1.IMX"}, /* 10 */ + {3, 1201, "statePreFort", 10, 1, 60, "1201-P~1.IMX"}, /* 11 */ + {3, 1202, "statePreVooOut", 12, 0, 60, "1202-P~1.IMX"}, /* 12 */ + {3, 1203, "statePreVooIn", 12, 0, 60, "1203-P~1.IMX"}, /* 13 */ + {3, 1204, "statePreVooLady", 12, 0, 60, "1204-P~1.IMX"}, /* 14 */ + {3, 1205, "stateVoodooOut", 0, 0, 60, "1205-V~1.IMX"}, /* 15 */ + {3, 1210, "stateVoodooIn", 0, 0, 60, "1210-V~1.IMX"}, /* 16 */ + {12,1212, "stateVoodooInAlt", 0, 1, 42, "1210-V~1.IMX"}, /* 17 */ + {3, 1215, "stateVoodooLady", 0, 0, 60, "1215-V~1.IMX"}, /* 18 */ + {3, 1219, "statePrePlundermap", 0, 0, 60, "1219-P~1.IMX"}, /* 19 */ + {3, 1220, "statePlundermap", 0, 0, 60, "1220-P~1.IMX"}, /* 20 */ + {3, 1222, "statePreCabana", 0, 0, 60, "1222-P~1.IMX"}, /* 21 */ + {3, 1223, "stateCabana", 0, 0, 60, "1223-C~1.IMX"}, /* 22 */ + {3, 1224, "statePostCabana", 23, 0, 60, "1224-P~1.IMX"}, /* 23 */ + {3, 1225, "stateBeachClub", 23, 0, 60, "1225-B~1.IMX"}, /* 24 */ + {3, 1230, "stateCliff", 0, 0, 60, "1230-C~1.IMX"}, /* 25 */ + {3, 1232, "stateBelly", 0, 0, 48, "1232-B~1.IMX"}, /* 26 */ + {3, 1235, "stateQuicksand", 0, 0, 60, "1235-Q~1.IMX"}, /* 27 */ + {3, 1240, "stateDangerBeach", 0, 0, 48, "1240-D~1.IMX"}, /* 28 */ + {12,1241, "stateDangerBeachAlt",0, 2, 48, "1240-D~1.IMX"}, /* 29 */ + {3, 1245, "stateRowBoat", 0, 0, 60, "1245-R~1.IMX"}, /* 30 */ + {3, 1247, "stateAlongside", 0, 0, 48, "1247-A~1.IMX"}, /* 31 */ + {12,1248, "stateAlongsideAlt", 0, 1, 48, "1247-A~1.IMX"}, /* 32 */ + {3, 1250, "stateChimpBoat", 0, 0, 30, "1250-C~1.IMX"}, /* 33 */ + {3, 1255, "stateMrFossey", 0, 0, 48, "1255-M~1.IMX"}, /* 34 */ + {3, 1259, "statePreTown", 0, 0, 60, "1259-P~1.IMX"}, /* 35 */ + {3, 1260, "stateTown", 0, 0, 60, "1260-T~1.IMX"}, /* 36 */ + {3, 1264, "statePreMeadow", 0, 0, 60, "1264-P~1.IMX"}, /* 37 */ + {3, 1265, "stateMeadow", 0, 0, 60, "1265-M~1.IMX"}, /* 38 */ + {3, 1266, "stateMeadowAmb", 0, 0, 60, "1266-M~1.IMX"}, /* 39 */ + {3, 1270, "stateWardrobePre", 40, 0, 60, "1270-W~1.IMX"}, /* 40 */ + {3, 1272, "statePreShow", 40, 0, 60, "1272-P~1.IMX"}, /* 41 */ + {3, 1274, "stateWardrobeShow", 42, 0, 60, "1274-W~1.IMX"}, /* 42 */ + {3, 1276, "stateShow", 42, 0, 60, "1276-S~1.IMX"}, /* 43 */ + {3, 1277, "stateWardrobeJug", 44, 0, 60, "1277-W~1.IMX"}, /* 44 */ + {3, 1278, "stateJuggling", 44, 0, 60, "1278-J~1.IMX"}, /* 45 */ + {3, 1279, "statePostShow", 0, 0, 60, "1279-P~1.IMX"}, /* 46 */ + {3, 1280, "stateChickenShop", 0, 0, 60, "1280-C~1.IMX"}, /* 47 */ + {3, 1285, "stateBarberShop", 48, 0, 60, "1285-B~1.IMX"}, /* 48 */ + {3, 1286, "stateVanHelgen", 48, 0, 60, "1286-V~1.IMX"}, /* 49 */ + {3, 1287, "stateBill", 48, 0, 60, "1287-B~1.IMX"}, /* 50 */ + {3, 1288, "stateHaggis", 48, 0, 60, "1288-H~1.IMX"}, /* 51 */ + {3, 1289, "stateRottingham", 48, 0, 60, "1289-R~1.IMX"}, /* 52 */ + {3, 1305, "stateDeck", 0, 0, 60, "1305-D~1.IMX"}, /* 53 */ + {3, 1310, "stateCombatMap", 0, 0, 60, "1310-C~1.IMX"}, /* 54 */ + {3, 1320, "stateShipCombat", 0, 0, 60, "1320-S~1.IMX"}, /* 55 */ + {3, 1325, "stateSwordfight", 0, 0, 60, "1325-S~1.IMX"}, /* 56 */ + {3, 1327, "stateSwordRott", 0, 0, 60, "1327-S~1.IMX"}, /* 57 */ + {3, 1330, "stateTownEdge", 0, 0, 60, "1330-T~1.IMX"}, /* 58 */ + {3, 1335, "stateSwordLose", 0, 0, 60, "1335-S~1.IMX"}, /* 59 */ + {3, 1340, "stateSwordWin", 0, 0, 60, "1340-S~1.IMX"}, /* 60 */ + {3, 1345, "stateGetMap", 0, 0, 60, "1345-G~1.IMX"}, /* 61 */ + {3, 1400, "stateWreckBeach", 0, 0, 60, "1400-W~1.IMX"}, /* 62 */ + {3, 1405, "stateBloodMap", 63, 0, 60, "1405-B~1.IMX"}, /* 63 */ + {3, 1410, "stateClearing", 0, 0, 60, "1410-C~1.IMX"}, /* 64 */ + {3, 1415, "stateLighthouse", 63, 0, 60, "1415-L~1.IMX"}, /* 65 */ + {3, 1420, "stateVillage", 66, 0, 60, "1420-V~1.IMX"}, /* 66 */ + {3, 1423, "stateVolcano", 66, 0, 60, "1423-V~1.IMX"}, /* 67 */ + {3, 1425, "stateAltar", 66, 0, 60, "1425-A~1.IMX"}, /* 68 */ + {3, 1430, "stateHotelOut", 0, 0, 60, "1430-H~1.IMX"}, /* 69 */ + {3, 1435, "stateHotelBar", 70, 0, 60, "1435-H~1.IMX"}, /* 70 */ + {3, 1440, "stateHotelIn", 70, 0, 60, "1440-H~1.IMX"}, /* 71 */ + {3, 1445, "stateTarotLady", 70, 0, 60, "1445-T~1.IMX"}, /* 72 */ + {3, 1447, "stateGoodsoup", 70, 0, 60, "1447-G~1.IMX"}, /* 73 */ + {3, 1448, "stateGuestRoom", 0, 0, 60, "1448-G~1.IMX"}, /* 74 */ + {3, 1450, "stateWindmill", 63, 0, 60, "1450-W~1.IMX"}, /* 75 */ + {3, 1455, "stateCemetary", 0, 0, 60, "1455-C~1.IMX"}, /* 76 */ + {3, 1460, "stateCrypt", 77, 0, 60, "1460-C~1.IMX"}, /* 77 */ + {3, 1463, "stateGraveDigger", 77, 0, 60, "1463-G~1.IMX"}, /* 78 */ + {3, 1465, "stateMonkey1", 0, 0, 60, "1465-M~1.IMX"}, /* 79 */ + {3, 1475, "stateStanDark", 0, 0, 60, "1475-S~1.IMX"}, /* 80 */ + {3, 1477, "stateStanLight", 0, 0, 60, "1477-S~1.IMX"}, /* 81 */ + {3, 1480, "stateEggBeach", 63, 0, 60, "1480-E~1.IMX"}, /* 82 */ + {3, 1485, "stateSkullIsland", 0, 0, 60, "1485-S~1.IMX"}, /* 83 */ + {3, 1490, "stateSmugglersCave", 0, 0, 60, "1490-S~1.IMX"}, /* 84 */ + {3, 1500, "stateLeChuckTalk", 0, 0, 60, "1500-L~1.IMX"}, /* 85 */ + {3, 1505, "stateCarnival", 0, 0, 60, "1505-C~1.IMX"}, /* 86 */ + {3, 1511, "stateHang", 87, 0, 60, "1511-H~1.IMX"}, /* 87 */ + {3, 1512, "stateRum", 87, 0, 60, "1512-RUM.IMX"}, /* 88 */ + {3, 1513, "stateTorture", 87, 0, 60, "1513-T~1.IMX"}, /* 89 */ + {3, 1514, "stateSnow", 87, 0, 60, "1514-S~1.IMX"}, /* 90 */ + {3, 1515, "stateCredits", 0, 0, 60, "1515-C~1.IMX"}, /* 91 */ + {3, 1520, "stateCarnAmb", 0, 0, 60, "1520-C~1.IMX"}, /* 92 */ + {0, -1, "", 0, 0, 0, ""} +}; + + writeRecord(_comiStateMusicTable, sizeof(_comiStateMusicTable), GBVARS_COMISTATEMUSICTABLE_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_comiSeqMusicTable() { + imuseComiTable _comiSeqMusicTable[] = { + {0, 2000, "SEQ_NULL", 0, 0, 0, ""}, + {0, 2100, "seqINTRO", 0, 0, 0, ""}, + {3, 2105, "seqInterlude1", 0, 0, 60, "2105-I~1.IMX"}, + {8, 2110, "seqLastBoat", 0, 1, 0, ""}, + {0, 2115, "seqSINK_SHIP", 0, 0, 0, ""}, + {0, 2120, "seqCURSED_RING", 0, 0, 60, ""}, + {3, 2200, "seqInterlude2", 0, 0, 60, "2200-I~1.IMX"}, + {3, 2210, "seqKidnapped", 0, 0, 60, "2210-K~1.IMX"}, + {8, 2220, "seqSnakeVomits", 0, 1, 0, ""}, + {8, 2222, "seqPopBalloon", 0, 1, 0, ""}, + {3, 2225, "seqDropBalls", 0, 0, 60, "2225-D~1.IMX"}, + {4, 2232, "seqArriveBarber", 0, 0, 60, "2232-A~1.IMX"}, + {3, 2233, "seqAtonal", 0, 0, 60, "2233-A~1.IMX"}, + {3, 2235, "seqShaveHead1", 0, 0, 60, "2235-S~1.IMX"}, + {2, 2236, "seqShaveHead2", 0, 2, 60, "2235-S~1.IMX"}, + {3, 2245, "seqCaberLose", 0, 0, 60, "2245-C~1.IMX"}, + {3, 2250, "seqCaberWin", 0, 0, 60, "2250-C~1.IMX"}, + {3, 2255, "seqDuel1", 0, 0, 60, "2255-D~1.IMX"}, + {2, 2256, "seqDuel2", 0, 2, 60, "2255-D~1.IMX"}, + {2, 2257, "seqDuel3", 0, 3, 60, "2255-D~1.IMX"}, + {3, 2260, "seqBlowUpTree1", 0, 0, 60, "2260-B~1.IMX"}, + {2, 2261, "seqBlowUpTree2", 0, 2, 60, "2260-B~1.IMX"}, + {3, 2275, "seqMonkeys", 0, 0, 60, "2275-M~1.IMX"}, + {9, 2277, "seqAttack", 0, 1, 0, ""}, + {3, 2285, "seqSharks", 0, 0, 60, "2285-S~1.IMX"}, + {3, 2287, "seqTowelWalk", 0, 0, 60, "2287-T~1.IMX"}, + {0, 2293, "seqNICE_BOOTS", 0, 0, 0, ""}, + {0, 2295, "seqBIG_BONED", 0, 0, 0, ""}, + {3, 2300, "seqToBlood", 0, 0, 60, "2300-T~1.IMX"}, + {3, 2301, "seqInterlude3", 0, 0, 60, "2301-I~1.IMX"}, + {3, 2302, "seqRott1", 0, 0, 60, "2302-R~1.IMX"}, + {2, 2304, "seqRott2", 0, 2, 60, "2302-R~1.IMX"}, + {2, 2305, "seqRott2b", 0,21, 60, "2302-R~1.IMX"}, + {2, 2306, "seqRott3", 0, 3, 60, "2302-R~1.IMX"}, + {2, 2308, "seqRott4", 0, 4, 60, "2302-R~1.IMX"}, + {2, 2309, "seqRott5", 0, 5, 60, "2302-R~1.IMX"}, + {3, 2311, "seqVerse1", 0, 0, 60, "2311-S~1.IMX"}, + {2, 2312, "seqVerse2", 0, 2, 60, "2311-S~1.IMX"}, + {2, 2313, "seqVerse3", 0, 3, 60, "2311-S~1.IMX"}, + {2, 2314, "seqVerse4", 0, 4, 60, "2311-S~1.IMX"}, + {2, 2315, "seqVerse5", 0, 5, 60, "2311-S~1.IMX"}, + {2, 2316, "seqVerse6", 0, 6, 60, "2311-S~1.IMX"}, + {2, 2317, "seqVerse7", 0, 7, 60, "2311-S~1.IMX"}, + {2, 2318, "seqVerse8", 0, 8, 60, "2311-S~1.IMX"}, + {2, 2319, "seqSongEnd", 0, 9, 60, "2311-S~1.IMX"}, + {2, 2336, "seqRiposteLose", 0, 0, 60, "2336-R~1.IMX"}, + {2, 2337, "seqRiposteWin", 0, 0, 60, "2337-R~1.IMX"}, + {2, 2338, "seqInsultLose", 0, 0, 60, "2338-I~1.IMX"}, + {2, 2339, "seqInsultWin", 0, 0, 60, "2339-I~1.IMX"}, + {3, 2340, "seqSwordLose", 0, 0, 60, "1335-S~1.IMX"}, + {3, 2345, "seqSwordWin", 0, 0, 60, "1340-S~1.IMX"}, + {3, 2347, "seqGetMap", 0, 0, 60, "1345-G~1.IMX"}, + {3, 2400, "seqInterlude4", 0, 0, 60, "2400-I~1.IMX"}, + {0, 2405, "seqSHIPWRECK", 0, 0, 0, ""}, + {3, 2408, "seqFakeCredits", 0, 0, 60, "2408-F~1.IMX"}, + {3, 2410, "seqPassOut", 0, 0, 60, "2410-P~1.IMX"}, + {3, 2414, "seqGhostTalk", 0, 0, 60, "2414-G~1.IMX"}, + {2, 2415, "seqGhostWedding", 0, 1, 60, "2414-G~1.IMX"}, + {3, 2420, "seqEruption", 0, 0, 60, "2420-E~1.IMX"}, + {3, 2425, "seqSacrifice", 0, 0, 60, "2425-S~1.IMX"}, + {2, 2426, "seqSacrificeEnd", 0, 1, 60, "2425-S~1.IMX"}, + {3, 2430, "seqScareDigger", 0, 0, 60, "2430-S~1.IMX"}, + {3, 2445, "seqSkullArrive", 0, 0, 60, "2445-S~1.IMX"}, + {3, 2450, "seqFloat", 0, 0, 60, "2450-C~1.IMX"}, + {2, 2451, "seqFall", 0, 1, 60, "2450-C~1.IMX"}, + {2, 2452, "seqUmbrella", 0, 0, 60, "2450-C~1.IMX"}, + {3, 2460, "seqFight", 0, 0, 60, "2460-F~1.IMX"}, + {0, 2465, "seqLAVE_RIDE", 0, 0, 0, ""}, + {0, 2470, "seqMORE_SLAW", 0, 0, 0, ""}, + {0, 2475, "seqLIFT_CURSE", 0, 0, 0, ""}, + {3, 2500, "seqInterlude5", 0, 0, 60, "2500-I~1.IMX"}, + {3, 2502, "seqExitSkycar", 0, 0, 60, "2502-E~1.IMX"}, + {3, 2504, "seqGrow1", 0, 0, 60, "2504-G~1.IMX"}, + {2, 2505, "seqGrow2", 0, 1, 60, "2504-G~1.IMX"}, + {3, 2508, "seqInterlude6", 0, 0, 60, "2508-I~1.IMX"}, + {0, 2515, "seqFINALE", 0, 0, 0, ""}, + {3, 2520, "seqOut", 0, 0, 60, "2520-OUT.IMX"}, + {3, 2530, "seqZap1a", 0, 0, 60, "2530-Z~1.IMX"}, + {2, 2531, "seqZap1b", 0, 1, 60, "2530-Z~1.IMX"}, + {2, 2532, "seqZap1c", 0, 2, 60, "2530-Z~1.IMX"}, + {2, 2540, "seqZap2a", 0, 0, 60, "2540-Z~1.IMX"}, + {2, 2541, "seqZap2b", 0, 1, 60, "2540-Z~1.IMX"}, + {2, 2542, "seqZap2c", 0, 2, 60, "2540-Z~1.IMX"}, + {3, 2550, "seqZap3a", 0, 0, 60, "2550-Z~1.IMX"}, + {2, 2551, "seqZap3b", 0, 1, 60, "2550-Z~1.IMX"}, + {2, 2552, "seqZap3c", 0, 2, 60, "2550-Z~1.IMX"}, + {3, 2560, "seqZap4a", 0, 0, 60, "2560-Z~1.IMX"}, + {2, 2561, "seqZap4b", 0, 1, 60, "2560-Z~1.IMX"}, + {2, 2562, "seqZap4c", 0, 2, 60, "2560-Z~1.IMX"}, + {0, -1, "", 0, 0, 0, ""} +}; + + writeRecord(_comiSeqMusicTable, sizeof(_comiSeqMusicTable), GBVARS_COMISEQMUSICTABLE_INDEX ,GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_digSeqMusicTable() { + + imuseDigTable _digSeqMusicTable[] = { + {0, 2000, "SEQ_NULL", 0, 0, ""}, + {0, 2005, "seqLogo", 0, 0, ""}, + {0, 2010, "seqIntro", 0, 0, ""}, + {6, 2020, "seqExplosion1b", 0, 0, ""}, + {3, 2030, "seqAstTunnel1a", 0, 0, "SEQ(AS~1.IMU"}, + {6, 2031, "seqAstTunnel2b", 0, 0, ""}, + {4, 2032, "seqAstTunnel3a", 0, 0, "SEQ(AS~2.IMU"}, + {5, 2040, "seqToPlanet1b", 0, 0, ""}, + {4, 2045, "seqArgBegin", 0, 0, "SEQ(AR~1.IMU"}, + {4, 2046, "seqArgEnd", 0, 0, "SEQ(AR~2.IMU"}, + {4, 2050, "seqWreckGhost", 0, 0, "SEQ(GH~1.IMU"}, + {4, 2060, "seqCanyonGhost", 0, 0, "SEQ(GH~2.IMU"}, + {0, 2070, "seqBrinkFall", 0, 0, ""}, + {4, 2080, "seqPanUpCanyon", 0, 0, "SEQ(PA~1.IMU"}, + {6, 2091, "seqAirlockTunnel1b", 0, 0, ""}, + {6, 2100, "seqTramToMu", 0, 0, ""}, + {6, 2101, "seqTramFromMu", 0, 0, ""}, + {6, 2102, "seqTramToTomb", 0, 0, ""}, + {6, 2103, "seqTramFromTomb", 0, 0, ""}, + {6, 2104, "seqTramToPlan", 0, 0, ""}, + {6, 2105, "seqTramFromPlan", 0, 0, ""}, + {6, 2106, "seqTramToMap", 0, 0, ""}, + {6, 2107, "seqTramFromMap", 0, 0, ""}, + {6, 2108, "seqTramToCath", 0, 0, ""}, + {6, 2109, "seqTramFromCath", 0, 0, ""}, + {0, 2110, "seqMuseumGhost", 0, 0, ""}, + {0, 2120, "seqSerpentAppears", 0, 0, ""}, + {0, 2130, "seqSerpentEats", 0, 0, ""}, + {6, 2140, "seqBrinkRes1b", 0, 0, ""}, + {4, 2141, "seqBrinkRes2a", 0, 0, "SEQ(BR~1.IMU"}, + {3, 2150, "seqLockupEntry", 0, 0, "SEQ(BR~1.IMU"}, + {0, 2160, "seqSerpentExplodes", 0, 0, ""}, + {4, 2170, "seqSwimUnderwater", 0, 0, "SEQ(DE~1.IMU"}, + {4, 2175, "seqWavesPlunge", 0, 0, "SEQ(PL~1.IMU"}, + {0, 2180, "seqCryptOpens", 0, 0, ""}, + {0, 2190, "seqGuardsFight", 0, 0, ""}, + {3, 2200, "seqCreatorRes1.1a", 0, 0, "SEQ(CR~1.IMU"}, + {6, 2201, "seqCreatorRes1.2b", 0, 0, ""}, + {6, 2210, "seqMaggieCapture1b", 0, 0, ""}, + {3, 2220, "seqStealCrystals", 0, 0, "SEQ(BR~1.IMU"}, + {0, 2230, "seqGetByMonster", 0, 0, ""}, + {6, 2240, "seqKillMonster1b", 0, 0, ""}, + {3, 2250, "seqCreatorRes2.1a", 0, 0, "SEQ(CR~2.IMU"}, + {6, 2251, "seqCreatorRes2.2b", 0, 0, ""}, + {4, 2252, "seqCreatorRes2.3a", 0, 0, "SEQ(CR~3.IMU"}, + {0, 2260, "seqMaggieInsists", 0, 0, ""}, + {0, 2270, "seqBrinkHelpCall", 0, 0, ""}, + {3, 2280, "seqBrinkCrevice1a", 0, 0, "SEQ(BR~2.IMU"}, + {3, 2281, "seqBrinkCrevice2a", 0, 0, "SEQ(BR~3.IMU"}, + {6, 2290, "seqCathAccess1b", 0, 0, ""}, + {4, 2291, "seqCathAccess2a", 0, 0, "SEQ(CA~1.IMU"}, + {3, 2300, "seqBrinkAtGenerator", 0, 0, "SEQ(BR~1.IMU"}, + {6, 2320, "seqFightBrink1b", 0, 0, ""}, + {6, 2340, "seqMaggieDies1b", 0, 0, ""}, + {6, 2346, "seqMaggieRes1b", 0, 0, ""}, + {4, 2347, "seqMaggieRes2a", 0, 0, "SEQ(MA~1.IMU"}, + {0, 2350, "seqCreatureFalls", 0, 0, ""}, + {5, 2360, "seqFinale1b", 0, 0, ""}, + {3, 2370, "seqFinale2a", 0, 0, "SEQ(FI~1.IMU"}, + {6, 2380, "seqFinale3b1", 0, 0, ""}, + {6, 2390, "seqFinale3b2", 0, 0, ""}, + {3, 2400, "seqFinale4a", 0, 0, "SEQ(FI~2.IMU"}, + {3, 2410, "seqFinale5a", 0, 0, "SEQ(FI~3.IMU"}, + {3, 2420, "seqFinale6a", 0, 0, "SEQ(FI~4.IMU"}, + {3, 2430, "seqFinale7a", 0, 0, "SE3D2B~5.IMU"}, + {6, 2440, "seqFinale8b", 0, 0, ""}, + {4, 2450, "seqFinale9a", 0, 0, "SE313B~5.IMU"}, + {0, -1, "", 0, 0, ""} +}; + + writeRecord(_digSeqMusicTable, sizeof(_digSeqMusicTable), GBVARS_DIGSEQMUSICTABLE_INDEX ,GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_ftStateMusicTable() { + + imuseFtStateTable _ftStateMusicTable[] = { + {"", 0, 0, "STATE_NULL" }, + {"", 4, 127, "stateKstandOutside" }, + {"kinside", 2, 127, "stateKstandInside" }, + {"moshop", 3, 64, "stateMoesInside" }, + {"melcut", 2, 127, "stateMoesOutside" }, + {"mellover", 2, 127, "stateMellonAbove" }, + {"radloop", 3, 28, "stateTrailerOutside" }, + {"radloop", 3, 58, "stateTrailerInside" }, + {"radloop", 3, 127, "stateTodShop" }, + {"junkgate", 2, 127, "stateJunkGate" }, + {"junkover", 3, 127, "stateJunkAbove" }, + {"gastower", 2, 127, "stateGasTower" }, + {"", 4, 0, "stateTowerAlarm" }, + {"melcut", 2, 127, "stateCopsOnGround" }, + {"melcut", 2, 127, "stateCopsAround" }, + {"melcut", 2, 127, "stateMoesRuins" }, + {"melcut", 2, 127, "stateKstandNight" }, + {"trukblu2", 2, 127, "stateTruckerTalk" }, + {"stretch", 2, 127, "stateMumblyPeg" }, + {"kstand", 2, 100, "stateRanchOutside" }, + {"kinside", 2, 127, "stateRanchInside" }, + {"desert", 2, 127, "stateWreckedTruck" }, + {"opening", 2, 100, "stateGorgeVista" }, + {"caveopen", 2, 127, "stateCaveOpen" }, + {"cavecut1", 2, 127, "stateCaveOuter" }, + {"cavecut1", 1, 127, "stateCaveMiddle" }, + {"cave", 2, 127, "stateCaveInner" }, + {"corville", 2, 127, "stateCorvilleFront" }, + {"mines", 2, 127, "stateMineField" }, + {"bunyman3", 2, 127, "stateBunnyStore" }, + {"stretch", 2, 127, "stateStretchBen" }, + {"saveme", 2, 127, "stateBenPleas" }, + {"", 4, 0, "stateBenConvinces" }, + {"derby", 3, 127, "stateDemoDerby" }, + {"fire", 3, 127, "stateLightMyFire" }, + {"derby", 3, 127, "stateDerbyChase" }, + {"carparts", 2, 127, "stateVultureCarParts"}, + {"cavecut1", 2, 127, "stateVulturesInside" }, + {"mines", 2, 127, "stateFactoryRear" }, + {"croffice", 2, 127, "stateCorleyOffice" }, + {"melcut", 2, 127, "stateCorleyHall" }, + {"", 4, 0, "stateProjRoom" }, + {"", 4, 0, "stateMMRoom" }, + {"bumper", 2, 127, "stateBenOnBumper" }, + {"benump", 2, 127, "stateBenOnBack" }, + {"plane", 2, 127, "stateInCargoPlane" }, + {"saveme", 2, 127, "statePlaneControls" }, + {"", 4, 0, "stateCliffHanger1" }, + {"", 4, 0, "stateCliffHanger2" }, +}; + + writeRecord(_ftStateMusicTable, sizeof(_ftStateMusicTable), GBVARS_FTSTATEMUSICTABLE_INDEX , GBVARS_SCUMM); +} +/////////////////////////////////////////////////////////////////// +static void addDimuseTables_ftSeqMusicTable() { + + imuseFtSeqTable _ftSeqMusicTable[] = { + {"", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"opening", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"barbeat", 2, 127}, + {"barwarn", 2, 127}, + {"", 0, 0 }, + {"", 0, 0, }, + + {"benwakes", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"barwarn", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"swatben", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"dogattak", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 4, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 4, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"cops2", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"cops2", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"cops2", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"bunymrch", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 4, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 0, 0 }, + {"melcut", 2, 127}, + {"tada", 2, 127}, + {"", 0, 0 }, + + {"", 4, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"trucker", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"cops2", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"barwarn", 2, 127}, + {"murder", 2, 127}, + {"murder2", 2, 127}, + {"", 0, 0 }, + + {"corldie", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"barwarn", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"picture", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"ripintro", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"trucker", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"hosed", 2, 127}, + + {"ripdead", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"nesranch", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"scolding", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"desert", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"cavecut1", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"caveamb", 2, 80 }, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"castle", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"bunymrch", 2, 105}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"valkyrs", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"melcut", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"veltures", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"sorry", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"makeplan", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"castle", 2, 127}, + {"derby", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + + {"fire", 3, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"saveme", 3, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"scolding", 2, 127}, + + {"cops2", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"sorry", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"sorry", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"caveamb", 2, 85 }, + {"tada", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + + {"expose", 2, 127}, + {"", 4, 0 }, + {"", 0, 0 }, + {"mocoup", 2, 127}, + + {"ripscram", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"valkyrs", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"ripdead", 2, 127}, + {"", 0, 0 }, + {"", 0, 0 }, + {"", 0, 0 }, + + {"funeral", 2, 127}, + {"", 2, 127}, + {"moshop", 3, 64 }, + {"", 0, 0 }, + + {"bornbad", 2, 127}, + {"hammvox", 2, 127}, + {"legavox", 2, 127}, + {"chances", 2, 90 }, +}; + writeRecord(_ftSeqMusicTable, sizeof(_ftSeqMusicTable), GBVARS_FTSEQMUSICTABLE_INDEX , GBVARS_SCUMM); +} + +static void addDimuseTables_ftSeqNames() { + imuseFtNames _ftSeqNames[] = { + {"SEQ_NULL" }, + {"seqLogo" }, + {"seqOpenFlick" }, + {"seqBartender" }, + {"seqBenWakes" }, + {"seqPhotoScram" }, + {"seqClimbChain" }, + {"seqDogChase" }, + {"seqDogSquish" }, + {"seqDogHoist" }, + {"seqCopsArrive" }, + {"seqCopsLand" }, + {"seqCopsLeave" }, + {"seqCopterFlyby" }, + {"seqCopterCrash" }, + {"seqMoGetsParts" }, + {"seqMoFixesBike" }, + {"seqFirstGoodbye" }, + {"seqCopRoadblock" }, + {"seqDivertCops" }, + {"seqMurder" }, + {"seqCorleyDies" }, + {"seqTooLateAtMoes" }, + {"seqPicture" }, + {"seqNewsReel" }, + {"seqCopsInspect" }, + {"seqHijack" }, + {"seqNestolusAtRanch" }, + {"seqRipLimo" }, + {"seqGorgeTurn" }, + {"seqCavefishTalk" }, + {"seqArriveCorville" }, + {"seqSingleBunny" }, + {"seqBunnyArmy" }, + {"seqArriveAtMines" }, + {"seqArriveAtVultures"}, + {"seqMakePlan" }, + {"seqShowPlan" }, + {"seqDerbyStart" }, + {"seqLightBales" }, + {"seqNestolusBBQ" }, + {"seqCallSecurity" }, + {"seqFilmFail" }, + {"seqFilmBurn" }, + {"seqRipSpeech" }, + {"seqExposeRip" }, + {"seqRipEscape" }, + {"seqRareMoment" }, + {"seqFanBunnies" }, + {"seqRipDead" }, + {"seqFuneral" }, + {"seqCredits" } +}; + writeRecord(_ftSeqNames, sizeof(_ftSeqNames), GBVARS_FTSEQNAMES_INDEX , GBVARS_SCUMM); +} + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addDimuseTables() { + addDimuseTables_digStateMusicMap(); + addDimuseTables_digStateMusicTable(); + addDimuseTables_digSeqMusicTable(); + addDimuseTables_comiStateMusicTable(); + addDimuseTables_comiSeqMusicTable(); + addDimuseTables_ftStateMusicTable(); + addDimuseTables_ftSeqMusicTable(); + addDimuseTables_ftSeqNames(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c b/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c new file mode 100644 index 0000000000..8a3f3e1b99 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c @@ -0,0 +1,63 @@ +#include +#include "b_globals.h" + +static void addCodec47_codec47_table() { + Int8 codec47_table[] = { + 0, 0, -1, -43, 6, -43, -9, -42, 13, -41, + -16, -40, 19, -39, -23, -36, 26, -34, -2, -33, + 4, -33, -29, -32, -9, -32, 11, -31, -16, -29, + 32, -29, 18, -28, -34, -26, -22, -25, -1, -25, + 3, -25, -7, -24, 8, -24, 24, -23, 36, -23, + -12, -22, 13, -21, -38, -20, 0, -20, -27, -19, + -4, -19, 4, -19, -17, -18, -8, -17, 8, -17, + 18, -17, 28, -17, 39, -17, -12, -15, 12, -15, + -21, -14, -1, -14, 1, -14, -41, -13, -5, -13, + 5, -13, 21, -13, -31, -12, -15, -11, -8, -11, + 8, -11, 15, -11, -2, -10, 1, -10, 31, -10, + -23, -9, -11, -9, -5, -9, 4, -9, 11, -9, + 42, -9, 6, -8, 24, -8, -18, -7, -7, -7, + -3, -7, -1, -7, 2, -7, 18, -7, -43, -6, + -13, -6, -4, -6, 4, -6, 8, -6, -33, -5, + -9, -5, -2, -5, 0, -5, 2, -5, 5, -5, + 13, -5, -25, -4, -6, -4, -3, -4, 3, -4, + 9, -4, -19, -3, -7, -3, -4, -3, -2, -3, + -1, -3, 0, -3, 1, -3, 2, -3, 4, -3, + 6, -3, 33, -3, -14, -2, -10, -2, -5, -2, + -3, -2, -2, -2, -1, -2, 0, -2, 1, -2, + 2, -2, 3, -2, 5, -2, 7, -2, 14, -2, + 19, -2, 25, -2, 43, -2, -7, -1, -3, -1, + -2, -1, -1, -1, 0, -1, 1, -1, 2, -1, + 3, -1, 10, -1, -5, 0, -3, 0, -2, 0, + -1, 0, 1, 0, 2, 0, 3, 0, 5, 0, + 7, 0, -10, 1, -7, 1, -3, 1, -2, 1, + -1, 1, 0, 1, 1, 1, 2, 1, 3, 1, + -43, 2, -25, 2, -19, 2, -14, 2, -5, 2, + -3, 2, -2, 2, -1, 2, 0, 2, 1, 2, + 2, 2, 3, 2, 5, 2, 7, 2, 10, 2, + 14, 2, -33, 3, -6, 3, -4, 3, -2, 3, + -1, 3, 0, 3, 1, 3, 2, 3, 4, 3, + 19, 3, -9, 4, -3, 4, 3, 4, 7, 4, + 25, 4, -13, 5, -5, 5, -2, 5, 0, 5, + 2, 5, 5, 5, 9, 5, 33, 5, -8, 6, + -4, 6, 4, 6, 13, 6, 43, 6, -18, 7, + -2, 7, 0, 7, 2, 7, 7, 7, 18, 7, + -24, 8, -6, 8, -42, 9, -11, 9, -4, 9, + 5, 9, 11, 9, 23, 9, -31, 10, -1, 10, + 2, 10, -15, 11, -8, 11, 8, 11, 15, 11, + 31, 12, -21, 13, -5, 13, 5, 13, 41, 13, + -1, 14, 1, 14, 21, 14, -12, 15, 12, 15, + -39, 17, -28, 17, -18, 17, -8, 17, 8, 17, + 17, 18, -4, 19, 0, 19, 4, 19, 27, 19, + 38, 20, -13, 21, 12, 22, -36, 23, -24, 23, + -8, 24, 7, 24, -3, 25, 1, 25, 22, 25, + 34, 26, -18, 28, -32, 29, 16, 29, -11, 31, + 9, 32, 29, 32, -4, 33, 2, 33, -26, 34, + 23, 36, -19, 39, 16, 40, -13, 41, 9, 42, + -6, 43, 1, 43, 0, 0, 0, 0, 0, 0 +}; + writeRecord(codec47_table, sizeof(codec47_table), GBVARS_CODEC47TABLE_INDEX , GBVARS_SCUMM); +} + +void addCodec47() { + addCodec47_codec47_table(); +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/builder/simon/bs_charset.c b/backends/platform/PalmOS/Src/builder/simon/bs_charset.c new file mode 100644 index 0000000000..662884682f --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/simon/bs_charset.c @@ -0,0 +1,745 @@ +#include +#include "b_globals.h" + +static void addCharset_russian_video_font() { + byte russian_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 0, 100, 40, 48, 40, 100, 0, + 0, 0, 96, 48, 40, 40, 112, 0, + 60, 68, 68, 60, 36, 68, 68, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 72, 84, 84, 116, 84, 84, 72, 0, + 0, 0, 60, 68, 60, 36, 100, 0, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 16, 32, 0, 120, 112, 64, 56, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 32, 16, 0, 112, 8, 248, 120, 0, + 0, 0, 96, 48, 40, 40, 112, 0, + 0, 0, 112, 88, 20, 20, 56, 0, + 0, 0, 120, 4, 28, 4, 120, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 0, 0, 84, 84, 84, 84, 56, 4, + 56, 68, 68, 124, 68, 68, 68, 0, + 124, 36, 32, 56, 36, 36, 120, 0, + 120, 36, 36, 56, 36, 36, 120, 0, + 124, 36, 32, 32, 32, 32, 112, 0, + 56, 40, 40, 40, 40, 40, 124, 68, + 124, 36, 32, 56, 32, 36, 124, 0, + 84, 84, 84, 56, 84, 84, 84, 0, + 56, 68, 4, 24, 4, 68, 56, 0, + 68, 68, 76, 84, 100, 68, 68, 0, + 100, 40, 40, 48, 40, 36, 100, 0, + 28, 36, 36, 36, 36, 36, 100, 0, + 68, 108, 84, 68, 68, 68, 68, 0, + 68, 68, 68, 124, 68, 68, 68, 0, + 56, 68, 68, 68, 68, 68, 56, 0, + 124, 68, 68, 68, 68, 68, 68, 0, + 120, 36, 36, 56, 32, 32, 112, 0, + 56, 68, 64, 64, 64, 68, 56, 0, + 124, 84, 16, 16, 16, 16, 56, 0, + 100, 36, 36, 28, 4, 4, 56, 0, + 56, 84, 84, 84, 56, 16, 56, 0, + 108, 40, 16, 16, 40, 40, 108, 0, + 72, 72, 72, 72, 72, 72, 60, 4, + 76, 72, 72, 56, 8, 8, 28, 0, + 84, 84, 84, 84, 84, 84, 60, 0, + 84, 84, 84, 84, 84, 84, 56, 4, + 56, 68, 4, 28, 4, 68, 56, 0, + 0, 0, 68, 100, 84, 84, 100, 0, + 0, 0, 72, 84, 116, 84, 72, 0, + 0, 0, 60, 68, 60, 36, 100, 0, + 0, 0, 120, 4, 24, 4, 120, 0, + 0, 0, 100, 40, 48, 40, 100, 0, + 60, 68, 68, 60, 36, 68, 68, 0, + 0, 0, 56, 4, 60, 68, 60, 0, + 60, 64, 32, 56, 68, 68, 56, 0, + 48, 72, 80, 120, 68, 68, 56, 0, + 0, 0, 120, 4, 56, 64, 60, 0, + 56, 4, 4, 60, 68, 68, 56, 0, + 0, 0, 56, 68, 120, 64, 56, 0, + 40, 0, 56, 68, 120, 64, 56, 0, + 0, 0, 84, 84, 56, 84, 84, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 0, 0, 68, 68, 68, 68, 60, 0, + 56, 0, 68, 68, 68, 68, 60, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 28, 36, 36, 36, 100, 0, + 0, 0, 68, 108, 84, 68, 68, 0, + 0, 0, 56, 68, 68, 68, 56, 0, + 0, 0, 68, 68, 124, 68, 68, 0, + 0, 0, 124, 68, 68, 68, 68, 0, + 0, 0, 120, 36, 36, 56, 32, 112, + 0, 0, 60, 64, 64, 64, 60, 0, + 0, 0, 124, 84, 16, 16, 56, 0, + 0, 0, 68, 68, 60, 4, 56, 0, + 48, 16, 56, 84, 84, 56, 16, 56, + 0, 0, 68, 40, 16, 40, 68, 0, + 0, 0, 72, 72, 72, 72, 60, 4, + 0, 0, 76, 72, 72, 56, 8, 28, + 0, 0, 84, 84, 84, 84, 60, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(russian_video_font, sizeof(russian_video_font), GBVARS_RUSSIANVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_french_video_font() { + byte french_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 32, 80, 0, 112, 136, 136, 112, 0, + 32, 80, 0, 112, 8, 248, 120, 0, + 112, 136, 128, 128, 136, 112, 32, 96, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 112, 136, 128, 128, 136, 112, 32, 96, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 32, 64, 0, 112, 248, 128, 112, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 32, 16, 0, 112, 8, 248, 120, 0, + 32, 80, 0, 144, 144, 144, 104, 0, + 32, 16, 0, 112, 248, 128, 112, 0, + 32, 80, 0, 112, 248, 128, 112, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 32, 80, 0, 192, 64, 64, 224, 0, + 112, 136, 136, 248, 136, 136, 136, 0, + 240, 72, 72, 112, 72, 72, 240, 0, + 48, 72, 128, 128, 128, 72, 48, 0, + 224, 80, 72, 72, 72, 80, 224, 0, + 248, 72, 64, 112, 64, 72, 248, 0, + 248, 72, 64, 112, 64, 64, 224, 0, + 48, 72, 128, 152, 136, 72, 56, 0, + 136, 136, 136, 248, 136, 136, 136, 0, + 248, 32, 32, 32, 32, 32, 248, 0, + 24, 8, 8, 8, 136, 136, 112, 0, + 200, 72, 80, 96, 80, 72, 200, 0, + 224, 64, 64, 64, 64, 72, 248, 0, + 136, 216, 168, 168, 136, 136, 136, 0, + 136, 200, 168, 152, 136, 136, 136, 0, + 112, 136, 136, 136, 136, 136, 112, 0, + 240, 72, 72, 112, 64, 64, 224, 0, + 112, 136, 136, 136, 136, 168, 112, 8, + 240, 72, 72, 112, 72, 72, 200, 0, + 112, 136, 128, 112, 8, 136, 112, 0, + 248, 168, 32, 32, 32, 32, 112, 0, + 136, 136, 136, 136, 136, 136, 120, 0, + 136, 136, 136, 80, 80, 32, 32, 0, + 136, 136, 136, 136, 168, 216, 136, 0, + 136, 136, 80, 32, 80, 136, 136, 0, + 136, 136, 136, 112, 32, 32, 112, 0, + 248, 136, 16, 32, 64, 136, 248, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 0, 0, 112, 136, 128, 112, 32, 96, + 160, 0, 192, 64, 64, 64, 224, 0, + 32, 16, 0, 144, 144, 144, 104, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + + writeRecord(french_video_font, sizeof(french_video_font), GBVARS_FRENCHVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_german_video_font() { + byte german_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 80, 0, 112, 8, 120, 136, 120, 0, + 80, 0, 112, 136, 136, 136, 112, 0, + 80, 0, 144, 144, 144, 144, 104, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 96, 144, 144, 160, 144, 144, 160, 128, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 80, 0, 112, 136, 248, 136, 136, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 136, 112, 136, 136, 136, 136, 112, 0, + 80, 0, 136, 136, 136, 136, 112, 0, + 80, 0, 144, 144, 144, 144, 104, 0, + 32, 64, 0, 112, 248, 128, 112, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 32, 80, 0, 192, 64, 64, 224, 0, + 112, 136, 136, 248, 136, 136, 136, 0, + 240, 72, 72, 112, 72, 72, 240, 0, + 48, 72, 128, 128, 128, 72, 48, 0, + 224, 80, 72, 72, 72, 80, 224, 0, + 248, 72, 64, 112, 64, 72, 248, 0, + 248, 72, 64, 112, 64, 64, 224, 0, + 48, 72, 128, 152, 136, 72, 56, 0, + 136, 136, 136, 248, 136, 136, 136, 0, + 248, 32, 32, 32, 32, 32, 248, 0, + 24, 8, 8, 8, 136, 136, 112, 0, + 200, 72, 80, 96, 80, 72, 200, 0, + 224, 64, 64, 64, 64, 72, 248, 0, + 136, 216, 168, 168, 136, 136, 136, 0, + 136, 200, 168, 152, 136, 136, 136, 0, + 112, 136, 136, 136, 136, 136, 112, 0, + 240, 72, 72, 112, 64, 64, 224, 0, + 112, 136, 136, 136, 136, 168, 112, 8, + 240, 72, 72, 112, 72, 72, 200, 0, + 112, 136, 128, 112, 8, 136, 112, 0, + 248, 168, 32, 32, 32, 32, 112, 0, + 136, 136, 136, 136, 136, 136, 120, 0, + 136, 136, 136, 80, 80, 32, 32, 0, + 136, 136, 136, 136, 168, 216, 136, 0, + 136, 136, 80, 32, 80, 136, 136, 0, + 136, 136, 136, 112, 32, 32, 112, 0, + 248, 136, 16, 32, 64, 136, 248, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 0, 48, 72, 64, 72, 48, 16, 48, + 0, 80, 0, 96, 32, 40, 48, 0, + 32, 16, 0, 152, 144, 144, 232, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(german_video_font, sizeof(german_video_font), GBVARS_GERMANVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_hebrew_video_font() { + byte hebrew_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 144, 0, 96, 144, 144, 104, 0, + 0, 144, 0, 96, 144, 144, 96, 0, + 0, 144, 0, 144, 144, 144, 96, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 0, 112, 136, 240, 136, 136, 240, 0, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 16, 32, 0, 120, 112, 64, 56, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 5, 5, 4, 6, 5, 3, 4, 5, + 6, 3, 5, 5, 4, 6, 5, 3, + 4, 6, 5, 6, 6, 6, 5, 5, + 5, 6, 5, 6, 6, 6, 6, 6, + 112, 136, 8, 16, 32, 0, 32, 0, + 0, 0, 144, 80, 160, 144, 144, 0, + 0, 0, 224, 32, 32, 32, 240, 0, + 0, 0, 224, 32, 96, 160, 160, 0, + 0, 0, 248, 16, 16, 16, 16, 0, + 0, 0, 240, 16, 16, 144, 144, 0, + 0, 0, 192, 64, 64, 64, 64, 0, + 0, 0, 224, 64, 32, 64, 64, 0, + 0, 0, 240, 144, 144, 144, 144, 0, + 0, 0, 184, 168, 136, 136, 112, 0, + 0, 0, 192, 64, 0, 0, 0, 0, + 0, 0, 240, 16, 16, 16, 16, 16, + 0, 0, 224, 16, 16, 16, 224, 0, + 128, 128, 224, 32, 32, 32, 192, 0, + 0, 0, 248, 72, 72, 72, 120, 0, + 0, 0, 176, 208, 144, 144, 176, 0, + 0, 0, 192, 64, 64, 64, 64, 64, + 0, 0, 96, 32, 32, 32, 224, 0, + 0, 0, 248, 72, 72, 72, 48, 0, + 0, 0, 80, 80, 80, 80, 224, 0, + 0, 0, 248, 72, 104, 8, 8, 8, + 0, 0, 248, 72, 104, 8, 248, 0, + 0, 0, 216, 72, 48, 16, 16, 16, + 0, 0, 144, 80, 32, 16, 240, 0, + 0, 0, 240, 16, 144, 160, 128, 128, + 0, 0, 240, 16, 16, 16, 16, 0, + 0, 0, 168, 168, 200, 136, 112, 0, + 0, 0, 240, 80, 80, 80, 208, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 0, 48, 72, 64, 72, 48, 16, 48, + 0, 80, 0, 96, 32, 40, 48, 0, + 32, 16, 0, 152, 144, 144, 232, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(hebrew_video_font, sizeof(hebrew_video_font), GBVARS_HEBREWVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_italian_video_font() { + byte italian_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 80, 0, 112, 8, 120, 136, 120, 0, + 80, 0, 112, 136, 136, 136, 112, 0, + 32, 16, 0, 112, 136, 136, 112, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 32, 16, 0, 192, 64, 64, 224, 0, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 32, 64, 0, 112, 248, 128, 112, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 32, 16, 0, 112, 8, 248, 120, 0, + 32, 16, 0, 112, 136, 136, 112, 0, + 32, 16, 0, 112, 248, 128, 112, 0, + 32, 80, 0, 112, 248, 128, 112, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 32, 80, 0, 96, 32, 40, 48, 0, + 112, 136, 136, 248, 136, 136, 136, 0, + 240, 72, 72, 112, 72, 72, 240, 0, + 48, 72, 128, 128, 128, 72, 48, 0, + 224, 80, 72, 72, 72, 80, 224, 0, + 248, 72, 64, 112, 64, 72, 248, 0, + 248, 72, 64, 112, 64, 64, 224, 0, + 48, 72, 128, 152, 136, 72, 56, 0, + 136, 136, 136, 248, 136, 136, 136, 0, + 248, 32, 32, 32, 32, 32, 248, 0, + 24, 8, 8, 8, 136, 136, 112, 0, + 200, 72, 80, 96, 80, 72, 200, 0, + 224, 64, 64, 64, 64, 72, 248, 0, + 136, 216, 168, 168, 136, 136, 136, 0, + 136, 200, 168, 152, 136, 136, 136, 0, + 112, 136, 136, 136, 136, 136, 112, 0, + 240, 72, 72, 112, 64, 64, 224, 0, + 112, 136, 136, 136, 136, 168, 112, 8, + 240, 72, 72, 112, 72, 72, 200, 0, + 112, 136, 128, 112, 8, 136, 112, 0, + 248, 168, 32, 32, 32, 32, 112, 0, + 136, 136, 136, 136, 136, 136, 120, 0, + 136, 136, 136, 80, 80, 32, 32, 0, + 136, 136, 136, 136, 168, 216, 136, 0, + 136, 136, 80, 32, 80, 136, 136, 0, + 136, 136, 136, 112, 32, 32, 112, 0, + 248, 136, 16, 32, 64, 136, 248, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 0, 0, 112, 136, 128, 112, 32, 96, + 160, 0, 192, 64, 64, 64, 224, 0, + 32, 16, 0, 144, 144, 144, 104, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(italian_video_font, sizeof(italian_video_font), GBVARS_ITALIANVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_spanish_video_font() { + byte spanish_video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 80, 0, 112, 8, 120, 136, 120, 0, + 80, 0, 112, 136, 136, 136, 112, 0, + 80, 0, 144, 144, 144, 144, 104, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 96, 144, 144, 160, 144, 144, 160, 128, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 32, 64, 0, 112, 248, 128, 112, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 32, 64, 0, 112, 8, 248, 120, 0, + 32, 64, 0, 192, 64, 64, 224, 0, + 32, 64, 0, 112, 136, 136, 112, 0, + 32, 64, 0, 144, 144, 144, 104, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 80, 160, 0, 240, 136, 136, 136, 0, + 112, 136, 136, 248, 136, 136, 136, 0, + 240, 72, 72, 112, 72, 72, 240, 0, + 48, 72, 128, 128, 128, 72, 48, 0, + 224, 80, 72, 72, 72, 80, 224, 0, + 248, 72, 64, 112, 64, 72, 248, 0, + 248, 72, 64, 112, 64, 64, 224, 0, + 48, 72, 128, 152, 136, 72, 56, 0, + 136, 136, 136, 248, 136, 136, 136, 0, + 248, 32, 32, 32, 32, 32, 248, 0, + 24, 8, 8, 8, 136, 136, 112, 0, + 200, 72, 80, 96, 80, 72, 200, 0, + 224, 64, 64, 64, 64, 72, 248, 0, + 136, 216, 168, 168, 136, 136, 136, 0, + 136, 200, 168, 152, 136, 136, 136, 0, + 112, 136, 136, 136, 136, 136, 112, 0, + 240, 72, 72, 112, 64, 64, 224, 0, + 112, 136, 136, 136, 136, 168, 112, 8, + 240, 72, 72, 112, 72, 72, 200, 0, + 112, 136, 128, 112, 8, 136, 112, 0, + 248, 168, 32, 32, 32, 32, 112, 0, + 136, 136, 136, 136, 136, 136, 120, 0, + 136, 136, 136, 80, 80, 32, 32, 0, + 136, 136, 136, 136, 168, 216, 136, 0, + 136, 136, 80, 32, 80, 136, 136, 0, + 136, 136, 136, 112, 32, 32, 112, 0, + 248, 136, 16, 32, 64, 136, 248, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 32, 0, 32, 64, 128, 136, 112, 0, + 32, 0, 32, 32, 112, 112, 32, 0, + 80, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(spanish_video_font, sizeof(spanish_video_font), GBVARS_SPANISHVIDEOFONT_INDEX , GBVARS_SIMON); +} + +static void addCharset_video_font() { + byte video_font[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 112, 112, 32, 32, 0, 32, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 144, 0, 96, 144, 144, 104, 0, + 0, 144, 0, 96, 144, 144, 96, 0, + 0, 144, 0, 144, 144, 144, 96, 0, + 0, 16, 40, 16, 42, 68, 58, 0, + 48, 48, 96, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 4, 0, + 0, 32, 16, 16, 16, 16, 32, 0, + 0, 0, 20, 8, 62, 8, 20, 0, + 0, 112, 136, 240, 136, 136, 240, 0, + 0, 0, 0, 0, 0, 48, 48, 96, + 0, 0, 0, 240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 48, 0, + 16, 32, 0, 120, 112, 64, 56, 0, + 112, 136, 152, 168, 200, 136, 112, 0, + 32, 96, 32, 32, 32, 32, 112, 0, + 112, 136, 8, 48, 64, 136, 248, 0, + 112, 136, 8, 48, 8, 136, 112, 0, + 16, 48, 80, 144, 248, 16, 56, 0, + 248, 128, 240, 8, 8, 136, 112, 0, + 48, 64, 128, 240, 136, 136, 112, 0, + 248, 136, 8, 16, 32, 32, 32, 0, + 112, 136, 136, 112, 136, 136, 112, 0, + 112, 136, 136, 120, 8, 16, 96, 0, + 0, 0, 48, 48, 0, 48, 48, 0, + 32, 16, 0, 112, 8, 248, 120, 0, + 32, 80, 0, 144, 144, 144, 104, 0, + 80, 0, 144, 144, 144, 144, 104, 0, + 32, 80, 0, 112, 248, 128, 112, 0, + 112, 136, 8, 16, 32, 0, 32, 0, + 32, 80, 0, 192, 64, 64, 224, 0, + 112, 136, 136, 248, 136, 136, 136, 0, + 240, 72, 72, 112, 72, 72, 240, 0, + 48, 72, 128, 128, 128, 72, 48, 0, + 224, 80, 72, 72, 72, 80, 224, 0, + 248, 72, 64, 112, 64, 72, 248, 0, + 248, 72, 64, 112, 64, 64, 224, 0, + 48, 72, 128, 152, 136, 72, 56, 0, + 136, 136, 136, 248, 136, 136, 136, 0, + 248, 32, 32, 32, 32, 32, 248, 0, + 24, 8, 8, 8, 136, 136, 112, 0, + 200, 72, 80, 96, 80, 72, 200, 0, + 224, 64, 64, 64, 64, 72, 248, 0, + 136, 216, 168, 168, 136, 136, 136, 0, + 136, 200, 168, 152, 136, 136, 136, 0, + 112, 136, 136, 136, 136, 136, 112, 0, + 240, 72, 72, 112, 64, 64, 224, 0, + 112, 136, 136, 136, 136, 168, 112, 8, + 240, 72, 72, 112, 72, 72, 200, 0, + 112, 136, 128, 112, 8, 136, 112, 0, + 248, 168, 32, 32, 32, 32, 112, 0, + 136, 136, 136, 136, 136, 136, 120, 0, + 136, 136, 136, 80, 80, 32, 32, 0, + 136, 136, 136, 136, 168, 216, 136, 0, + 136, 136, 80, 32, 80, 136, 136, 0, + 136, 136, 136, 112, 32, 32, 112, 0, + 248, 136, 16, 32, 64, 136, 248, 0, + 0, 14, 8, 8, 8, 8, 14, 0, + 0, 128, 64, 32, 16, 8, 4, 0, + 0, 112, 16, 16, 16, 16, 112, 0, + 0, 48, 72, 64, 72, 48, 16, 48, + 0, 80, 0, 96, 32, 40, 48, 0, + 32, 16, 0, 152, 144, 144, 232, 0, + 0, 0, 112, 8, 120, 136, 120, 0, + 192, 64, 80, 104, 72, 72, 112, 0, + 0, 0, 112, 136, 128, 136, 112, 0, + 24, 16, 80, 176, 144, 144, 112, 0, + 0, 0, 112, 136, 248, 128, 112, 0, + 48, 72, 64, 224, 64, 64, 224, 0, + 0, 0, 104, 144, 144, 112, 136, 112, + 192, 64, 80, 104, 72, 72, 200, 0, + 64, 0, 192, 64, 64, 64, 224, 0, + 8, 0, 8, 8, 8, 8, 136, 112, + 192, 64, 72, 80, 96, 80, 200, 0, + 192, 64, 64, 64, 64, 64, 224, 0, + 0, 0, 144, 216, 168, 136, 136, 0, + 0, 0, 240, 136, 136, 136, 136, 0, + 0, 0, 112, 136, 136, 136, 112, 0, + 0, 0, 176, 72, 72, 112, 64, 224, + 0, 0, 104, 144, 144, 112, 16, 56, + 0, 0, 176, 72, 72, 64, 224, 0, + 0, 0, 120, 128, 112, 8, 240, 0, + 64, 64, 240, 64, 64, 72, 48, 0, + 0, 0, 144, 144, 144, 144, 104, 0, + 0, 0, 136, 136, 136, 80, 32, 0, + 0, 0, 136, 136, 168, 216, 144, 0, + 0, 0, 136, 80, 32, 80, 136, 0, + 0, 0, 136, 136, 136, 112, 32, 192, + 0, 0, 248, 144, 32, 72, 248, 0, + 32, 80, 0, 96, 144, 144, 96, 0, + 0, 14, 8, 48, 8, 8, 14, 0, + 0, 8, 8, 8, 8, 8, 8, 0, + 0, 112, 16, 12, 16, 16, 112, 0, + 0, 0, 0, 0, 0, 0, 248, 0, + 252, 252, 252, 252, 252, 252, 252, 252, + 240, 240, 240, 240, 240, 240, 240, 240, + }; + writeRecord(video_font, sizeof(video_font), GBVARS_VIDEOFONT_INDEX , GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void Simon_addCharset() { + addCharset_russian_video_font(); + addCharset_french_video_font(); + addCharset_german_video_font(); + addCharset_hebrew_video_font(); + addCharset_italian_video_font(); + addCharset_spanish_video_font(); + addCharset_video_font(); +} diff --git a/backends/platform/PalmOS/Src/builder/simon/bs_simon.c b/backends/platform/PalmOS/Src/builder/simon/bs_simon.c new file mode 100644 index 0000000000..885a41f8e9 --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/simon/bs_simon.c @@ -0,0 +1,377 @@ +#include +#include "b_globals.h" +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +typedef struct { +#if 0 // original struct + const char *gme_filename; + const char *wav_filename; + const char *voc_filename; + const char *mp3_filename; + const char *vorbis_filename; + const char *voc_effects_filename; + const char *mp3_effects_filename; + const char *vorbis_effects_filename; + const char *gamepc_filename; + #else + const char gme_filename[12]; + const char wav_filename[12]; + const char voc_filename[12]; + const char mp3_filename[12]; + const char flac_filename[12]; + const char vorbis_filename[12]; + const char voc_effects_filename[12]; + const char mp3_effects_filename[12]; + const char vorbis_effects_filename[12]; + const char flac_effects_filename[12]; + const char gamepc_filename[12]; + #endif +} GameSpecificSettings; +/////////////////////////////////////////////////////////////////// +static void addSimon_simon1_settings() { + + + GameSpecificSettings simon1_settings = { + "SIMON.GME", // gme_filename + "SIMON.WAV", // wav_filename + "SIMON.VOC", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "SIMON.FLA", // flac_filename + "EFFECTS.VOC", // voc_effects_filename + "EFFECTS.MP3", // mp3_effects_filename + "EFFECTS.OGG", // vorbis_effects_filename + "EFFECTS.FLA", // flac_effects_filename + "GAMEPC", // gamepc_filename + }; + + writeRecord(&simon1_settings, sizeof(simon1_settings), GBVARS_SIMON1SETTINGS_INDEX, GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// +static void addSimon_simon1acorn_settings() { + + + GameSpecificSettings simon1acorn_settings = { + "DATA", // gme_filename + "", // wav_filename + "SIMON", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "SIMON.FLA", // flac_filename + "EFFECTS", // voc_effects_filename + "EFFECTS.MP3", // mp3_effects_filename + "EFFECTS.OGG", // vorbis_effects_filename + "EFFECTS.FLA", // flac_effects_filename + "GAMEBASE", // gamepc_filename +}; + + writeRecord(&simon1acorn_settings, sizeof(simon1acorn_settings), GBVARS_SIMON1ACORNSETTINGS_INDEX, GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// +static void addSimon_simon1amiga_settings() { + + + GameSpecificSettings simon1amiga_settings = { + "", // gme_filename + "", // wav_filename + "", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "SIMON.FLA", // flac_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "", // flac_effects_filename + "gameamiga", // gamepc_filename +}; + + + writeRecord(&simon1amiga_settings, sizeof(simon1amiga_settings), GBVARS_SIMON1AMIGASETTINGS_INDEX, GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// + +static void addSimon_simon1demo_settings() { + + + GameSpecificSettings simon1demo_settings = { + "", // gme_filename + "", // wav_filename + "", // voc_filename + "", // mp3_filename + "", // vorbis_filename + "", // flac_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "", // flac_effects_filename + "GDEMO", // gamepc_filename +}; + + writeRecord(&simon1demo_settings, sizeof(simon1demo_settings), GBVARS_SIMON1DEMOSETTINGS_INDEX, GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// +static void addSimon_simon2win_settings() { + + + GameSpecificSettings simon2win_settings = { + "SIMON2.GME", // gme_filename + "SIMON2.WAV", // wav_filename + "SIMON2.VOC", // voc_filename + "SIMON2.MP3", // mp3_filename + "SIMON2.OGG", // vorbis_filename + "SIMON2.FLA", // flac_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "", // flac_effects_filename + "GSPTR30", // gamepc_filename +}; + + + writeRecord(&simon2win_settings, sizeof(simon2win_settings), GBVARS_SIMON2WINSETTINGS_INDEX, GBVARS_SIMON); +} +/////////////////////////////////////////////////////////////////// +static void addSimon_simon2dos_settings() { + + + GameSpecificSettings simon2dos_settings = { + "SIMON2.GME", // gme_filename + "", // wav_filename + "", // voc_filename + "", // mp3_filename + "", // vorbis_filename + "", // flac_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "", // flac_effects_filename + "GAME32", // gamepc_filename +}; + + writeRecord(&simon2dos_settings, sizeof(simon2dos_settings), GBVARS_SIMON2DOSSETTINGS_INDEX, GBVARS_SIMON); +} + +typedef unsigned char byte; +static void addSimon_simon1_cursor() { + + + byte _simon1_cursor[256] = { + 0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe1,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +}; + + writeRecord(&_simon1_cursor, sizeof(_simon1_cursor), GBVARS_SIMON1CURSOR_INDEX, GBVARS_SIMON); +} +/* +static void addSimon_simon2_cursors() { + + + byte _simon2_cursors[10][256] = { + // cross hair + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xec,0xec,0xec,0xec,0xec,0xef,0xff,0xea,0xff,0xef,0xec,0xec,0xec,0xec,0xec,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // examine + { 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xef,0xee,0xeb,0xe4,0xe4,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xec,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xeb,0xee,0xef,0xee,0xee,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xeb,0xef,0xef,0xef,0xec,0xee,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xeb,0xef,0xef,0xee,0xef,0xef,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xeb,0xee,0xef,0xef,0xef,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xee,0xe4,0xec,0xef,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xeb,0xe4,0xee,0xef,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xeb,0xef,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // pick up + { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xe5,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe9,0xe7,0xe5,0xff,0xff, + 0xff,0xe5,0xe6,0xe7,0xe6,0xe5,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff, + 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff, + 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe5,0xff, + 0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff, + 0xff,0xef,0xee,0xeb,0xee,0xef,0xff,0xff,0xff,0xff,0xef,0xee,0xeb,0xee,0xef,0xff, + 0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff, + 0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff, + 0xff,0xff,0xff,0xef,0xe4,0xeb,0xef,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xeb,0xeb,0xeb,0xef,0xef,0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xef,0xee,0xee,0xee,0xee,0xe1,0xe1,0xef,0xff,0xff,0xff,0xe4, + 0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xeb,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xeb,0xec, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe4 }, + // give + { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe9,0xe7,0xe8,0xe8,0xe8,0xe7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe5,0xe7,0xea,0xe8,0xe8,0xe8,0xea,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe7,0xe8,0xe8,0xea,0xe9,0xea,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff, + 0xe5,0xe7,0xe9,0xe8,0xe8,0xe9,0xec,0xe9,0xe8,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff, + 0xe5,0xe7,0xe7,0xe9,0xe8,0xec,0xe9,0xec,0xe8,0xe9,0xe7,0xe6,0xe5,0xff,0xff,0xff, + 0xe5,0xe7,0xe7,0xe8,0xec,0xe9,0xe9,0xe9,0xec,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff, + 0xe5,0xe7,0xe7,0xea,0xe8,0xe9,0xe9,0xe9,0xe7,0xec,0xec,0xe4,0xe5,0xff,0xff,0xff, + 0xe5,0xe7,0xe7,0xe9,0xe7,0xe8,0xe9,0xe7,0xe6,0xec,0xe4,0xec,0xe4,0xef,0xff,0xff, + 0xe5,0xe6,0xe7,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe4,0xec,0xe4,0xec,0xe4,0xef,0xff, + 0xff,0xe5,0xe6,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe4,0xec,0xe4,0xec,0xeb,0xff, + 0xff,0xff,0xe5,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe6,0xe4,0xec,0xeb,0xef,0xff, + 0xff,0xff,0xff,0xe8,0xe7,0xe7,0xe8,0xe6,0xe6,0xe7,0xff,0xef,0xeb,0xef,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // talk + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe8,0xe7,0xe6,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe6,0xe9,0xea,0xe6,0xea,0xe9,0xe8,0xe9,0xe8,0xe7,0xe5,0xff,0xff,0xff, + 0xff,0xe5,0xe7,0xe5,0xef,0xe5,0xec,0xea,0xe5,0xea,0xec,0xe5,0xe9,0xe6,0xff,0xff, + 0xff,0xe5,0xe6,0xe5,0xef,0xef,0xef,0xe5,0xef,0xef,0xe5,0xef,0xef,0xe8,0xe5,0xff, + 0xff,0xe5,0xe9,0xea,0xe5,0xe8,0xe7,0xe6,0xe6,0xe8,0xe7,0xe5,0xec,0xe9,0xe5,0xff, + 0xff,0xe5,0xe9,0xe8,0xe5,0xe7,0xe8,0xe8,0xe9,0xe9,0xe8,0xe5,0xe9,0xe9,0xe5,0xff, + 0xff,0xe5,0xe6,0xec,0xea,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe5,0xec,0xe8,0xe5,0xff, + 0xff,0xff,0xe5,0xe9,0xe8,0xe9,0xe5,0xe8,0xe5,0xe8,0xe5,0xe9,0xe9,0xe7,0xe5,0xff, + 0xff,0xff,0xe5,0xe7,0xe9,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xe5,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // use + { 0xff,0xff,0xff,0xff,0xff,0xee,0xe1,0xeb,0xee,0xef,0xef,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xef,0xe4,0xeb,0xee,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xe4,0xeb,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xec,0xe4,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xe4,0xe4,0xee,0xef,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xeb,0xeb,0xeb,0xe1,0xef,0xee,0xef, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xef,0xef,0xee,0xeb,0xeb,0xe4,0xee, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xee,0xe4,0xeb,0xef,0xff, + 0xff,0xff,0xff,0xe5,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xef,0xee,0xef,0xff,0xff, + 0xff,0xff,0xe5,0xe6,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff, + 0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xe5,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // wear + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xeb,0xed,0xe4,0xe2,0xeb,0xee,0xee,0xee,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xe2,0xec,0xe2,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xeb,0xed,0xeb,0xee,0xef,0xef,0xef,0xee,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xef,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xef,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xef,0xe2,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff, + 0xff,0xef,0xef,0xef,0xe1,0xe4,0xe4,0xe4,0xe1,0xeb,0xee,0xef,0xef,0xef,0xff,0xff, + 0xef,0xee,0xee,0xef,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xee,0xee,0xef,0xff, + 0xff,0xef,0xef,0xee,0xe1,0xe2,0xe4,0xe4,0xe4,0xeb,0xe1,0xee,0xef,0xef,0xff,0xff, + 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // move + { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff, + 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff, + 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff, + 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff, + 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff, + 0xff,0xe1,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe1,0xff, + 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff, + 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff, + 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff, + 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff, + 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, + // open + { 0xff,0xff,0xe5,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xff,0xe5,0xe7,0xe6,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xe7,0xe5,0xff,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe5,0xff,0xff,0xff, + 0xff,0xe5,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe5,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xea,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xe5,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe5,0xff,0xff,0xff,0xff }, + // question mark + { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xea,0xe9,0xea,0xec,0xe9,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe8,0xe7,0xe8,0xea,0xec,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xe5,0xe8,0xe9,0xec,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe8,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xec,0xea,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xea,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe9,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff }, +}; + + writeRecord(&_simon2_cursors, sizeof(_simon2_cursors), GBVARS_SIMON2CURSORS_INDEX, GBVARS_SIMON); +}*/ +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void addSimon() { + addSimon_simon1_settings(); + addSimon_simon1acorn_settings(); + addSimon_simon1amiga_settings(); + addSimon_simon1demo_settings(); + addSimon_simon2win_settings(); + addSimon_simon2dos_settings(); + + addSimon_simon1_cursor(); +// addSimon_simon2_cursors(); +} diff --git a/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c b/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c new file mode 100644 index 0000000000..36c770eeda --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c @@ -0,0 +1,2031 @@ +#include +#include "b_globals.h" + +typedef struct { + unsigned char lChild; + unsigned char rChild; + unsigned char value; +} HuffTree; + +static void addHufftext_huffTree_00109() { + HuffTree _huffTree_00109[] = { + { 1, 22, 0 }, + { 2, 9, 0 }, + { 3, 6, 0 }, + { 4, 5, 0 }, + { 0, 0, 0x20 }, + { 0, 0, 0x65 }, + { 7, 8, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x6F }, + { 10, 17, 0 }, + { 11, 14, 0 }, + { 12, 13, 0 }, + { 0, 0, 0x2E }, + { 0, 0, 0x61 }, + { 15, 16, 0 }, + { 0, 0, 0x00 }, + { 0, 0, 0x73 }, + { 18, 21, 0 }, + { 19, 20, 0 }, + { 0, 0, 0x6E }, + { 0, 0, 0x68 }, + { 0, 0, 0x69 }, + { 23, 46, 0 }, + { 24, 35, 0 }, + { 25, 30, 0 }, + { 26, 29, 0 }, + { 27, 28, 0 }, + { 0, 0, 0x45 }, + { 0, 0, 0x49 }, + { 0, 0, 0x72 }, + { 31, 34, 0 }, + { 32, 33, 0 }, + { 0, 0, 0x54 }, + { 0, 0, 0x75 }, + { 0, 0, 0x6D }, + { 36, 41, 0 }, + { 37, 40, 0 }, + { 38, 39, 0 }, + { 0, 0, 0x6C }, + { 0, 0, 0x79 }, + { 0, 0, 0x4F }, + { 42, 45, 0 }, + { 43, 44, 0 }, + { 0, 0, 0x41 }, + { 0, 0, 0x53 }, + { 0, 0, 0x4E }, + { 47, 66, 0 }, + { 48, 57, 0 }, + { 49, 54, 0 }, + { 50, 53, 0 }, + { 51, 52, 0 }, + { 0, 0, 0x52 }, + { 0, 0, 0x64 }, + { 0, 0, 0x27 }, + { 55, 56, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x4C }, + { 58, 63, 0 }, + { 59, 62, 0 }, + { 60, 61, 0 }, + { 0, 0, 0x67 }, + { 0, 0, 0x43 }, + { 0, 0, 0x63 }, + { 64, 65, 0 }, + { 0, 0, 0x48 }, + { 0, 0, 0x21 }, + { 67, 84, 0 }, + { 68, 77, 0 }, + { 69, 74, 0 }, + { 70, 73, 0 }, + { 71, 72, 0 }, + { 0, 0, 0x55 }, + { 0, 0, 0x77 }, + { 0, 0, 0x66 }, + { 75, 76, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x4D }, + { 78, 81, 0 }, + { 79, 80, 0 }, + { 0, 0, 0x62 }, + { 0, 0, 0x57 }, + { 82, 83, 0 }, + { 0, 0, 0x3F }, + { 0, 0, 0x47 }, + { 85, 94, 0 }, + { 86, 91, 0 }, + { 87, 90, 0 }, + { 88, 89, 0 }, + { 0, 0, 0x59 }, + { 0, 0, 0x2C }, + { 0, 0, 0x70 }, + { 92, 93, 0 }, + { 0, 0, 0x42 }, + { 0, 0, 0x6B }, + { 95, 100, 0 }, + { 96, 99, 0 }, + { 97, 98, 0 }, + { 0, 0, 0x76 }, + { 0, 0, 0x46 }, + { 0, 0, 0x4B }, + { 101, 106, 0 }, + { 102, 105, 0 }, + { 103, 104, 0 }, + { 0, 0, 0x2D }, + { 0, 0, 0x56 }, + { 0, 0, 0x4A }, + { 107, 120, 0 }, + { 108, 113, 0 }, + { 109, 112, 0 }, + { 110, 111, 0 }, + { 0, 0, 0x3A }, + { 0, 0, 0x58 }, + { 0, 0, 0x6A }, + { 114, 117, 0 }, + { 115, 116, 0 }, + { 0, 0, 0x60 }, + { 0, 0, 0x5A }, + { 118, 119, 0 }, + { 0, 0, 0x78 }, + { 0, 0, 0x30 }, + { 121, 132, 0 }, + { 122, 127, 0 }, + { 123, 126, 0 }, + { 124, 125, 0 }, + { 0, 0, 0x32 }, + { 0, 0, 0x31 }, + { 0, 0, 0x51 }, + { 128, 131, 0 }, + { 129, 130, 0 }, + { 0, 0, 0x33 }, + { 0, 0, 0x39 }, + { 0, 0, 0x71 }, + { 133, 142, 0 }, + { 134, 137, 0 }, + { 135, 136, 0 }, + { 0, 0, 0x34 }, + { 0, 0, 0x38 }, + { 138, 141, 0 }, + { 139, 140, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x7A }, + { 0, 0, 0x26 }, + { 143, 150, 0 }, + { 144, 147, 0 }, + { 145, 146, 0 }, + { 0, 0, 0x36 }, + { 0, 0, 0x29 }, + { 148, 149, 0 }, + { 0, 0, 0x28 }, + { 0, 0, 0x37 }, + { 151, 158, 0 }, + { 152, 155, 0 }, + { 153, 154, 0 }, + { 0, 0, 0x24 }, + { 0, 0, 0x22 }, + { 156, 157, 0 }, + { 0, 0, 0x2F }, + { 0, 0, 0x3C }, + { 159, 162, 0 }, + { 160, 161, 0 }, + { 0, 0, 0x3E }, + { 0, 0, 0x25 }, + { 163, 164, 0 }, + { 0, 0, 0x23 }, + { 165, 166, 0 }, + { 0, 0, 0x5F }, + { 0, 0, 0x7C } + }; + writeRecord(_huffTree_00109, sizeof(_huffTree_00109), GBVARS_HUFFTREE_00109_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00267() { + HuffTree _huffTree_00267[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 6, 0 }, + { 4, 5, 0 }, + { 0, 0, 0x20 }, + { 0, 0, 0x65 }, + { 0, 0, 0x73 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6d }, + { 0, 0, 0x61 }, + { 13, 14, 0 }, + { 0, 0, 0x0 }, + { 0, 0, 0x6e }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x69 }, + { 0, 0, 0x74 }, + { 0, 0, 0x75 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x2e }, + { 0, 0, 0x72 }, + { 0, 0, 0x45 }, + { 29, 30, 0 }, + { 0, 0, 0x6f }, + { 0, 0, 0x68 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x67 }, + { 37, 38, 0 }, + { 0, 0, 0x49 }, + { 0, 0, 0x79 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x53 }, + { 0, 0, 0x64 }, + { 0, 0, 0x6c }, + { 45, 64, 0 }, + { 46, 53, 0 }, + { 47, 50, 0 }, + { 48, 49, 0 }, + { 0, 0, 0x54 }, + { 0, 0, 0x4e }, + { 51, 52, 0 }, + { 0, 0, 0x63 }, + { 0, 0, 0x52 }, + { 54, 59, 0 }, + { 55, 58, 0 }, + { 56, 57, 0 }, + { 0, 0, 0x41 }, + { 0, 0, 0x4f }, + { 0, 0, 0x4c }, + { 60, 63, 0 }, + { 61, 62, 0 }, + { 0, 0, 0x48 }, + { 0, 0, 0x43 }, + { 0, 0, 0x55 }, + { 65, 84, 0 }, + { 66, 75, 0 }, + { 67, 72, 0 }, + { 68, 71, 0 }, + { 69, 70, 0 }, + { 0, 0, 0x62 }, + { 0, 0, 0x21 }, + { 0, 0, 0x27 }, + { 73, 74, 0 }, + { 0, 0, 0x77 }, + { 0, 0, 0x66 }, + { 76, 81, 0 }, + { 77, 80, 0 }, + { 78, 79, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x4d }, + { 0, 0, 0x2c }, + { 82, 83, 0 }, + { 0, 0, 0x57 }, + { 0, 0, 0x42 }, + { 85, 98, 0 }, + { 86, 93, 0 }, + { 87, 90, 0 }, + { 88, 89, 0 }, + { 0, 0, 0x3f }, + { 0, 0, 0x50 }, + { 91, 92, 0 }, + { 0, 0, 0x6b }, + { 0, 0, 0x70 }, + { 94, 97, 0 }, + { 95, 96, 0 }, + { 0, 0, 0x76 }, + { 0, 0, 0x46 }, + { 0, 0, 0x4b }, + { 99, 110, 0 }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 0x56 }, + { 0, 0, 0x59 }, + { 0, 0, 0x7a }, + { 106, 109, 0 }, + { 107, 108, 0 }, + { 0, 0, 0x2d }, + { 0, 0, 0x23 }, + { 0, 0, 0x4a }, + { 111, 124, 0 }, + { 112, 117, 0 }, + { 113, 116, 0 }, + { 114, 115, 0 }, + { 0, 0, 0x5a }, + { 0, 0, 0x28 }, + { 0, 0, 0x29 }, + { 118, 121, 0 }, + { 119, 120, 0 }, + { 0, 0, 0x6a }, + { 0, 0, 0x2b }, + { 122, 123, 0 }, + { 0, 0, 0x2a }, + { 0, 0, 0x71 }, + { 125, 138, 0 }, + { 126, 131, 0 }, + { 127, 130, 0 }, + { 128, 129, 0 }, + { 0, 0, 0x7d }, + { 0, 0, 0x3a }, + { 0, 0, 0x60 }, + { 132, 135, 0 }, + { 133, 134, 0 }, + { 0, 0, 0x30 }, + { 0, 0, 0x32 }, + { 136, 137, 0 }, + { 0, 0, 0x31 }, + { 0, 0, 0x51 }, + { 139, 150, 0 }, + { 140, 145, 0 }, + { 141, 144, 0 }, + { 142, 143, 0 }, + { 0, 0, 0x58 }, + { 0, 0, 0x78 }, + { 0, 0, 0x33 }, + { 146, 149, 0 }, + { 147, 148, 0 }, + { 0, 0, 0x39 }, + { 0, 0, 0x34 }, + { 0, 0, 0x3c }, + { 151, 160, 0 }, + { 152, 157, 0 }, + { 153, 156, 0 }, + { 154, 155, 0 }, + { 0, 0, 0x38 }, + { 0, 0, 0x5d }, + { 0, 0, 0x3d }, + { 158, 159, 0 }, + { 0, 0, 0x26 }, + { 0, 0, 0x35 }, + { 161, 168, 0 }, + { 162, 165, 0 }, + { 163, 164, 0 }, + { 0, 0, 0x36 }, + { 0, 0, 0x2f }, + { 166, 167, 0 }, + { 0, 0, 0x37 }, + { 0, 0, 0x24 }, + { 169, 174, 0 }, + { 170, 173, 0 }, + { 171, 172, 0 }, + { 0, 0, 0x3e }, + { 0, 0, 0x25 }, + { 0, 0, 0x5e }, + { 175, 180, 0 }, + { 176, 179, 0 }, + { 177, 178, 0 }, + { 0, 0, 0x22 }, + { 0, 0, 0x40 }, + { 0, 0, 0x5b }, + { 181, 184, 0 }, + { 182, 183, 0 }, + { 0, 0, 0x5f }, + { 0, 0, 0x7b }, + { 185, 186, 0 }, + { 0, 0, 0x5c }, + { 0, 0, 0x7c }, + }; + writeRecord(_huffTree_00267, sizeof(_huffTree_00267), GBVARS_HUFFTREE_00267_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00288() { + HuffTree _huffTree_00288[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, 0x20 }, + { 5, 6, 0 }, + { 0, 0, 0x65 }, + { 0, 0, 0x73 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6e }, + { 0, 0, 0x69 }, + { 13, 14, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x61 }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x2e }, + { 0, 0, 0x0 }, + { 0, 0, 0x45 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x72 }, + { 0, 0, 0x6f }, + { 0, 0, 0x75 }, + { 29, 30, 0 }, + { 0, 0, 0x6d }, + { 0, 0, 0x68 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x49 }, + { 0, 0, 0x6c }, + { 37, 38, 0 }, + { 0, 0, 0x53 }, + { 0, 0, 0x52 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x4e }, + { 0, 0, 0x54 }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 0x63 }, + { 0, 0, 0x41 }, + { 0, 0, 0x4f }, + { 53, 54, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x4c }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 0x43 }, + { 0, 0, 0x67 }, + { 61, 62, 0 }, + { 0, 0, 0x55 }, + { 0, 0, 0x27 }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, 0x79 }, + { 0, 0, 0x48 }, + { 0, 0, 0x70 }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 0x21 }, + { 0, 0, 0x4d }, + { 0, 0, 0x62 }, + { 77, 78, 0 }, + { 0, 0, 0x76 }, + { 0, 0, 0x2c }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x66 }, + { 0, 0, 0x3f }, + { 86, 87, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x42 }, + { 89, 104, 0 }, + { 90, 97, 0 }, + { 91, 94, 0 }, + { 92, 93, 0 }, + { 0, 0, 0x77 }, + { 0, 0, 0x57 }, + { 95, 96, 0 }, + { 0, 0, 0x46 }, + { 0, 0, 0x56 }, + { 98, 101, 0 }, + { 99, 100, 0 }, + { 0, 0, 0x6b }, + { 0, 0, 0x7a }, + { 102, 103, 0 }, + { 0, 0, 0x4b }, + { 0, 0, 0x2d }, + { 105, 116, 0 }, + { 106, 111, 0 }, + { 107, 110, 0 }, + { 108, 109, 0 }, + { 0, 0, 0x4a }, + { 0, 0, 0x2b }, + { 0, 0, 0x71 }, + { 112, 115, 0 }, + { 113, 114, 0 }, + { 0, 0, 0x59 }, + { 0, 0, 0x6a }, + { 0, 0, 0x5a }, + { 117, 132, 0 }, + { 118, 125, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 0x23 }, + { 0, 0, 0x51 }, + { 123, 124, 0 }, + { 0, 0, 0x28 }, + { 0, 0, 0x29 }, + { 126, 129, 0 }, + { 127, 128, 0 }, + { 0, 0, 0x3c }, + { 0, 0, 0x78 }, + { 130, 131, 0 }, + { 0, 0, 0x3a }, + { 0, 0, 0x2a }, + { 133, 146, 0 }, + { 134, 141, 0 }, + { 135, 138, 0 }, + { 136, 137, 0 }, + { 0, 0, 0x58 }, + { 0, 0, 0x7d }, + { 139, 140, 0 }, + { 0, 0, 0x3d }, + { 0, 0, 0x60 }, + { 142, 145, 0 }, + { 143, 144, 0 }, + { 0, 0, 0x5d }, + { 0, 0, 0x30 }, + { 0, 0, 0x32 }, + { 147, 158, 0 }, + { 148, 153, 0 }, + { 149, 152, 0 }, + { 150, 151, 0 }, + { 0, 0, 0x31 }, + { 0, 0, 0x33 }, + { 0, 0, 0x39 }, + { 154, 157, 0 }, + { 155, 156, 0 }, + { 0, 0, 0x2f }, + { 0, 0, 0x34 }, + { 0, 0, 0x5e }, + { 159, 168, 0 }, + { 160, 165, 0 }, + { 161, 164, 0 }, + { 162, 163, 0 }, + { 0, 0, 0x38 }, + { 0, 0, 0x3e }, + { 0, 0, 0x26 }, + { 166, 167, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x40 }, + { 169, 176, 0 }, + { 170, 173, 0 }, + { 171, 172, 0 }, + { 0, 0, 0x36 }, + { 0, 0, 0x5f }, + { 174, 175, 0 }, + { 0, 0, 0x5c }, + { 0, 0, 0x37 }, + { 177, 182, 0 }, + { 178, 181, 0 }, + { 179, 180, 0 }, + { 0, 0, 0x5b }, + { 0, 0, 0x24 }, + { 0, 0, 0x7b }, + { 183, 186, 0 }, + { 184, 185, 0 }, + { 0, 0, 0x25 }, + { 0, 0, 0x9 }, + { 187, 188, 0 }, + { 0, 0, 0x22 }, + { 0, 0, 0x7c }, + }; + writeRecord(_huffTree_00288, sizeof(_huffTree_00288), GBVARS_HUFFTREE_00288_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00303() { + HuffTree _huffTree_00303[] = { + { 1, 22, 0 }, + { 2, 9, 0 }, + { 3, 6, 0 }, + { 4, 5, 0 }, + { 0, 0, 0x20 }, + { 0, 0, 0x65 }, + { 7, 8, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x73 }, + { 10, 17, 0 }, + { 11, 14, 0 }, + { 12, 13, 0 }, + { 0, 0, 0x6e }, + { 0, 0, 0x61 }, + { 15, 16, 0 }, + { 0, 0, 0x69 }, + { 0, 0, 0x2e }, + { 18, 21, 0 }, + { 19, 20, 0 }, + { 0, 0, 0x6f }, + { 0, 0, 0x0 }, + { 0, 0, 0x45 }, + { 23, 46, 0 }, + { 24, 35, 0 }, + { 25, 30, 0 }, + { 26, 29, 0 }, + { 27, 28, 0 }, + { 0, 0, 0x72 }, + { 0, 0, 0x75 }, + { 0, 0, 0x68 }, + { 31, 34, 0 }, + { 32, 33, 0 }, + { 0, 0, 0x49 }, + { 0, 0, 0x6d }, + { 0, 0, 0x6c }, + { 36, 41, 0 }, + { 37, 40, 0 }, + { 38, 39, 0 }, + { 0, 0, 0x54 }, + { 0, 0, 0x53 }, + { 0, 0, 0x52 }, + { 42, 45, 0 }, + { 43, 44, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x4e }, + { 0, 0, 0x41 }, + { 47, 70, 0 }, + { 48, 59, 0 }, + { 49, 54, 0 }, + { 50, 53, 0 }, + { 51, 52, 0 }, + { 0, 0, 0x63 }, + { 0, 0, 0x4f }, + { 0, 0, 0x44 }, + { 55, 58, 0 }, + { 56, 57, 0 }, + { 0, 0, 0x4c }, + { 0, 0, 0x43 }, + { 0, 0, 0x79 }, + { 60, 65, 0 }, + { 61, 64, 0 }, + { 62, 63, 0 }, + { 0, 0, 0x67 }, + { 0, 0, 0x27 }, + { 0, 0, 0x55 }, + { 66, 69, 0 }, + { 67, 68, 0 }, + { 0, 0, 0x48 }, + { 0, 0, 0x21 }, + { 0, 0, 0x70 }, + { 71, 88, 0 }, + { 72, 81, 0 }, + { 73, 78, 0 }, + { 74, 77, 0 }, + { 75, 76, 0 }, + { 0, 0, 0x4d }, + { 0, 0, 0x62 }, + { 0, 0, 0x3f }, + { 79, 80, 0 }, + { 0, 0, 0x76 }, + { 0, 0, 0x66 }, + { 82, 85, 0 }, + { 83, 84, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x2c }, + { 86, 87, 0 }, + { 0, 0, 0x77 }, + { 0, 0, 0x47 }, + { 89, 102, 0 }, + { 90, 95, 0 }, + { 91, 94, 0 }, + { 92, 93, 0 }, + { 0, 0, 0x42 }, + { 0, 0, 0x57 }, + { 0, 0, 0x6b }, + { 96, 99, 0 }, + { 97, 98, 0 }, + { 0, 0, 0x46 }, + { 0, 0, 0x56 }, + { 100, 101, 0 }, + { 0, 0, 0x59 }, + { 0, 0, 0x4b }, + { 103, 114, 0 }, + { 104, 109, 0 }, + { 105, 108, 0 }, + { 106, 107, 0 }, + { 0, 0, 0x2d }, + { 0, 0, 0x7a }, + { 0, 0, 0x4a }, + { 110, 113, 0 }, + { 111, 112, 0 }, + { 0, 0, 0x71 }, + { 0, 0, 0x2b }, + { 0, 0, 0x6a }, + { 115, 132, 0 }, + { 116, 123, 0 }, + { 117, 120, 0 }, + { 118, 119, 0 }, + { 0, 0, 0x5a }, + { 0, 0, 0x23 }, + { 121, 122, 0 }, + { 0, 0, 0x51 }, + { 0, 0, 0x78 }, + { 124, 129, 0 }, + { 125, 128, 0 }, + { 126, 127, 0 }, + { 0, 0, 0x3a }, + { 0, 0, 0x29 }, + { 0, 0, 0x28 }, + { 130, 131, 0 }, + { 0, 0, 0x3c }, + { 0, 0, 0x58 }, + { 133, 148, 0 }, + { 134, 141, 0 }, + { 135, 138, 0 }, + { 136, 137, 0 }, + { 0, 0, 0x2a }, + { 0, 0, 0x60 }, + { 139, 140, 0 }, + { 0, 0, 0x7d }, + { 0, 0, 0x3d }, + { 142, 145, 0 }, + { 143, 144, 0 }, + { 0, 0, 0x32 }, + { 0, 0, 0x30 }, + { 146, 147, 0 }, + { 0, 0, 0x5d }, + { 0, 0, 0x31 }, + { 149, 160, 0 }, + { 150, 155, 0 }, + { 151, 154, 0 }, + { 152, 153, 0 }, + { 0, 0, 0x7e }, + { 0, 0, 0x33 }, + { 0, 0, 0x7f }, + { 156, 159, 0 }, + { 157, 158, 0 }, + { 0, 0, 0x39 }, + { 0, 0, 0x34 }, + { 0, 0, 0x2f }, + { 161, 172, 0 }, + { 162, 167, 0 }, + { 163, 166, 0 }, + { 164, 165, 0 }, + { 0, 0, 0x38 }, + { 0, 0, 0x5e }, + { 0, 0, 0x26 }, + { 168, 171, 0 }, + { 169, 170, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x36 }, + { 0, 0, 0x3e }, + { 173, 182, 0 }, + { 174, 179, 0 }, + { 175, 178, 0 }, + { 176, 177, 0 }, + { 0, 0, 0x40 }, + { 0, 0, 0x37 }, + { 0, 0, 0x5f }, + { 180, 181, 0 }, + { 0, 0, 0x5c }, + { 0, 0, 0x24 }, + { 183, 190, 0 }, + { 184, 187, 0 }, + { 185, 186, 0 }, + { 0, 0, 0x5b }, + { 0, 0, 0x80 }, + { 188, 189, 0 }, + { 0, 0, 0x81 }, + { 0, 0, 0x22 }, + { 191, 194, 0 }, + { 192, 193, 0 }, + { 0, 0, 0x25 }, + { 0, 0, 0x82 }, + { 195, 196, 0 }, + { 0, 0, 0x7b }, + { 197, 198, 0 }, + { 0, 0, 0x9 }, + { 0, 0, 0x7c }, + }; + writeRecord(_huffTree_00303, sizeof(_huffTree_00303), GBVARS_HUFFTREE_00303_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00331() { + HuffTree _huffTree_00331[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, 0x20 }, + { 5, 6, 0 }, + { 0, 0, 0x65 }, + { 0, 0, 0x61 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6f }, + { 0, 0, 0x73 }, + { 13, 14, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x6e }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x2e }, + { 0, 0, 0x69 }, + { 0, 0, 0x72 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x0 }, + { 0, 0, 0x45 }, + { 0, 0, 0x75 }, + { 29, 30, 0 }, + { 0, 0, 0x6d }, + { 0, 0, 0x41 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x6c }, + { 0, 0, 0x49 }, + { 37, 38, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x52 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x4e }, + { 0, 0, 0x53 }, + { 0, 0, 0x54 }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 0x4f }, + { 0, 0, 0x68 }, + { 0, 0, 0x63 }, + { 53, 54, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x67 }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 0x4c }, + { 0, 0, 0x43 }, + { 61, 62, 0 }, + { 0, 0, 0x70 }, + { 0, 0, 0x55 }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, 0x21 }, + { 0, 0, 0x79 }, + { 0, 0, 0x4d }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x76 }, + { 0, 0, 0x48 }, + { 77, 78, 0 }, + { 0, 0, 0x3f }, + { 0, 0, 0x62 }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 0x27 }, + { 0, 0, 0x66 }, + { 0, 0, 0x2c }, + { 86, 87, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x42 }, + { 89, 108, 0 }, + { 90, 99, 0 }, + { 91, 96, 0 }, + { 92, 95, 0 }, + { 93, 94, 0 }, + { 0, 0, 0x56 }, + { 0, 0, 0x6b }, + { 0, 0, 0x46 }, + { 97, 98, 0 }, + { 0, 0, 0x71 }, + { 0, 0, 0x2a }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 0x77 }, + { 0, 0, 0x4b }, + { 0, 0, 0x2d }, + { 106, 107, 0 }, + { 0, 0, 0x57 }, + { 0, 0, 0x4a }, + { 109, 126, 0 }, + { 110, 117, 0 }, + { 111, 114, 0 }, + { 112, 113, 0 }, + { 0, 0, 0x7a }, + { 0, 0, 0x2b }, + { 115, 116, 0 }, + { 0, 0, 0x59 }, + { 0, 0, 0x6a }, + { 118, 123, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 0x85 }, + { 0, 0, 0x29 }, + { 0, 0, 0x51 }, + { 124, 125, 0 }, + { 0, 0, 0x5a }, + { 0, 0, 0x7e }, + { 127, 148, 0 }, + { 128, 137, 0 }, + { 129, 134, 0 }, + { 130, 133, 0 }, + { 131, 132, 0 }, + { 0, 0, 0x8b }, + { 0, 0, 0x3c }, + { 0, 0, 0x8a }, + { 135, 136, 0 }, + { 0, 0, 0x7f }, + { 0, 0, 0x3a }, + { 138, 143, 0 }, + { 139, 142, 0 }, + { 140, 141, 0 }, + { 0, 0, 0x87 }, + { 0, 0, 0x23 }, + { 0, 0, 0x78 }, + { 144, 147, 0 }, + { 145, 146, 0 }, + { 0, 0, 0x58 }, + { 0, 0, 0x91 }, + { 0, 0, 0x83 }, + { 149, 168, 0 }, + { 150, 159, 0 }, + { 151, 156, 0 }, + { 152, 155, 0 }, + { 153, 154, 0 }, + { 0, 0, 0x88 }, + { 0, 0, 0x60 }, + { 0, 0, 0x32 }, + { 157, 158, 0 }, + { 0, 0, 0x30 }, + { 0, 0, 0x31 }, + { 160, 165, 0 }, + { 161, 164, 0 }, + { 162, 163, 0 }, + { 0, 0, 0x28 }, + { 0, 0, 0x2f }, + { 0, 0, 0x5d }, + { 166, 167, 0 }, + { 0, 0, 0x3d }, + { 0, 0, 0x86 }, + { 169, 184, 0 }, + { 170, 177, 0 }, + { 171, 174, 0 }, + { 172, 173, 0 }, + { 0, 0, 0x5e }, + { 0, 0, 0x33 }, + { 175, 176, 0 }, + { 0, 0, 0x39 }, + { 0, 0, 0x34 }, + { 178, 181, 0 }, + { 179, 180, 0 }, + { 0, 0, 0x7d }, + { 0, 0, 0x38 }, + { 182, 183, 0 }, + { 0, 0, 0x5c }, + { 0, 0, 0x22 }, + { 185, 198, 0 }, + { 186, 193, 0 }, + { 187, 190, 0 }, + { 188, 189, 0 }, + { 0, 0, 0x3e }, + { 0, 0, 0x26 }, + { 191, 192, 0 }, + { 0, 0, 0x8d }, + { 0, 0, 0x7b }, + { 194, 197, 0 }, + { 195, 196, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x36 }, + { 0, 0, 0x8f }, + { 199, 210, 0 }, + { 200, 205, 0 }, + { 201, 204, 0 }, + { 202, 203, 0 }, + { 0, 0, 0x8e }, + { 0, 0, 0x8c }, + { 0, 0, 0x37 }, + { 206, 209, 0 }, + { 207, 208, 0 }, + { 0, 0, 0x89 }, + { 0, 0, 0x24 }, + { 0, 0, 0x92 }, + { 211, 218, 0 }, + { 212, 215, 0 }, + { 213, 214, 0 }, + { 0, 0, 0x5b }, + { 0, 0, 0x80 }, + { 216, 217, 0 }, + { 0, 0, 0x81 }, + { 0, 0, 0x40 }, + { 219, 222, 0 }, + { 220, 221, 0 }, + { 0, 0, 0x5f }, + { 0, 0, 0x82 }, + { 223, 224, 0 }, + { 0, 0, 0x25 }, + { 225, 226, 0 }, + { 0, 0, 0x9 }, + { 227, 228, 0 }, + { 0, 0, 0x3b }, + { 0, 0, 0x7c }, + }; + writeRecord(_huffTree_00331, sizeof(_huffTree_00331), GBVARS_HUFFTREE_00331_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00348() { + HuffTree _huffTree_00348[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, 0x20 }, + { 5, 6, 0 }, + { 0, 0, 0x65 }, + { 0, 0, 0x61 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6F }, + { 0, 0, 0x73 }, + { 13, 14, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x6E }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x2E }, + { 0, 0, 0x69 }, + { 0, 0, 0x72 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x00 }, + { 0, 0, 0x45 }, + { 0, 0, 0x75 }, + { 29, 30, 0 }, + { 0, 0, 0x6D }, + { 0, 0, 0x41 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x6C }, + { 0, 0, 0x49 }, + { 37, 38, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x52 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x4E }, + { 0, 0, 0x53 }, + { 0, 0, 0x54 }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 0x4F }, + { 0, 0, 0x68 }, + { 0, 0, 0x63 }, + { 53, 54, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x67 }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 0x4C }, + { 0, 0, 0x43 }, + { 61, 62, 0 }, + { 0, 0, 0x70 }, + { 0, 0, 0x55 }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, 0x21 }, + { 0, 0, 0x79 }, + { 0, 0, 0x4D }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x76 }, + { 0, 0, 0x48 }, + { 77, 78, 0 }, + { 0, 0, 0x3F }, + { 0, 0, 0x62 }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 0x27 }, + { 0, 0, 0x66 }, + { 0, 0, 0x2C }, + { 86, 87, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x42 }, + { 89, 108, 0 }, + { 90, 99, 0 }, + { 91, 96, 0 }, + { 92, 95, 0 }, + { 93, 94, 0 }, + { 0, 0, 0x56 }, + { 0, 0, 0x6B }, + { 0, 0, 0x46 }, + { 97, 98, 0 }, + { 0, 0, 0x71 }, + { 0, 0, 0x77 }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 0x4B }, + { 0, 0, 0x2D }, + { 0, 0, 0x57 }, + { 106, 107, 0 }, + { 0, 0, 0x4A }, + { 0, 0, 0x2A }, + { 109, 128, 0 }, + { 110, 117, 0 }, + { 111, 114, 0 }, + { 112, 113, 0 }, + { 0, 0, 0x7A }, + { 0, 0, 0x59 }, + { 115, 116, 0 }, + { 0, 0, 0x6A }, + { 0, 0, 0x2B }, + { 118, 123, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 0x51 }, + { 0, 0, 0x29 }, + { 0, 0, 0x85 }, + { 124, 127, 0 }, + { 125, 126, 0 }, + { 0, 0, 0x5A }, + { 0, 0, 0x8B }, + { 0, 0, 0x3C }, + { 129, 150, 0 }, + { 130, 139, 0 }, + { 131, 136, 0 }, + { 132, 135, 0 }, + { 133, 134, 0 }, + { 0, 0, 0x95 }, + { 0, 0, 0x7E }, + { 0, 0, 0x8A }, + { 137, 138, 0 }, + { 0, 0, 0x87 }, + { 0, 0, 0x3A }, + { 140, 145, 0 }, + { 141, 144, 0 }, + { 142, 143, 0 }, + { 0, 0, 0x7F }, + { 0, 0, 0x5D }, + { 0, 0, 0x23 }, + { 146, 149, 0 }, + { 147, 148, 0 }, + { 0, 0, 0x78 }, + { 0, 0, 0x58 }, + { 0, 0, 0x91 }, + { 151, 172, 0 }, + { 152, 163, 0 }, + { 153, 158, 0 }, + { 154, 157, 0 }, + { 155, 156, 0 }, + { 0, 0, 0x88 }, + { 0, 0, 0x60 }, + { 0, 0, 0x32 }, + { 159, 162, 0 }, + { 160, 161, 0 }, + { 0, 0, 0x30 }, + { 0, 0, 0x83 }, + { 0, 0, 0x31 }, + { 164, 169, 0 }, + { 165, 168, 0 }, + { 166, 167, 0 }, + { 0, 0, 0x2F }, + { 0, 0, 0x28 }, + { 0, 0, 0x3D }, + { 170, 171, 0 }, + { 0, 0, 0x86 }, + { 0, 0, 0x5E }, + { 173, 190, 0 }, + { 174, 181, 0 }, + { 175, 178, 0 }, + { 176, 177, 0 }, + { 0, 0, 0x33 }, + { 0, 0, 0x39 }, + { 179, 180, 0 }, + { 0, 0, 0x98 }, + { 0, 0, 0x34 }, + { 182, 187, 0 }, + { 183, 186, 0 }, + { 184, 185, 0 }, + { 0, 0, 0x7D }, + { 0, 0, 0x38 }, + { 0, 0, 0x5C }, + { 188, 189, 0 }, + { 0, 0, 0x22 }, + { 0, 0, 0x9B }, + { 191, 206, 0 }, + { 192, 199, 0 }, + { 193, 196, 0 }, + { 194, 195, 0 }, + { 0, 0, 0x26 }, + { 0, 0, 0x8D }, + { 197, 198, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x36 }, + { 200, 203, 0 }, + { 201, 202, 0 }, + { 0, 0, 0x92 }, + { 0, 0, 0x8F }, + { 204, 205, 0 }, + { 0, 0, 0x8E }, + { 0, 0, 0x93 }, + { 207, 222, 0 }, + { 208, 215, 0 }, + { 209, 212, 0 }, + { 210, 211, 0 }, + { 0, 0, 0x8C }, + { 0, 0, 0x37 }, + { 213, 214, 0 }, + { 0, 0, 0x99 }, + { 0, 0, 0x24 }, + { 216, 219, 0 }, + { 217, 218, 0 }, + { 0, 0, 0x80 }, + { 0, 0, 0x81 }, + { 220, 221, 0 }, + { 0, 0, 0x40 }, + { 0, 0, 0x5B }, + { 223, 232, 0 }, + { 224, 229, 0 }, + { 225, 228, 0 }, + { 226, 227, 0 }, + { 0, 0, 0x9A }, + { 0, 0, 0x5F }, + { 0, 0, 0x3E }, + { 230, 231, 0 }, + { 0, 0, 0x96 }, + { 0, 0, 0x82 }, + { 233, 238, 0 }, + { 234, 237, 0 }, + { 235, 236, 0 }, + { 0, 0, 0x25 }, + { 0, 0, 0x09 }, + { 0, 0, 0x9C }, + { 239, 240, 0 }, + { 0, 0, 0x97 }, + { 241, 242, 0 }, + { 0, 0, 0x7B }, + { 243, 244, 0 }, + { 0, 0, 0x94 }, + { 0, 0, 0x7C }, + }; + + writeRecord(_huffTree_00348, sizeof(_huffTree_00348), GBVARS_HUFFTREE_00348_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00365() { + HuffTree _huffTree_00365[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, 0x20 }, + { 5, 6, 0 }, + { 0, 0, 0x65 }, + { 0, 0, 0x61 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6F }, + { 0, 0, 0x73 }, + { 13, 14, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x6E }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x2E }, + { 0, 0, 0x69 }, + { 0, 0, 0x72 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x00 }, + { 0, 0, 0x45 }, + { 0, 0, 0x75 }, + { 29, 30, 0 }, + { 0, 0, 0x6D }, + { 0, 0, 0x41 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x6C }, + { 0, 0, 0x49 }, + { 37, 38, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x52 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x4E }, + { 0, 0, 0x53 }, + { 0, 0, 0x54 }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 0x4F }, + { 0, 0, 0x68 }, + { 0, 0, 0x63 }, + { 53, 54, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x67 }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 0x4C }, + { 0, 0, 0x43 }, + { 61, 62, 0 }, + { 0, 0, 0x70 }, + { 0, 0, 0x55 }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, 0x21 }, + { 0, 0, 0x79 }, + { 0, 0, 0x4D }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x76 }, + { 0, 0, 0x48 }, + { 77, 78, 0 }, + { 0, 0, 0x3F }, + { 0, 0, 0x62 }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 0x27 }, + { 0, 0, 0x66 }, + { 0, 0, 0x2C }, + { 86, 87, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x42 }, + { 89, 108, 0 }, + { 90, 99, 0 }, + { 91, 96, 0 }, + { 92, 95, 0 }, + { 93, 94, 0 }, + { 0, 0, 0x56 }, + { 0, 0, 0x6B }, + { 0, 0, 0x46 }, + { 97, 98, 0 }, + { 0, 0, 0x71 }, + { 0, 0, 0x77 }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 0x4B }, + { 0, 0, 0x2D }, + { 0, 0, 0x57 }, + { 106, 107, 0 }, + { 0, 0, 0x4A }, + { 0, 0, 0x2A }, + { 109, 128, 0 }, + { 110, 117, 0 }, + { 111, 114, 0 }, + { 112, 113, 0 }, + { 0, 0, 0x7A }, + { 0, 0, 0x59 }, + { 115, 116, 0 }, + { 0, 0, 0x6A }, + { 0, 0, 0x2B }, + { 118, 123, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 0x51 }, + { 0, 0, 0x85 }, + { 0, 0, 0x29 }, + { 124, 127, 0 }, + { 125, 126, 0 }, + { 0, 0, 0x5A }, + { 0, 0, 0x8B }, + { 0, 0, 0x3C }, + { 129, 150, 0 }, + { 130, 139, 0 }, + { 131, 136, 0 }, + { 132, 135, 0 }, + { 133, 134, 0 }, + { 0, 0, 0x95 }, + { 0, 0, 0x7E }, + { 0, 0, 0x8A }, + { 137, 138, 0 }, + { 0, 0, 0x87 }, + { 0, 0, 0x3A }, + { 140, 145, 0 }, + { 141, 144, 0 }, + { 142, 143, 0 }, + { 0, 0, 0x7F }, + { 0, 0, 0x5D }, + { 0, 0, 0x23 }, + { 146, 149, 0 }, + { 147, 148, 0 }, + { 0, 0, 0x78 }, + { 0, 0, 0x58 }, + { 0, 0, 0x91 }, + { 151, 172, 0 }, + { 152, 163, 0 }, + { 153, 158, 0 }, + { 154, 157, 0 }, + { 155, 156, 0 }, + { 0, 0, 0x88 }, + { 0, 0, 0x60 }, + { 0, 0, 0x32 }, + { 159, 162, 0 }, + { 160, 161, 0 }, + { 0, 0, 0x30 }, + { 0, 0, 0x83 }, + { 0, 0, 0x31 }, + { 164, 169, 0 }, + { 165, 168, 0 }, + { 166, 167, 0 }, + { 0, 0, 0x2F }, + { 0, 0, 0x28 }, + { 0, 0, 0x3D }, + { 170, 171, 0 }, + { 0, 0, 0x86 }, + { 0, 0, 0x5E }, + { 173, 190, 0 }, + { 174, 181, 0 }, + { 175, 178, 0 }, + { 176, 177, 0 }, + { 0, 0, 0x33 }, + { 0, 0, 0x39 }, + { 179, 180, 0 }, + { 0, 0, 0x98 }, + { 0, 0, 0x34 }, + { 182, 187, 0 }, + { 183, 186, 0 }, + { 184, 185, 0 }, + { 0, 0, 0x7D }, + { 0, 0, 0x38 }, + { 0, 0, 0x5C }, + { 188, 189, 0 }, + { 0, 0, 0x22 }, + { 0, 0, 0x90 }, + { 191, 206, 0 }, + { 192, 199, 0 }, + { 193, 196, 0 }, + { 194, 195, 0 }, + { 0, 0, 0x26 }, + { 0, 0, 0x8D }, + { 197, 198, 0 }, + { 0, 0, 0x35 }, + { 0, 0, 0x36 }, + { 200, 203, 0 }, + { 201, 202, 0 }, + { 0, 0, 0x92 }, + { 0, 0, 0x8F }, + { 204, 205, 0 }, + { 0, 0, 0x8E }, + { 0, 0, 0x93 }, + { 207, 220, 0 }, + { 208, 213, 0 }, + { 209, 212, 0 }, + { 210, 211, 0 }, + { 0, 0, 0x8C }, + { 0, 0, 0x37 }, + { 0, 0, 0x80 }, + { 214, 217, 0 }, + { 215, 216, 0 }, + { 0, 0, 0x81 }, + { 0, 0, 0x99 }, + { 218, 219, 0 }, + { 0, 0, 0x24 }, + { 0, 0, 0x40 }, + { 221, 230, 0 }, + { 222, 227, 0 }, + { 223, 226, 0 }, + { 224, 225, 0 }, + { 0, 0, 0x5B }, + { 0, 0, 0x9A }, + { 0, 0, 0x5F }, + { 228, 229, 0 }, + { 0, 0, 0x3E }, + { 0, 0, 0x96 }, + { 231, 236, 0 }, + { 232, 235, 0 }, + { 233, 234, 0 }, + { 0, 0, 0x82 }, + { 0, 0, 0x25 }, + { 0, 0, 0x09 }, + { 237, 240, 0 }, + { 238, 239, 0 }, + { 0, 0, 0x9C }, + { 0, 0, 0x97 }, + { 241, 242, 0 }, + { 0, 0, 0x7B }, + { 243, 244, 0 }, + { 0, 0, 0x94 }, + { 0, 0, 0x7C }, + }; + writeRecord(_huffTree_00365, sizeof(_huffTree_00365), GBVARS_HUFFTREE_00365_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00368() { + HuffTree _huffTree_00368[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, 0x20 }, + { 5, 6, 0 }, + { 0, 0, 0x65 }, + { 0, 0, 0x61 }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 0x6F }, + { 0, 0, 0x73 }, + { 13, 14, 0 }, + { 0, 0, 0x74 }, + { 0, 0, 0x6E }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, 0x2E }, + { 0, 0, 0x69 }, + { 0, 0, 0x72 }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0x00 }, + { 0, 0, 0x45 }, + { 0, 0, 0x75 }, + { 29, 30, 0 }, + { 0, 0, 0x6D }, + { 0, 0, 0x41 }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 0x6C }, + { 0, 0, 0x49 }, + { 37, 38, 0 }, + { 0, 0, 0x64 }, + { 0, 0, 0x52 }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 0x4E }, + { 0, 0, 0x53 }, + { 0, 0, 0x54 }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 0x4F }, + { 0, 0, 0x68 }, + { 0, 0, 0x63 }, + { 53, 54, 0 }, + { 0, 0, 0x44 }, + { 0, 0, 0x67 }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 0x4C }, + { 0, 0, 0x43 }, + { 61, 62, 0 }, + { 0, 0, 0x70 }, + { 0, 0, 0x55 }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, 0x21 }, + { 0, 0, 0x79 }, + { 0, 0, 0x4D }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 0x50 }, + { 0, 0, 0x76 }, + { 0, 0, 0x48 }, + { 77, 78, 0 }, + { 0, 0, 0x3F }, + { 0, 0, 0x62 }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 0x27 }, + { 0, 0, 0x66 }, + { 0, 0, 0x2C }, + { 86, 87, 0 }, + { 0, 0, 0x47 }, + { 0, 0, 0x42 }, + { 89, 108, 0 }, + { 90, 99, 0 }, + { 91, 96, 0 }, + { 92, 95, 0 }, + { 93, 94, 0 }, + { 0, 0, 0x56 }, + { 0, 0, 0x6B }, + { 0, 0, 0x46 }, + { 97, 98, 0 }, + { 0, 0, 0x71 }, + { 0, 0, 0x77 }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 0x4B }, + { 0, 0, 0x2D }, + { 0, 0, 0x57 }, + { 106, 107, 0 }, + { 0, 0, 0x4A }, + { 0, 0, 0x2A }, + { 109, 128, 0 }, + { 110, 117, 0 }, + { 111, 114, 0 }, + { 112, 113, 0 }, + { 0, 0, 0x7A }, + { 0, 0, 0x59 }, + { 115, 116, 0 }, + { 0, 0, 0x6A }, + { 0, 0, 0x2B }, + { 118, 123, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 0x51 }, + { 0, 0, 0x85 }, + { 0, 0, 0x29 }, + { 124, 127, 0 }, + { 125, 126, 0 }, + { 0, 0, 0x5A }, + { 0, 0, 0x8B }, + { 0, 0, 0x3C }, + { 129, 152, 0 }, + { 130, 139, 0 }, + { 131, 136, 0 }, + { 132, 135, 0 }, + { 133, 134, 0 }, + { 0, 0, 0x95 }, + { 0, 0, 0x7E }, + { 0, 0, 0x8A }, + { 137, 138, 0 }, + { 0, 0, 0x87 }, + { 0, 0, 0x3A }, + { 140, 145, 0 }, + { 141, 144, 0 }, + { 142, 143, 0 }, + { 0, 0, 0x7F }, + { 0, 0, 0x23 }, + { 0, 0, 0x78 }, + { 146, 149, 0 }, + { 147, 148, 0 }, + { 0, 0, 0x58 }, + { 0, 0, 0x5D }, + { 150, 151, 0 }, + { 0, 0, 0x91 }, + { 0, 0, 0x88 }, + { 153, 174, 0 }, + { 154, 165, 0 }, + { 155, 160, 0 }, + { 156, 159, 0 }, + { 157, 158, 0 }, + { 0, 0, 0x5F }, + { 0, 0, 0x60 }, + { 0, 0, 0x32 }, + { 161, 164, 0 }, + { 162, 163, 0 }, + { 0, 0, 0x30 }, + { 0, 0, 0x83 }, + { 0, 0, 0x31 }, + { 166, 171, 0 }, + { 167, 170, 0 }, + { 168, 169, 0 }, + { 0, 0, 0x2F }, + { 0, 0, 0x28 }, + { 0, 0, 0x3D }, + { 172, 173, 0 }, + { 0, 0, 0x86 }, + { 0, 0, 0x5E }, + { 175, 190, 0 }, + { 176, 183, 0 }, + { 177, 180, 0 }, + { 178, 179, 0 }, + { 0, 0, 0x33 }, + { 0, 0, 0x39 }, + { 181, 182, 0 }, + { 0, 0, 0x98 }, + { 0, 0, 0x34 }, + { 184, 187, 0 }, + { 185, 186, 0 }, + { 0, 0, 0x7D }, + { 0, 0, 0x38 }, + { 188, 189, 0 }, + { 0, 0, 0x5C }, + { 0, 0, 0x22 }, + { 191, 206, 0 }, + { 192, 199, 0 }, + { 193, 196, 0 }, + { 194, 195, 0 }, + { 0, 0, 0x90 }, + { 0, 0, 0x26 }, + { 197, 198, 0 }, + { 0, 0, 0x8D }, + { 0, 0, 0x35 }, + { 200, 203, 0 }, + { 201, 202, 0 }, + { 0, 0, 0x36 }, + { 0, 0, 0x3E }, + { 204, 205, 0 }, + { 0, 0, 0x93 }, + { 0, 0, 0x8C }, + { 207, 220, 0 }, + { 208, 215, 0 }, + { 209, 212, 0 }, + { 210, 211, 0 }, + { 0, 0, 0x37 }, + { 0, 0, 0x80 }, + { 213, 214, 0 }, + { 0, 0, 0x81 }, + { 0, 0, 0x8E }, + { 216, 219, 0 }, + { 217, 218, 0 }, + { 0, 0, 0x8F }, + { 0, 0, 0x99 }, + { 0, 0, 0x24 }, + { 221, 230, 0 }, + { 222, 227, 0 }, + { 223, 226, 0 }, + { 224, 225, 0 }, + { 0, 0, 0x92 }, + { 0, 0, 0x40 }, + { 0, 0, 0x5B }, + { 228, 229, 0 }, + { 0, 0, 0x9A }, + { 0, 0, 0x96 }, + { 231, 236, 0 }, + { 232, 235, 0 }, + { 233, 234, 0 }, + { 0, 0, 0x82 }, + { 0, 0, 0x25 }, + { 0, 0, 0x09 }, + { 237, 240, 0 }, + { 238, 239, 0 }, + { 0, 0, 0x9C }, + { 0, 0, 0x97 }, + { 241, 242, 0 }, + { 0, 0, 0x7B }, + { 243, 244, 0 }, + { 0, 0, 0x94 }, + { 0, 0, 0x7C }, + }; + writeRecord(_huffTree_00368, sizeof(_huffTree_00368), GBVARS_HUFFTREE_00368_INDEX , GBVARS_SKY); +} + +static void addHufftext_huffTree_00372() { + HuffTree _huffTree_00372[] = { + { 1, 20, 0 }, + { 2, 7, 0 }, + { 3, 4, 0 }, + { 0, 0, ' ' }, + { 5, 6, 0 }, + { 0, 0, 'e' }, + { 0, 0, 'a' }, + { 8, 15, 0 }, + { 9, 12, 0 }, + { 10, 11, 0 }, + { 0, 0, 'o' }, + { 0, 0, 's' }, + { 13, 14, 0 }, + { 0, 0, 't' }, + { 0, 0, 'n' }, + { 16, 19, 0 }, + { 17, 18, 0 }, + { 0, 0, '.' }, + { 0, 0, 'i' }, + { 0, 0, 'r' }, + { 21, 44, 0 }, + { 22, 31, 0 }, + { 23, 28, 0 }, + { 24, 27, 0 }, + { 25, 26, 0 }, + { 0, 0, 0 }, + { 0, 0, 'E' }, + { 0, 0, 'u' }, + { 29, 30, 0 }, + { 0, 0, 'm' }, + { 0, 0, 'A' }, + { 32, 39, 0 }, + { 33, 36, 0 }, + { 34, 35, 0 }, + { 0, 0, 'l' }, + { 0, 0, 'I' }, + { 37, 38, 0 }, + { 0, 0, 'd' }, + { 0, 0, 'R' }, + { 40, 43, 0 }, + { 41, 42, 0 }, + { 0, 0, 'N' }, + { 0, 0, 'S' }, + { 0, 0, 'T' }, + { 45, 68, 0 }, + { 46, 55, 0 }, + { 47, 52, 0 }, + { 48, 51, 0 }, + { 49, 50, 0 }, + { 0, 0, 'O' }, + { 0, 0, 'h' }, + { 0, 0, 'c' }, + { 53, 54, 0 }, + { 0, 0, 'D' }, + { 0, 0, 'g' }, + { 56, 63, 0 }, + { 57, 60, 0 }, + { 58, 59, 0 }, + { 0, 0, 'L' }, + { 0, 0, 'C' }, + { 61, 62, 0 }, + { 0, 0, 'p' }, + { 0, 0, 'U' }, + { 64, 67, 0 }, + { 65, 66, 0 }, + { 0, 0, '!' }, + { 0, 0, 'y' }, + { 0, 0, 'M' }, + { 69, 88, 0 }, + { 70, 79, 0 }, + { 71, 76, 0 }, + { 72, 75, 0 }, + { 73, 74, 0 }, + { 0, 0, 'P' }, + { 0, 0, 'v' }, + { 0, 0, 'H' }, + { 77, 78, 0 }, + { 0, 0, '?' }, + { 0, 0, 'b' }, + { 80, 85, 0 }, + { 81, 84, 0 }, + { 82, 83, 0 }, + { 0, 0, 39 }, + { 0, 0, 'f' }, + { 0, 0, ',' }, + { 86, 87, 0 }, + { 0, 0, 'G' }, + { 0, 0, 'B' }, + { 89, 108, 0 }, + { 90, 99, 0 }, + { 91, 96, 0 }, + { 92, 95, 0 }, + { 93, 94, 0 }, + { 0, 0, 'V' }, + { 0, 0, 'k' }, + { 0, 0, 'F' }, + { 97, 98, 0 }, + { 0, 0, 'q' }, + { 0, 0, 'w' }, + { 100, 105, 0 }, + { 101, 104, 0 }, + { 102, 103, 0 }, + { 0, 0, 'K' }, + { 0, 0, '-' }, + { 0, 0, 'W' }, + { 106, 107, 0 }, + { 0, 0, 'J' }, + { 0, 0, '*' }, + { 109, 128, 0 }, + { 110, 117, 0 }, + { 111, 114, 0 }, + { 112, 113, 0 }, + { 0, 0, 'z' }, + { 0, 0, 'Y' }, + { 115, 116, 0 }, + { 0, 0, 'j' }, + { 0, 0, '+' }, + { 118, 123, 0 }, + { 119, 122, 0 }, + { 120, 121, 0 }, + { 0, 0, 'Q' }, + { 0, 0, 133 }, + { 0, 0, ')' }, + { 124, 127, 0 }, + { 125, 126, 0 }, + { 0, 0, 'Z' }, + { 0, 0, 139 }, + { 0, 0, '<' }, + { 129, 150, 0 }, + { 130, 139, 0 }, + { 131, 136, 0 }, + { 132, 135, 0 }, + { 133, 134, 0 }, + { 0, 0, 149 }, + { 0, 0, 126 }, + { 0, 0, 138 }, + { 137, 138, 0 }, + { 0, 0, 135 }, + { 0, 0, ':' }, + { 140, 145, 0 }, + { 141, 144, 0 }, + { 142, 143, 0 }, + { 0, 0, 127 }, + { 0, 0, ']' }, + { 0, 0, '#' }, + { 146, 149, 0 }, + { 147, 148, 0 }, + { 0, 0, 'x' }, + { 0, 0, 'X' }, + { 0, 0, 145 }, + { 151, 172, 0 }, + { 152, 163, 0 }, + { 153, 158, 0 }, + { 154, 157, 0 }, + { 155, 156, 0 }, + { 0, 0, 136 }, + { 0, 0, '`' }, + { 0, 0, '2' }, + { 159, 162, 0 }, + { 160, 161, 0 }, + { 0, 0, '0' }, + { 0, 0, 131 }, + { 0, 0, '1' }, + { 164, 169, 0 }, + { 165, 168, 0 }, + { 166, 167, 0 }, + { 0, 0, '/' }, + { 0, 0, '(' }, + { 0, 0, '=' }, + { 170, 171, 0 }, + { 0, 0, 134 }, + { 0, 0, '^' }, + { 173, 190, 0 }, + { 174, 181, 0 }, + { 175, 178, 0 }, + { 176, 177, 0 }, + { 0, 0, '3' }, + { 0, 0, '9' }, + { 179, 180, 0 }, + { 0, 0, 152 }, + { 0, 0, '4' }, + { 182, 187, 0 }, + { 183, 186, 0 }, + { 184, 185, 0 }, + { 0, 0, '}' }, + { 0, 0, '8' }, + { 0, 0, '\\' }, + { 188, 189, 0 }, + { 0, 0, '"' }, + { 0, 0, 144 }, + { 191, 206, 0 }, + { 192, 199, 0 }, + { 193, 196, 0 }, + { 194, 195, 0 }, + { 0, 0, '&' }, + { 0, 0, 141 }, + { 197, 198, 0 }, + { 0, 0, '5' }, + { 0, 0, '6' }, + { 200, 203, 0 }, + { 201, 202, 0 }, + { 0, 0, 146 }, + { 0, 0, 143 }, + { 204, 205, 0 }, + { 0, 0, 142 }, + { 0, 0, 147 }, + { 207, 220, 0 }, + { 208, 213, 0 }, + { 209, 212, 0 }, + { 210, 211, 0 }, + { 0, 0, 140 }, + { 0, 0, '7' }, + { 0, 0, 128 }, + { 214, 217, 0 }, + { 215, 216, 0 }, + { 0, 0, 129 }, + { 0, 0, 153 }, + { 218, 219, 0 }, + { 0, 0, '$' }, + { 0, 0, '@' }, + { 221, 230, 0 }, + { 222, 227, 0 }, + { 223, 226, 0 }, + { 224, 225, 0 }, + { 0, 0, '[' }, + { 0, 0, 154 }, + { 0, 0, '_' }, + { 228, 229, 0 }, + { 0, 0, '>' }, + { 0, 0, 150 }, + { 231, 236, 0 }, + { 232, 235, 0 }, + { 233, 234, 0 }, + { 0, 0, 130 }, + { 0, 0, '%' }, + { 0, 0, 9 }, + { 237, 240, 0 }, + { 238, 239, 0 }, + { 0, 0, 156 }, + { 0, 0, 151 }, + { 241, 242, 0 }, + { 0, 0, '{' }, + { 243, 244, 0 }, + { 0, 0, 148 }, + { 0, 0, '!' }, + }; + writeRecord(_huffTree_00372, sizeof(_huffTree_00372), GBVARS_HUFFTREE_00372_INDEX , GBVARS_SKY); +} + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + +void Sky_addHufftext() { + addHufftext_huffTree_00109(); + addHufftext_huffTree_00267(); + addHufftext_huffTree_00288(); + addHufftext_huffTree_00303(); + addHufftext_huffTree_00331(); + addHufftext_huffTree_00348(); + addHufftext_huffTree_00365(); + addHufftext_huffTree_00368(); + addHufftext_huffTree_00372(); +} diff --git a/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c new file mode 100644 index 0000000000..92860a843c --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c @@ -0,0 +1,3576 @@ +#include +#include "b_globals.h" + +#include "sw1_staticres.h" + +#define MAX_ROOMS_PER_FX 7 + +#define FX_SPOT 1 +#define FX_LOOP 2 +#define FX_RANDOM 3 + +typedef struct { + int32 roomNo, leftVol, rightVol; +} RoomVol; + +typedef struct { + uint32 sampleId, type, delay; + RoomVol roomVolList[MAX_ROOMS_PER_FX]; +} FxDef; + +static void addStaticres_fxList() { + FxDef _fxList[312] = { + // 0 + { + 0, // sampleId + 0, // type (FX_LOOP, FX_RANDOM or FX_SPOT) + 0, // delay (random chance for FX_RANDOM sound fx) + { // roomVolList + {0,0,0}, // {roomNo,leftVol,rightVol} + }, + }, + //------------------------ + // 1 Newton's cradle. Anim=NEWTON. + { + FX_NEWTON, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {45,4,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 2 + { + FX_TRAFFIC2, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {1,12,12}, // {roomNo,leftVol,rightVol} + {2,1,1}, + {3,1,1}, + {4,13,13}, + {5,1,1}, + {8,7,7}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 3 + { + FX_HORN1, // sampleId + FX_RANDOM, // type + 1200, // delay (or random chance) + { // roomVolList + {1,3,3}, // {roomNo,leftVol,rightVol} + {3,1,1}, + {4,1,1}, + {5,2,2}, + {8,4,4}, + {18,2,3}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 4 + { + FX_HORN2, // sampleId + FX_RANDOM, // type + 1200, // delay (or random chance) + { // roomVolList + {1,4,4}, // {roomNo,leftVol,rightVol} + {3,2,2}, + {4,3,3}, + {5,2,2}, + {8,4,4}, + {18,1,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 5 + { + FX_HORN3, // sampleId + FX_RANDOM, // type + 1200, // delay (or random chance) + { // roomVolList + {1,4,4}, // {roomNo,leftVol,rightVol} + {2,4,4}, + {3,2,2}, + {4,3,3}, + {5,2,2}, + {8,4,4}, + {18,1,1}, + }, + }, + //------------------------ + // 6 + { + FX_CAMERA1, // sampleId + FX_SPOT, // type + 25, // delay (or random chance) + { // roomVolList + {1,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 7 + { + FX_CAMERA2, // sampleId + FX_SPOT, // type + 25, // delay (or random chance) + { // roomVolList + {1,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 8 + { + FX_CAMERA3, // sampleId + FX_SPOT, // type + 25, // delay (or random chance) + { // roomVolList + {1,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 9 + { + FX_SWATER1, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {7,12,12}, // {roomNo,leftVol,rightVol} + {6,12,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 10 Mad dogs in Spain, triggered by George going around the corner in the villa hall. + // In 56 and 57, the dogs will continue barking after George has either been ejected or sneaked up stairs + // for a couple of loops before stopping. + { + FX_DOGS56, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {60,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0} // NULL-TERMINATOR + }, + }, + //------------------------ + // 11 + { + FX_DRIP1, // sampleId + FX_RANDOM, // type + 20, // delay (or random chance) + { // roomVolList + {7,15,15}, // {roomNo,leftVol,rightVol} + {6,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 12 + { + FX_DRIP2, // sampleId + FX_RANDOM, // type + 30, // delay (or random chance) + { // roomVolList + {7,15,15}, // {roomNo,leftVol,rightVol} + {6,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 13 + { + FX_DRIP3, // sampleId + FX_RANDOM, // type + 40, // delay (or random chance) + { // roomVolList + {7,15,15}, // {roomNo,leftVol,rightVol} + {6,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 14 + { + FX_TWEET1, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 15 + { + FX_TWEET2, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 16 + { + FX_TWEET3, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 17 + { + FX_TWEET4, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 18 + { + FX_TWEET5, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 19 Tied to large bird flying up screen anim + { + FX_CAW1, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) + { // roomVolList + {1,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 20 George picking the canopy up: GEOCAN + { + FX_CANUP, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) * + { // roomVolList + {1,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 21 George dropping the canopy: GEOCAN + { + FX_CANDO, // sampleId + FX_SPOT, // type + 52, // delay (or random chance) * + { // roomVolList + {1,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 22 George dusts himself down: GEOCAN + { + FX_DUST, // sampleId + FX_SPOT, // type + 58, // delay (or random chance) * + { // roomVolList + {1,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 23 George picks up the paper and opens it: GEOPAP + { + FX_PAP1, // sampleId + FX_SPOT, // type + 23, // delay (or random chance) * + { // roomVolList + {1,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 24 George puts the paper away: GEOPAP2 + { + FX_PAP2, // sampleId + FX_SPOT, // type + 3, // delay (or random chance) * + { // roomVolList + {1,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 25 George gives the paper away: GEOWRK8 + { + FX_PAP3, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) * + { // roomVolList + {4,14,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 26 Workman examines paper: WRKOPN - it's now just WRKPPR + { + FX_PAP4, // sampleId + FX_SPOT, // type + 15, // delay (or random chance) * + { // roomVolList + {4,14,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 27 Workman puts paper down: WRKOPN (REVERSED) - now just WRKCLM + { + FX_PAP5, // sampleId + FX_SPOT, // type + 2, // delay (or random chance)* + { // roomVolList + {4,14,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 28 Pickaxe sound 1:, Screen 4 - WRKDIG + { + FX_PICK1, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {4,10,10}, + {0,0,0} // NULL-TERMINATOR + }, + }, + //------------------------ + // 29 Pickaxe sound 2:, Screen 4 - WRKDIG + { + FX_PICK2, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {4,10,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 30 Pickaxe sound 3:, Screen 4 - WRKDIG + { + FX_PICK3, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {4,10,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 31 Pickaxe sound 4:, Screen 4 - WRKDIG + { + FX_PICK4, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {4,10,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 32 Shorting light: FLICKER + { + FX_LIGHT, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {3,15,15}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 33 Cat leaps out of bin and runs: CATJMP! + { + FX_CAT, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) * + { // roomVolList + {2,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 34 George rocks plastic crate: GEOCRT + { + FX_CRATE, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {2,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 35 George tries to climb drainpipe: GEOCLM02 + { + FX_DRAIN, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {2,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 36 George removes manhole cover: GEOMAN8 + { + FX_HOLE, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) ? + { // roomVolList + {2,12,11}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 37 Brandy bottle put down: CHNDRN + { + FX_BOTDN, // sampleId + FX_SPOT, // type + 43, // delay (or random chance) * + { // roomVolList + {3,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 38 Brandy bottle picked up: GEOBOT3 + { + FX_BOTUP, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {3,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 39 Chantelle gulps on brandy: CHNDRN + { + FX_GULP, // sampleId + FX_SPOT, // type + 23, // delay (or random chance) * + { // roomVolList + {3,4,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 40 Chantelle picked up off the floor: GEOCHN + { + FX_PIKUP, // sampleId + FX_SPOT, // type + 28, // delay (or random chance) * + { // roomVolList + {3,11,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 41 George searches Plantard's body: GEOCPS + { + FX_BODY, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {3,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 42 Moue cocks handgun. MOUENT + { + FX_PISTOL, // sampleId + FX_SPOT, // type + 23, // delay (or random chance) * + { // roomVolList + {4,4,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 43 George rummages in toolbox: GEOTBX + { + FX_TBOX, // sampleId + FX_SPOT, // type + 12, // delay (or random chance) * + { // roomVolList + {4,12,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 44 rat squeak 1 + { + FX_RAT1, // sampleId + FX_RANDOM, // type + 193, // delay (or random chance) + { // roomVolList + {6,5,7}, // {roomNo,leftVol,rightVol} + {7,5,3}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 45 rat squeak 2 + { + FX_RAT2, // sampleId + FX_RANDOM, // type + 201, // delay (or random chance) + { // roomVolList + {6,3,5}, // {roomNo,leftVol,rightVol} + {7,4,6}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 46 George climbs down ladder: + { + FX_LADD1, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {6,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 47 Rushing water loop + { + FX_SWATER3, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {6,10,11}, // {roomNo,leftVol,rightVol} + {7,12,11}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 48 Left hand bin being opened: GEOCAT? + { + FX_BIN3, // sampleId + FX_SPOT, // type + 12, // delay (or random chance) + { // roomVolList + {2,12,11}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 49 Middle bin being opened: GEOBIN + { + FX_BIN2, // sampleId + FX_SPOT, // type + 12, // delay (or random chance) + { // roomVolList + {2,11,11}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 50 Right hand bin being opened: GEOLID? + { + FX_BIN1, // sampleId + FX_SPOT, // type + 12, // delay (or random chance) + { // roomVolList + {2,10,11}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 51 Passing car sound + { + FX_CARS, // sampleId + FX_RANDOM, // type + 120, // delay (or random chance) + { // roomVolList + {10,8,1}, + {12,7,7}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 52 Passing car sound + { + FX_FIESTA, // sampleId + FX_RANDOM, // type + 127, // delay (or random chance) + { // roomVolList + {10,8,1}, + {12,7,7}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 53 Passing car sound + { + FX_CARLTON , // sampleId + FX_RANDOM, // type + 119, // delay (or random chance) + { // roomVolList + {10,8,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 54 Bird + { + FX_BIRD, // sampleId + FX_RANDOM, // type + 500, // delay (or random chance) + { // roomVolList + {9,10,10}, // {roomNo,leftVol,rightVol} + {10,2,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 55 George tries the door: GEOTRY + { + FX_DOORTRY, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {9,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 56 George opens the door: GEODOOR9 + { + FX_FLATDOOR, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {9,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 57 George picks the 'phone up: GEOPHN10 + { + FX_FONEUP, // sampleId + FX_SPOT, // type + 15, // delay (or random chance) + { // roomVolList + {10,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 58 George puts the 'phone down: GEPDWN10 + { + FX_FONEDN, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) + { // roomVolList + {10,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 59 Albert opens the door: ALBOPEN + { + FX_ALBOP, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) + { // roomVolList + {5,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 60 Albert closes the door: ALBCLOSE + { + FX_ALBCLO, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) + { // roomVolList + {5,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 61 George enter Nico's flat. GEOENT10 + { + FX_NICOPEN, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {10,7,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 62 George leaves Nico's. GEOLVS10 + { + FX_NICLOSE, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) + { // roomVolList + {10,7,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 63 Another bird for the street. + { + FX_BIRD2, // sampleId + FX_RANDOM, // type + 500, // WAS 15 (TOO LATE) + { // roomVolList + {9,10,10}, // {roomNo,leftVol,rightVol} + {10,2,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 64 George sits in the chair: GEOCHR + { + FX_GEOCHAIR, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) + { // roomVolList + {10,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 65 George sits on the couch: GEOCCH + { + FX_GEOCCH, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) + { // roomVolList + {10,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 66 George gets up from the chair: GEOCHR9 + { + FX_GEOCHR9, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) + { // roomVolList + {10,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 67 George is electrocuted: COSSHK + { + FX_SHOCK1, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) + { // roomVolList + {11,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 68 George plays record: GEOWIND + { + FX_GRAMOFON, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {11,11,13}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 69 George is frisked: GORFRK + { + FX_FRISK, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {12,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 70 Traffic sound + { + FX_TRAFFIC3, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {11,5,4}, + {12,1,1}, + {16,4,4}, + {18,2,3}, + {46,4,3}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 71 Latvian reading: LATRDS + { + FX_PAPER6, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) + { // roomVolList + {13,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 72 Deskbell + { + FX_DESKBELL, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {13,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 73 George picks up hotel 'phone: GEOTEL + { + FX_PHONEUP2, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {13,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 74 George puts down hotel 'phone: GEOTEL9 + { + FX_PHONEDN2, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {13,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 75 George tries doors in corridor: GEODOR + { + FX_TRYDOR14, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {14,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 76 George opens bedside cabinet: BEDDOR + { + FX_CABOPEN, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) + { // roomVolList + {15,10,14}, // {roomNo,leftVol,rightVol} + {17,10,14}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 77 George closes bedside cabinet: BEDDOR (reversed) + { + FX_CABCLOSE, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) + { // roomVolList + {15,10,14}, // {roomNo,leftVol,rightVol} + {17,10,14}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 78 George opens the window: WINDOW + { + FX_WINDOPEN, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) + { // roomVolList + {15,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 79 George goes right along the ledge: GEOIRW + { + FX_LEDGE1, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {16,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 80 George goes left along the ledge: GEOILW + { + FX_LEDGE2, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {16,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 81 Pigeon noises + { + FX_COO, // sampleId + FX_RANDOM, // type + 80, // delay (or random chance) + { // roomVolList + {16,7,9}, // {roomNo,leftVol,rightVol} + {46,5,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 82 Pigeon noises + { + FX_COO2, // sampleId + FX_RANDOM, // type + 60, // delay (or random chance) + { // roomVolList + {15,3,4}, // {roomNo,leftVol,rightVol} + {16,8,5}, // {roomNo,leftVol,rightVol} + {17,3,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 83 George picks up and opens case: GEOBFC + { + FX_BRIEFON, // sampleId + FX_SPOT, // type + 16, // delay (or random chance) + { // roomVolList + {17,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 84 George closes and puts down case: GEOBFC (reversed) + { + FX_BRIEFOFF, // sampleId + FX_SPOT, // type + 12, // delay (or random chance) + { // roomVolList + {17,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 85 George gets into wardrobe. GEOWRB2 Attention, James. This is new as of 15/7/96 + { + FX_WARDIN, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {17,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 86 George gets out of wardrobe. GEOWRB2 (Reversed). Attention, James. This is new as of 15/7/96 + { + FX_WARDOUT, // sampleId + FX_SPOT, // type + 41, // delay (or random chance) + { // roomVolList + {17,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 87 George jumps in through window: GEOWIN2 + { + FX_JUMPIN, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {15,8,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 88 George climbs in: GEOWIN2/GEOWIN8 + { + FX_CLIMBIN, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {17,8,16}, // {roomNo,leftVol,rightVol} + {15,8,16}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 89 George climbs out: GEOWIN1/GEOWIN9 + { + FX_CLIMBOUT, // sampleId + FX_SPOT, // type + 17, // delay (or random chance) + { // roomVolList + {17,9,10}, // {roomNo,leftVol,rightVol} + {15,9,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 90 George picks the 'phone up: GEOTEL18 + { + FX_FONEUP, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {18,4,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 91 George puts the 'phone down: GEOTL18A + { + FX_FONEDN, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) + { // roomVolList + {18,4,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 92 George tries to get keys. GEOKEY + { + FX_KEY13, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) + { // roomVolList + {13,3,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 93 George manages to get keys. GEOKEY13 + { + FX_KEY13, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) + { // roomVolList + {13,3,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 94 George electrocutes Maguire: MAGSHK + { + FX_SHOCK2, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) + { // roomVolList + {19,9,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 95 George opens dray door : GEOTRP8 + { + FX_TRAPOPEN, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) + { // roomVolList + {19,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 96 George breaks switch : Which anim? + { + FX_SWITCH19, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {19,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 97 Leary pulls pint: LESPMP + { + FX_PULLPINT, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {20,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 98 Glasswasher fuse blows (and the glass washer grinds to a halt) + { + FX_FUSE20, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {20,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 99 Fitz leaps to his feet: FTZSTD + { + FX_FITZUP, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) + { // roomVolList + {20,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 100 Fitz runs for it: FTZRUN + { + FX_FITZRUN, // sampleId + FX_SPOT, // type + 15, // delay (or random chance) + { // roomVolList + {20,12,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 101 George pulls lever: GEOLVR & GEOLVR26 + { + FX_LEVER, // sampleId + FX_SPOT, // type + 26, // delay (or random chance) + { // roomVolList + {21,8,10}, // {roomNo,leftVol,rightVol} + {26,8,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 102 George pulls lever: GEOLVR8 & GEOLVR08 + { + FX_LEVER2, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) + { // roomVolList + {21,8,10}, // {roomNo,leftVol,rightVol} + {26,8,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 103 George opens tap: No idea what the anim is + { + FX_TAP, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {21,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 104 George closes tap: No idea what this anim is either + { + FX_TAP2, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {21,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 105 Bar flap: FLPOPN + { + FX_BARFLAP, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {20,6,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 106 Farmer leaves: FRMWLK + { + FX_FARMERGO, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) + { // roomVolList + {22,6,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 107 George climbs haystack: GEOCLM + { + FX_CLIMBHAY, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) + { // roomVolList + {22,14,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 108 George drives sewer key into wall: GEOKEY23 + { + FX_KEYSTEP, // sampleId + FX_SPOT, // type + 39, // delay (or random chance) + { // roomVolList + {23,8,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 109 George climbs over wall: GEOCLM23 + { + FX_CASTLWAL, // sampleId + FX_SPOT, // type + 17, // delay (or random chance) + { // roomVolList + {23,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 110 George falls from wall: GEOTRY23 + { + FX_CLIMBFAL, // sampleId + FX_SPOT, // type + 43, // delay (or random chance) + { // roomVolList + {23,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 111 Goat chewing: GOTEAT + { + FX_GOATCHEW, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {24,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 112 George moves plough: GEOPLW + { + FX_PLOUGH, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) + { // roomVolList + {24,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 113 George drops slab: STNFALL + { + FX_SLABFALL, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {25,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 114 George picks up slab: GEOSTN8 + { + FX_SLABUP, // sampleId + FX_SPOT, // type + 29, // delay (or random chance) + { // roomVolList + {25,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 115 Secret door opens: ALTOPN + { + FX_SECDOR25, // sampleId + FX_SPOT, // type + 17, // delay (or random chance) + { // roomVolList + {25,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 116 George wrings out cloth: GEOTWL25 + { + FX_WRING, // sampleId + FX_SPOT, // type + 24, // delay (or random chance) + { // roomVolList + {25,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 117 Rat running across barrels: RATJMP + { + FX_RAT3A, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {26,8,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 118 Rat running across barrels: RATJMP + { + FX_RAT3B, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) + { // roomVolList + {26,7,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 119 Rat running across barrels: RATJMP + { + FX_RAT3C, // sampleId + FX_SPOT, // type + 26, // delay (or random chance) + { // roomVolList + {26,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 120 Irish bird song 1: + { + FX_EIRBIRD1, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) + { // roomVolList + {19,6,8}, // {roomNo,leftVol,rightVol} + {21,2,3}, + {22,8,5}, + {23,6,5}, + {24,8,8}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 121 Irish bird song 2: + { + FX_EIRBIRD2, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) + { // roomVolList + {19,8,6}, // {roomNo,leftVol,rightVol} + {21,2,3}, + {22,6,8}, + {23,5,5}, + {24,8,8}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 122 Irish bird song 3: + { + FX_EIRBIRD3, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) + { // roomVolList + {19,8,8}, // {roomNo,leftVol,rightVol} + {21,3,4}, + {22,8,8}, + {23,5,6}, + {24,6,8}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 123 Rat 3D: + { + FX_RAT3D, // sampleId + FX_RANDOM, // type + 600, // delay (or random chance) + { // roomVolList + {26,2,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 124 Wind atop the battlements + { + FX_WIND, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {23,6,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 125 Glasswasher in the pub (Room 20) *JEL* Stops after fuse blows and starts when george fixes it. + { + FX_WASHER, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {20,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 126 Running tap in the cellar: (Room 21) *JEL* Only when the tap is on. + { + FX_CELTAP, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {21,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 127 Lopez's hose. Basically a loop but stops when George cuts the water supply. Replaces MUTTER1. + { + FX_HOSE57, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {57,3,1}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 128 Lopez's hose being switched off. Anim GARD05. Replaces MUTTER2. + { + FX_HOSE57B, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {57,3,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 129 Nejo bouncing the ball off the door. NEJ8 + { + FX_BALLPLAY, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) + { // roomVolList + {45,5,1}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + //------------------------ + // 130 Cricket loop for Syrian desert Only audible in 55 when the cave door is open. + { + FX_CRICKET, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {54,8,8}, // {roomNo,leftVol,rightVol} + {55,3,5}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 131 Display case shatters: GEOTOTB + { + FX_SMASHGLA, // sampleId + FX_SPOT, // type + 35, // delay (or random chance) + { // roomVolList + {29,16,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 132 Burglar alarm: Once the case is smashed (see 131) + { + FX_ALARM, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {28,12,12}, // {roomNo,leftVol,rightVol} + {29,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 133 Guido fires: GUIGUN + { + FX_GUN1, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {29,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 134 Guido knocked down: NICPUS1 + { + FX_GUI_HIT, // sampleId + FX_SPOT, // type + 40, // delay (or random chance) + { // roomVolList + {29,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 135 Museum exterior ambience + { + FX_MUESEXT, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {27,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 136 Cat gets nowty: CAT3 + { + FX_STALLCAT, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {45,10,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 137 Cat gets very nowty: CAT5 + { + FX_CATHIT, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) + { // roomVolList + {45,10,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 138 Desert wind: Only audible in 55 when the cave door is open. + { + FX_SYRIWIND, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) + { // roomVolList + {54,10,10}, // {roomNo,leftVol,rightVol} + {55,5,7}, + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + // 139 Bell on Nejo's stall: GEOSYR7 + { + FX_STALLBEL, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {45,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + } + }, + //------------------------ + //------------------------ + // 140 George electrocutes Khan: GEOSYR40 + { + FX_SHOCK3, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {54,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 141 George thumps Khan: GEOSYR40 + { + FX_THUMP1, // sampleId + FX_SPOT, // type + 22, // delay (or random chance) + { // roomVolList + {54,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 142 Khan hits the floor: KHS9 + { + FX_KHANDOWN, // sampleId + FX_SPOT, // type + 24, // delay (or random chance) + { // roomVolList + {54,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 143 Hospital ambience + { + FX_HOSPNOIS, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {32,6,4}, // {roomNo,leftVol,rightVol} + {33,7,7}, + {34,3,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 144 Mr Shiny switched on: DOMPLG (Start FX_SHINY) + { + FX_SHINYON, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {33,12,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 145 Mr Shiny running + { + FX_SHINY, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {32,4,3}, // {roomNo,leftVol,rightVol} + {33,12,14}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 146 Mr Shiny switched off: GEOPLG33 (Turn off FX_SHINY at the same time) + { + FX_SHINYOFF, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) + { // roomVolList + {33,12,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 147 Benoir takes blood pressure: BENBP1 or BENBP2 + { + FX_BLOODPRE, // sampleId + FX_SPOT, // type + 39, // delay (or random chance) + { // roomVolList + {34,14,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 148 George takes blood pressure: GEOBP1 or GEOBP2 + { + FX_BLOODPRE, // sampleId + FX_SPOT, // type + 62, // delay (or random chance) + { // roomVolList + {34,14,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 149 Goat baas as it attacks: GOTCR and GOTCL + { + FX_GOATBAA, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {24,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 150 Goat peeved at being trapped: GOTPLW (I'd advise triggering this anim randomly if you haven't done that) + { + FX_GOATDOH, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) + { // roomVolList + {24,7,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 151 George triggers the Irish secret door: GEOPUT + { + FX_TRIGER25, // sampleId + FX_SPOT, // type + 35, // delay (or random chance) + { // roomVolList + {25,6,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 152 George winds up gramophone: GEOWIND + { + FX_WINDUP11, // sampleId + FX_SPOT, // type + 16, // delay (or random chance) + { // roomVolList + {11,7,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 153 Marib ambience + { + FX_MARIB, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {45,7,7}, // {roomNo,leftVol,rightVol} + {47,5,5}, + {50,5,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 154 Statuette breaks: STA2 + { + FX_STATBREK, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {45,7,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 155 George opens toilet door: CUBDOR50 + { + FX_CUBDOR, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) + { // roomVolList + {50,6,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 156 Crowd goes, "Ooh!": CRO36APP + { + FX_OOH, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) + { // roomVolList + {36,6,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 157 Phone rings: When Nico calls back in room 41. Loops until the guard answers it. + { + FX_PHONCALL, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {41,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 158 Phone picked up in 41: GUA41ANS + { + FX_FONEUP41, // sampleId + FX_SPOT, // type + 18, // delay (or random chance) + { // roomVolList + {41,5,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 159 George turns thermostat: GEO41THE (another dummy). Also used on the reverse. + { + FX_THERMO1, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) + { // roomVolList + {41,6,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 160 Low echoing rumble of large church + { + FX_CHURCHFX, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) + { // roomVolList + {38,5,5}, // {roomNo,leftVol,rightVol} + {48,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 161 George drys hand: GEO43HAN + { + FX_DRIER1, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) + { // roomVolList + {43,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 162 George jumps in through window: GEOWIN8 + { + FX_JUMPIN, // sampleId + FX_SPOT, // type + 49, // delay (or random chance) + { // roomVolList + {17,8,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 163 Khan fires: KHS12 + { + FX_SHOTKHAN, // sampleId + FX_SPOT, // type + 30, // delay (or random chance) + { // roomVolList + {54,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 164 Khan fires: KHS5 + { + FX_SHOTKHAN, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) + { // roomVolList + {54,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 165 George falls: GEOSYR37 + { + FX_GEOFAL54, // sampleId + FX_SPOT, // type + 25, // delay (or random chance) + { // roomVolList + {54,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 166 George falls after going for the gun (GEOSYR42) + { + FX_GEOFAL54, // sampleId + FX_SPOT, // type + 46, // delay (or random chance) + { // roomVolList + {54,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 167 Pickaxe sound 5: Screen 1 - WRKDIG01 + { + FX_PICK5, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {1,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 168 George climbs ladder in 7: GEOASC07 + { + FX_SEWLADU7, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) * + { // roomVolList + {7,8,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 169 George picks keys up in Alamut: GEOKEYS1 + { + FX_KEYS49, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {49,8,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 170 George puts down keys up in Alamut: GEOKEYS2 + { + FX_KEYS49, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) * + { // roomVolList + {49,8,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 171 George unlocks toilet door: GEOSYR43 + { + FX_UNLOCK49, // sampleId + FX_SPOT, // type + 16, // delay (or random chance) * + { // roomVolList + {49,6,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 172 George breaks the toilet chain. GEOSYR48 + { + FX_WCCHAIN, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {50,6,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 173 George breaks the branch of the cliff edge tree. GEOSYR20 + { + FX_BREKSTIK, // sampleId + FX_SPOT, // type + 16, // delay (or random chance) * + { // roomVolList + {54,6,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 174 George climbs down the cliff face. GEOSYR23 + { + FX_CLIMBDWN, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) * + { // roomVolList + {54,6,7}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 175 George pulls ring: GEOSYR26 + { + FX_RINGPULL, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {54,7,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 176 Bull's Head door opens: SECDOR + { + FX_SECDOR54, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {54,7,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 177 Inside Bull's Head door opens: DOOR55 (and its reverse). + { + FX_SECDOR55, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {55,4,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 178 Ayub opens door. AYU1 + { + FX_AYUBDOOR, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {45,8,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 179 George knocks at the door in location 4: GEONOK followed by reverse of GEONOK + { + FX_KNOKKNOK, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) * + { // roomVolList + {4,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 180 George knocks at the door in location 5: GEONOK05 + { + FX_KNOKKNOK, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) * + { // roomVolList + {5,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 181 Those pesky Irish birds turn up in Spain, too. + { + FX_SPNBIRD1, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) * + { // roomVolList + {57,1,4}, + {58,8,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 182 Those pesky Irish birds turn up in Spain, too. + { + FX_SPNBIRD2, // sampleId + FX_RANDOM, // type + 697, // delay (or random chance) * + { // roomVolList + {57,4,8}, // {roomNo,leftVol,rightVol} + {58,4,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 183 The secret door in the well: SECDOR61 anim + { + FX_SECDOR61, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {61,4,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 184 Spanish countryside ambience + { + FX_SPAIN, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {57,1,2}, // + {58,2,2}, // + {60,1,1}, // + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 185 Spanish well ambience + { + FX_WELLDRIP, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {61,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 186 Fish falls on George's head: GEOTOT29 + { + FX_FISHFALL, // sampleId + FX_SPOT, // type + 60, // delay (or random chance) * + { // roomVolList + {29,10,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 187 Hospital exterior ambience + { + FX_HOSPEXT, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {31,3,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 188 Hospital exterior gravel footstep #1 + { + FX_GRAVEL1, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {31,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 189 Hospital exterior gravel footstep #2 + { + FX_GRAVEL2, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {31,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 190 George opens sarcophagus: GEOSAR + { + FX_SARCO28A, // sampleId + FX_SPOT, // type + 26, // delay (or random chance) * + { // roomVolList + {28,6,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 191 George closes sarcophagus: GEOSAR2 + { + FX_SARCO28B, // sampleId + FX_SPOT, // type + 24, // delay (or random chance) * + { // roomVolList + {28,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 192 Guard opens sarcophagus: MUSOPN + { + FX_SARCO28C, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) * + { // roomVolList + {28,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 193 George peeks out of sarcophagus: GEOPEEK + { + FX_SARCO29, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) * + { // roomVolList + {29,5,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 194 The rope drops into the room: ROPE29 + { + FX_ROPEDOWN, // sampleId + FX_SPOT, // type + 3, // delay (or random chance) * + { // roomVolList + {29,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 195 George pushes the totem pole: GEOTOT29 + { + FX_TOTEM29A, // sampleId + FX_SPOT, // type + 30, // delay (or random chance) * + { // roomVolList + {29,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 196 George pushes the totem pole over: GEOTOTB + { + FX_TOTEM29B, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {29,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 197 George rocks the totem pole in museum hours: TOTEM28 + { + FX_TOTEM28A, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) * + { // roomVolList + {28,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 198 Ambient sound for Montfauçon Square + { + FX_MONTAMB, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {36,6,6}, // {roomNo,leftVol,rightVol} + {40,6,6}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 199 Ambient sound churchyard. + { + FX_WIND71, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) * + { // roomVolList + {71,10,10}, // {roomNo,leftVol,rightVol} + {72,7,7}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 200 Owl cry #1 in churchyard + { + FX_OWL71A, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) * + { // roomVolList + {71,8,8}, // {roomNo,leftVol,rightVol} + {72,6,4}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 201 Owl cry #2 in churchyard + { + FX_OWL71B, // sampleId + FX_RANDOM, // type + 1080, // delay (or random chance) * + { // roomVolList + {71,8,8}, // {roomNo,leftVol,rightVol} + {72,7,6}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 202 Air conditioner in the museum + { + FX_AIRCON28, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {28,6,6}, // {roomNo,leftVol,rightVol} + {29,3,3}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 203 George breaks the handle off in the church tower. GEOWND72 + { + FX_COG72A, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) * + { // roomVolList + {72,10,10}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 204 Countess' room ambience + { + FX_AMBIEN56, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {56,3,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 205 Musical effect for George drinking beer. GEODRN20 + { + FX_DRINK, // sampleId + FX_SPOT, // type + 17, // delay (or random chance) * + { // roomVolList + {20,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 206 Torch thrown through the air. GEOTHROW + { + FX_TORCH73, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) * + { // roomVolList + {73,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 207 Internal train ambience. + { + FX_TRAININT, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {63,3,3}, // {roomNo,leftVol,rightVol} + {65,2,2}, + {66,2,2}, + {67,2,2}, + {69,2,2}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 208 Countess' clock. PENDULUM. Note: Trigger the sound effect on alternate runs of the pendulum animation. + { + FX_PENDULUM, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) * + { // roomVolList + {56,2,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 209 Compartment door. DOOR65 + { + FX_DOOR65, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {65,3,3}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 210 Opening window. GEOOPN1 + { + FX_WINDOW66, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) * + { // roomVolList + {66,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 211 Wind rip by the open window. Triggered at the end of effect 210. + { + FX_WIND66, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {66,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 212 George electrocutes himself on the pantograph. Fool. GEOSHK64 + { + FX_SHOCK63, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {63,12,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 213 The train brakes violently. GEOSTP69 + { + FX_BRAKES, // sampleId + FX_SPOT, // type + 13, // delay (or random chance) * + { // roomVolList + {69,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 214 The train ticks over. From the end of BRAKE. + { + FX_TICK69, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {69,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 215 Eklund shoot Khan. FIGHT69 + { + FX_EKSHOOT, // sampleId + FX_SPOT, // type + 120, // delay (or random chance) * + { // roomVolList + {69,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 216 Eklund shoots George. GEODIE69 + { + FX_EKSHOOT, // sampleId + FX_SPOT, // type + 21, // delay (or random chance) * + { // roomVolList + {69,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 217 Khan pulls the door open. FIGHT69 + { + FX_DOOR69, // sampleId + FX_SPOT, // type + 42, // delay (or random chance) * + { // roomVolList + {69,8,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 218 Wind shriek. Loops from the end of DOOR69 wav to the beginning of BRAKES. + { + FX_WIND66, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {69,8,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 219 Brakes releasing pressure. Only after BRAKE has been run. + { + FX_PNEUMO69, // sampleId + FX_RANDOM, // type + 720, // delay (or random chance) * + { // roomVolList + {69,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 220 External train sound. Played while George is on the top of the train. + { + FX_TRAINEXT, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {63,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 221 The passing train. FIGHT69 + { + FX_TRNPASS, // sampleId + FX_SPOT, // type + 102, // delay (or random chance) * + { // roomVolList + {69,4,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 222 George descends into sewer. GEODESO6 + { + FX_LADD2, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {6,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 223 George ascends into alley. GEOASC06 + { + FX_LADD3, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {6,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 224 George replaces manhole cover. GEOMAN9 + { + FX_COVERON2, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) * + { // roomVolList + {2,12,11}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 225 Montfaucon sewer ambience. + { + FX_AMBIEN37, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {37,5,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 226 George's winning smile. GEOJMP72. + { + FX_PING, // sampleId + FX_SPOT, // type + 26, // delay (or random chance) * + { // roomVolList + {72,10,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 227 George starts to open the manhole. GEO36KNE + { + FX_MANOP36, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) * + { // roomVolList + {36,4,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 228 George opens the manhole. GEO36OPE + { + FX_PULLUP36, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {36,4,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 229 George replaces the manhole cover. GEO36CLO + { + FX_REPLCE36, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) * + { // roomVolList + {36,4,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 230 George knocks at righthand arch. GEO37TA3 + { + FX_KNOCK37, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) * + { // roomVolList + {37,6,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 231 George knocks at middle or lefthand arch. GEO37TA1 or GEO37TA2. + { + FX_KNOCK37B, // sampleId + FX_SPOT, // type + 20, // delay (or random chance) * + { // roomVolList + {37,4,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 232 George winds the chain down HOO37LBO + { + FX_CHAIN37, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) * + { // roomVolList + {37,6,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 233 George winds the chain up. HOO37LBO (In reverse) + { + FX_CHAIN37B, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {37,6,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 234 George breaks hole in door. GEO37TA4 + { + FX_HOLE37, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {37,6,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 235 Plaster door collapses. DOR37COL + { + FX_DOOR37, // sampleId + FX_SPOT, // type + 23, // delay (or random chance) * + { // roomVolList + {37,8,15}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 236 Barge winch. GEO37TUL (If it runs more than once, trigger the effect on frame one. Incidentally, this is a reversible so the effect must launch on frame one of the .cdr version as well. ) + { + FX_WINCH37, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {37,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 237 George places chess piece. GEOSPA17 + { + FX_CHESS, // sampleId + FX_SPOT, // type + 23, // delay (or random chance) * + { // roomVolList + {59,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 238 Piano loop for the upstairs hotel corridor. + { + FX_PIANO14, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {14,2,2}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 239 Door opens in church tower. PANEL72 + { + FX_SECDOR72, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {72,8,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 240 George rummages through debris. Tied to the end of the whichever crouch is used. Use either this one or RUMMAGE2 alternatively or randomly. Same kind of schtick as the pick axe noises, I suppose. + { + FX_RUMMAGE1, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {72,8,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 241 George rummages through debris. See above for notes. + { + FX_RUMMAGE2, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {72,8,6}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 242 Gust of wind in the graveyard. + { + FX_GUST71, // sampleId + FX_RANDOM, // type + 1080, // delay (or random chance) * + { // roomVolList + {71,3,3}, // {roomNo,leftVol,rightVol} + {72,2,1}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 243 Violin ambience for Ireland. + { + FX_VIOLIN19, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {19,3,3}, // {roomNo,leftVol,rightVol} + {21,2,2}, + {26,2,2}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 244 Footstep #1 for underground locations. Same schtick as for 188 and 189. + { + FX_SEWSTEP1, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {6,8,8}, // {roomNo,leftVol,rightVol} + {7,8,8}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 245 Footstep #2 for underground locations. Same schtick as for 188 and 189. + { + FX_SEWSTEP2, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {6,16,16}, // {roomNo,leftVol,rightVol} + {7,16,16}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 246 Nico's carabiner as she descends into the museum. NICPUS1 + { + FX_CARABINE, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) * + { // roomVolList + {29,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 247 Rosso is shot (with a piece of field artillery). ROSSHOT + { + FX_GUN79, // sampleId + FX_SPOT, // type + 2, // delay (or random chance) * + { // roomVolList + {79,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 248 George is hit by the thrown stilletto. GEODIE1 + { + FX_DAGGER1, // sampleId + FX_SPOT, // type + 2, // delay (or random chance) * + { // roomVolList + {73,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 249 George is hit by the thrown stilletto after walking forward. GEODIE2 + { + FX_DAGGER1, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {73,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 250 Can hits the well water. The cue is in GAR2SC57.TXT immediately after the line, "over: Lopez threw the can away. It seemed to fall an awfully long way." + { + FX_CANFALL, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) * + { // roomVolList + {57,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 251 Mad, fizzing damp and ancient gunpowder after the application of a torch. + { + FX_GUNPOWDR, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {73,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 252 Maguire whistling. MAGSLK. Plays while Maguire is idling, stops abruptly when he does something else. + { + FX_WHISTLE, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {19,2,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 253 George is hit by the goat. GEOHITR and GEOHITL. + { + FX_GEOGOAT, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {24,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 254 Manager says, "Hello". MAN2 + { + FX_MANG1, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) * + { // roomVolList + {49,6,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 255 Manager says, Don't go in there!" MAN3 + { + FX_MANG2, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {49,6,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 256 Manager says, "Here are the keys." MAN4 + { + FX_MANG3, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) * + { // roomVolList + {49,6,5}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 257 George pulls the lion's tooth. GEOSPA26 + { + FX_TOOTHPUL, // sampleId + FX_SPOT, // type + 19, // delay (or random chance) * + { // roomVolList + {61,8,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 258 George escapes the lion. LION1 + { + FX_LIONFALL, // sampleId + FX_SPOT, // type + 7, // delay (or random chance) * + { // roomVolList + {61,8,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 259 George gets flattened. LION2 + { + FX_LIONFAL2, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) * + { // roomVolList + {61,8,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 260 Rosso dies. ROSSFALL + { + FX_ROSSODIE, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {74,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 261 Eklund chokes George. FIGHT79 + { + FX_CHOKE1, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {79,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 262 Eklund chokes George some more. FIGHT79 + { + FX_CHOKE2, // sampleId + FX_SPOT, // type + 54, // delay (or random chance) * + { // roomVolList + {79,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 263 Eklund dies. FIGHT79 + { + FX_FIGHT2, // sampleId + FX_SPOT, // type + 44, // delay (or random chance) * + { // roomVolList + {79,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 264 George hears museum break-in. GEOSUR29 + { + FX_DOOR29, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {94,14,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 265 George hits the floor having been shot. GEODED. + { + FX_GDROP29, // sampleId + FX_SPOT, // type + 27, // delay (or random chance) * + { // roomVolList + {29,10,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 266 George hits the floor having been stunned. GEOFISH + { + FX_GDROP29, // sampleId + FX_SPOT, // type + 27, // delay (or random chance) * + { // roomVolList + {29,10,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 267 Fitz being knocked down as heard from inside the pub. Triggered from the script, I think. This is just a stopgap until Hackenbacker do the full version for the Smacker, then I'll sample the requisite bit and put it in here. + { + FX_FITZHIT, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {20,16,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 268 Gendarme shoots lock off. GENSHOT + { + FX_GUN34, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {34,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 269 ECG alarm, Marquet in trouble. Start looping imeediately before George says, "Thanks, Bunny". + // Incidentally, James, please switch off Mr Shiney permanently when George first gets into Marquet's room. He gets in the way when they're figuring out that Eklund's an imposter. + { + FX_PULSE2, // sampleId + FX_LOOP, // type + 1, // delay (or random chance) * + { // roomVolList + {30,16,16}, // {roomNo,leftVol,rightVol} + {34,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 270 ECG alarm, Marquet dead. Switch off the previous effect and replace with this immediately before the gendarme says, "Stand back, messieurs." + { + FX_PULSE3, // sampleId + FX_LOOP, // type + 1, // delay (or random chance) * + { // roomVolList + {30,16,16}, // {roomNo,leftVol,rightVol} + {34,13,13}, + {35,13,13}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 271 Door closing. GEOENT15 + { + FX_DORCLOSE, // sampleId + FX_SPOT, // type + 4, // delay (or random chance) * + { // roomVolList + {15,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 272 Cupboard opening. GEOCOT + { + FX_CUPBOPEN, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) * + { // roomVolList + {33,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 273 Cupboard closing. GEOCOT + { + FX_CUPBCLOS, // sampleId + FX_SPOT, // type + 33, // delay (or random chance) * + { // roomVolList + {33,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 274 Closing door when George leaves hotel room. GEOLVS15 and GEODOR17 (they're identical). + { + FX_DORCLOSE, // sampleId + FX_SPOT, // type + 44, // delay (or random chance) * + { // roomVolList + {15,12,12}, // {roomNo,leftVol,rightVol} + {17,12,12}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 275 Closing door when George leaves the pub. DOROPN20 (Reversed) + { + FX_DORCLOSE20,// sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {20,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 276 Nico call for a cab. NICPHN10 + { + FX_PHONICO1, // sampleId + FX_SPOT, // type + 15, // delay (or random chance) * + { // roomVolList + {10,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 277 Nico puts down the phone. NICDWN10 + { + FX_FONEDN, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) * + { // roomVolList + {10,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 278 Painter puts down the phone. PAI41HAN + { + FX_FONEDN41, // sampleId + FX_SPOT, // type + 5, // delay (or random chance) * + { // roomVolList + {41,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 279 Mechanical hum of heating system in the dig lobby. + { + FX_AIRCON41, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {41,6,6}, // {roomNo,leftVol,rightVol} + {43,8,8}, + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + //------------------------ + // 280 The Sword is Reforged (Grandmaster gets zapped) GMPOWER + { + FX_REFORGE1, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {78,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 281 The Sword is Reforged (G&N gawp at the spectacle) There's no anim I know of to tie it to unless the flickering blue light is one. + { + FX_REFORGE2, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {75,12,12}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 282 The Sword is Reforged (We watch over G&N's heads as the Grandmaster gets zapped) GMWRIT74 + { + FX_REFORGE2, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {74,14,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 283 The Sword is Reforged (Grandmaster finishes being zapped) GMWRITH + { + FX_REFORGE4, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {78,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 284 Baphomet Cavern Ambience + { + FX_BAPHAMB, // sampleId + FX_LOOP, // type + 0, // delay (or random chance) * + { // roomVolList + {74,6,8}, // {roomNo,leftVol,rightVol} + {75,7,8}, // {roomNo,leftVol,rightVol} + {76,8,8}, // {roomNo,leftVol,rightVol} + {77,8,8}, // {roomNo,leftVol,rightVol} + {78,8,8}, // {roomNo,leftVol,rightVol} + {79,7,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 285 Duane's Happy-Snappy Camera. XDNEPHO3 and XDNEPHO5. + { + FX_CAMERA45, // sampleId + FX_SPOT, // type + 30, // delay (or random chance) * + { // roomVolList + {45,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 286 Grand Master strikes the floor with his cane. GMENTER + { + FX_STAFF, // sampleId + FX_SPOT, // type + 28, // delay (or random chance) * + { // roomVolList + {73,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 287 George descends ladder in 7: GEOASC07 (Reversed) This used to be handled by effect #46 but it didn't fit at all. + { + FX_SEWLADD7, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {7,8,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 288 Sam kicks the recalcitrant Mr. Shiny. DOMKIK + { + FX_KIKSHINY, // sampleId + FX_SPOT, // type + 16, // delay (or random chance) * + { // roomVolList + {33,9,9}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 289 Gust of wind outside bombed cafe. LVSFLY + { + FX_LVSFLY, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {1,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 290 Ron's disgusting No.1 Sneeze. Either this or the next effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2 + { + FX_SNEEZE1, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {20,10,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 291 Ron's disgusting No.2 Sneeze. Either this or the previous effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2 + { + FX_SNEEZE2, // sampleId + FX_SPOT, // type + 11, // delay (or random chance) * + { // roomVolList + {20,10,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 292 Dripping tap in the pub cellar. TAPDRP + { + FX_DRIPIRE, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {21,4,4}, // {roomNo,leftVol,rightVol} + {26,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 293 Dripping tap in the pub cellar. TAPDRP + { + FX_DRIPIRE2, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {21,4,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 294 Dripping tap in the excavation toilet. (see WATER43 - but it's looped anyway, not triggered with anim) + { + FX_TAPDRIP, // sampleId + FX_SPOT, // type + 6, // delay (or random chance) * + { // roomVolList + {43,8,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 295 George closes the mausoleum window. GEOSPA23 + { + FX_WINDOW59, // sampleId + FX_SPOT, // type + 24, // delay (or random chance) * + { // roomVolList + {59,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 296 George opens the mausoleum window, the feebleminded loon. GEOSPA23 reversed. + { + FX_WINDOW59, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) * + { // roomVolList + {59,10,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 297 When George & Nico hear chanting from sc73 + { + FX_CHANT, // sampleId + FX_SPOT, // type + 10, // delay (or random chance) * + { // roomVolList + {73,2,4}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 298 EKFIGHT + { + FX_FIGHT1, // sampleId + FX_SPOT, // type + 31, // delay (or random chance) * + { // roomVolList + {74,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 299 Small van passes, left to right. CARA9 and CARC9 + { + FX_LITEVEHR, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {9,16,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 300 Small van passes, right to left to right. CARB9 + { + FX_LITEVEHL, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {9,16,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 301 Truck passes, left to right. TRUCKA9 and TRUCKB9 + { + FX_HVYVEHR, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {9,14,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 302 Truck passes, right to left. TRUCKC9 + { + FX_HVYVEHL, // sampleId + FX_SPOT, // type + 1, // delay (or random chance) * + { // roomVolList + {9,14,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 303 With anim FIGHT69 + { + FX_FIGHT69, // sampleId + FX_SPOT, // type + 78, // delay (or random chance) * + { // roomVolList + {69,12,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 304 With anim GEODIE1 in sc73 + { + FX_GDROP73, // sampleId + FX_SPOT, // type + 14, // delay (or random chance) * + { // roomVolList + {73,12,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 305 With anim GEODIE2 in sc73 + { + FX_GDROP73, // sampleId + FX_SPOT, // type + 21, // delay (or random chance) * + { // roomVolList + {73,12,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 306 With anim GEODES25 + { + FX_LADDWN25, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {25,12,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 307 With anim GEOASC25 + { + FX_LADDUP25, // sampleId + FX_SPOT, // type + 8, // delay (or random chance) * + { // roomVolList + {25,12,8}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 308 With anim GKSWORD in sc76 + { + FX_GKSWORD, // sampleId + FX_SPOT, // type + 9, // delay (or random chance) * + { // roomVolList + {76,10,10}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 309 With anim GEO36KNE in sc36 + { + FX_KEYIN, // sampleId + FX_SPOT, // type + 18, // delay (or random chance) * + { // roomVolList + {36,14,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 310 With anim GEO36ENT in sc36 + { + FX_COVDWN, // sampleId + FX_SPOT, // type + 85, // delay (or random chance) * + { // roomVolList + {36,14,14}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + // 311 With anim SECDOR59 in sc59 + { + FX_SECDOR59, // sampleId + FX_SPOT, // type + 0, // delay (or random chance) * + { // roomVolList + {59,16,16}, // {roomNo,leftVol,rightVol} + {0,0,0}, // NULL-TERMINATOR + }, + }, + //------------------------ + }; + + writeRecord(_fxList, sizeof(_fxList), GBVARS_FXLIST_INDEX , GBVARS_SWORD1); +} + +void Sword1_addStaticres() { + addStaticres_fxList(); +} diff --git a/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h new file mode 100644 index 0000000000..796e3d10ed --- /dev/null +++ b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h @@ -0,0 +1,5201 @@ +#ifndef SWORDRES_H +#define SWORDRES_H + +//namespace Sword1 { + +// scripts + // standard +#define SCRIPT0 0x01000000 + // 1 entities in TXTs, 1 in datafiles. + // megas +#define SCRIPT128 0x01010000 +#define SCRIPT129 0x01010001 +#define SCRIPT130 0x01010002 +#define SCRIPT131 0x01010003 +#define SCRIPT133 0x01010004 +#define SCRIPT134 0x01010005 +#define SCRIPT145 0x01010006 +#define SCRIPT146 0x01010007 + // 8 entities in TXTs, 8 in datafiles. + // maps +#define SCRIPT80 0x01020000 +#define SCRIPT86 0x01020001 +#define SCRIPT90 0x01020002 + // 3 entities in TXTs, 3 in datafiles. + // paris1 +#define SCRIPT1 0x01030000 +#define SCRIPT2 0x01030001 +#define SCRIPT3 0x01030002 +#define SCRIPT4 0x01030003 +#define SCRIPT5 0x01030004 +#define SCRIPT6 0x01030005 +#define SCRIPT7 0x01030006 +#define SCRIPT8 0x01030007 + // 8 entities in TXTs, 8 in datafiles. + // paris2 +#define SCRIPT9 0x01040000 +#define SCRIPT10 0x01040001 +#define SCRIPT11 0x01040002 +#define SCRIPT12 0x01040003 +#define SCRIPT13 0x01040004 +#define SCRIPT14 0x01040005 +#define SCRIPT15 0x01040006 +#define SCRIPT16 0x01040007 +#define SCRIPT17 0x01040008 +#define SCRIPT18 0x01040009 +#define SCRIPT46 0x0104000A + // 11 entities in TXTs, 11 in datafiles. + // paris3 +#define SCRIPT27 0x01050000 +#define SCRIPT28 0x01050001 +#define SCRIPT29 0x01050002 +#define SCRIPT31 0x01050003 +#define SCRIPT32 0x01050004 +#define SCRIPT33 0x01050005 +#define SCRIPT34 0x01050006 +#define SCRIPT35 0x01050007 + // 8 entities in TXTs, 8 in datafiles. + // paris4 +#define SCRIPT36 0x01060000 +#define SCRIPT37 0x01060001 +#define SCRIPT38 0x01060002 +#define SCRIPT39 0x01060003 +#define SCRIPT40 0x01060004 +#define SCRIPT41 0x01060005 +#define SCRIPT42 0x01060006 +#define SCRIPT43 0x01060007 +#define SCRIPT48 0x01060008 + // 9 entities in TXTs, 9 in datafiles. + // ireland +#define SCRIPT19 0x01070000 +#define SCRIPT20 0x01070001 +#define SCRIPT21 0x01070002 +#define SCRIPT22 0x01070003 +#define SCRIPT23 0x01070004 +#define SCRIPT24 0x01070005 +#define SCRIPT25 0x01070006 +#define SCRIPT26 0x01070007 + // 8 entities in TXTs, 8 in datafiles. + // spain +#define SCRIPT56 0x01080000 +#define SCRIPT57 0x01080001 +#define SCRIPT58 0x01080002 +#define SCRIPT59 0x01080003 +#define SCRIPT60 0x01080004 +#define SCRIPT61 0x01080005 +#define SCRIPT62 0x01080006 + // 7 entities in TXTs, 7 in datafiles. + // syria +#define SCRIPT45 0x01090000 +#define SCRIPT47 0x01090001 +#define SCRIPT49 0x01090002 +#define SCRIPT50 0x01090003 +#define SCRIPT54 0x01090004 +#define SCRIPT55 0x01090005 + // 6 entities in TXTs, 6 in datafiles. + // train +#define SCRIPT63 0x010A0000 +#define SCRIPT65 0x010A0001 +#define SCRIPT66 0x010A0002 +#define SCRIPT67 0x010A0003 +#define SCRIPT69 0x010A0004 + // 5 entities in TXTs, 5 in datafiles. + // scotland +#define SCRIPT71 0x010B0000 +#define SCRIPT72 0x010B0001 +#define SCRIPT73 0x010B0002 +#define SCRIPT74 0x010B0003 + // 4 entities in TXTs, 4 in datafiles. +// compacts + // standard +#define TEXT_OBS 0x02000000 + // 1 entities in TXTs, 1 in datafiles. + // megas +#define MEGA_GEO 0x02010000 +#define GEO_TLK_TABLE 0x02010001 +#define WHT_TLK_TABLE 0x02010002 +#define GEO_SHRUG_TABLE 0x02010003 +#define GEO_GIVE_TABLE 0x02010004 +#define GEO_GIVER_TABLE 0x02010005 +#define GEO_CROUCH_TABLE 0x02010006 +#define GEO_CROUCHR_TABLE 0x02010007 +#define GEO_PICKUP_TABLE 0x02010008 +#define GEO_RELAX_TABLE 0x02010009 +#define GEO_RELAXR_TABLE 0x0201000A +#define GEO_HAIR_TABLE 0x0201000B +#define GEO_BLINK_TABLE 0x0201000C +#define GEOPHN_TABLE 0x0201000D +#define GEO_GAUGE_TABLE 0x0201000E +#define GEO_SHOW_TABLE 0x0201000F +#define GEO_SHOWR_TABLE 0x02010010 +#define GEOSTA_TABLE 0x02010011 +#define GEOMON_TABLE 0x02010012 +#define MEGA_DUANE 0x02010013 +#define DUA5_TABLE 0x02010014 +#define DUA6_TABLE 0x02010015 +#define DUA7_TABLE 0x02010016 +#define DUA8_TABLE 0x02010017 +#define DUA9_TABLE 0x02010018 +#define MEGA_NICO 0x02010019 +#define NIC_TLK_TABLE 0x0201001A +#define NIC_PHOTO_TABLE 0x0201001B +#define NICPHN_TABLE 0x0201001C +#define MEGA_MUS 0x0201001D +#define MUS_TLK_TABLE 0x0201001E +#define MEGA_BENOIR 0x0201001F +#define BEN_GAUGE_TABLE 0x02010020 +#define BEN_TLK_TABLE 0x02010021 +#define MEGA_ROSSO 0x02010022 +#define MEGA_MOUE 0x02010023 +#define MEGA_ALBERT 0x02010024 + // 37 entities in TXTs, 37 in datafiles. + // maps +#define COMP80 0x02020000 +#define COMP86 0x02020001 +#define COMP90 0x02020002 +#define COMP91 0x02020003 +#define COMP99 0x02020004 + // 5 entities in TXTs, 5 in datafiles. + // paris1 +#define COMP1 0x02030000 +#define COMP2 0x02030001 +#define COMP3 0x02030002 +#define COMP4 0x02030003 +#define COMP5 0x02030004 +#define COMP6 0x02030005 +#define COMP7 0x02030006 +#define COMP8 0x02030007 + // 8 entities in TXTs, 8 in datafiles. + // paris2 +#define COMP9 0x02040000 +#define COMP10 0x02040001 +#define COMP11 0x02040002 +#define COMP12 0x02040003 +#define COMP13 0x02040004 +#define COMP14 0x02040005 +#define COMP15 0x02040006 +#define COMP16 0x02040007 +#define COMP17 0x02040008 +#define COMP18 0x02040009 +#define COMP81 0x0204000A +#define COMP46 0x0204000B + // 12 entities in TXTs, 12 in datafiles. + // paris3 +#define COMP27 0x02050000 +#define COMP28 0x02050001 +#define COMP29 0x02050002 +#define COMP30 0x02050003 +#define COMP31 0x02050004 +#define COMP32 0x02050005 +#define COMP33 0x02050006 +#define COMP34 0x02050007 +#define COMP35 0x02050008 + // 9 entities in TXTs, 9 in datafiles. + // paris4 +#define COMP36 0x02060000 +#define COMP37 0x02060001 +#define COMP38 0x02060002 +#define COMP39 0x02060003 +#define COMP40 0x02060004 +#define COMP41 0x02060005 +#define COMP42 0x02060006 +#define COMP43 0x02060007 +#define COMP48 0x02060008 + // 9 entities in TXTs, 9 in datafiles. + // ireland +#define COMP19 0x02070000 +#define COMP20 0x02070001 +#define COMP21 0x02070002 +#define COMP22 0x02070003 +#define COMP23 0x02070004 +#define COMP24 0x02070005 +#define COMP25 0x02070006 +#define COMP26 0x02070007 + // 8 entities in TXTs, 8 in datafiles. + // spain +#define COMP56 0x02080000 +#define COMP57 0x02080001 +#define COMP58 0x02080002 +#define COMP59 0x02080003 +#define COMP60 0x02080004 +#define COMP61 0x02080005 +#define COMP62 0x02080006 + // 7 entities in TXTs, 7 in datafiles. + // syria +#define COMP45 0x02090000 +#define COMP47 0x02090001 +#define COMP49 0x02090002 +#define COMP50 0x02090003 +#define COMP53 0x02090004 +#define COMP54 0x02090005 +#define COMP55 0x02090006 + // 7 entities in TXTs, 7 in datafiles. + // train +#define COMP63 0x020A0000 +#define COMP65 0x020A0001 +#define COMP66 0x020A0002 +#define COMP67 0x020A0003 +#define COMP69 0x020A0004 + // 5 entities in TXTs, 5 in datafiles. + // scotland +#define COMP71 0x020B0000 +#define COMP72 0x020B0001 +#define COMP73 0x020B0002 +#define COMP74 0x020B0003 +#define COMP75 0x020B0004 +#define COMP76 0x020B0005 +#define COMP77 0x020B0006 +#define COMP78 0x020B0007 +#define COMP79 0x020B0008 + // 9 entities in TXTs, 9 in datafiles. +// text + // english +#define ENGLISH0 0x03000000 +#define ENGLISH1 0x03000001 +#define ENGLISH2 0x03000002 +#define ENGLISH3 0x03000003 +#define ENGLISH4 0x03000004 +#define ENGLISH5 0x03000005 +#define ENGLISH6 0x03000006 +#define ENGLISH7 0x03000007 +#define ENGLISH9 0x03000008 +#define ENGLISH11 0x03000009 +#define ENGLISH12 0x0300000A +#define ENGLISH13 0x0300000B +#define ENGLISH14 0x0300000C +#define ENGLISH15 0x0300000D +#define ENGLISH16 0x0300000E +#define ENGLISH17 0x0300000F +#define ENGLISH18 0x03000010 +#define ENGLISH19 0x03000011 +#define ENGLISH20 0x03000012 +#define ENGLISH21 0x03000013 +#define ENGLISH22 0x03000014 +#define ENGLISH23 0x03000015 +#define ENGLISH24 0x03000016 +#define ENGLISH25 0x03000017 +#define ENGLISH27 0x03000018 +#define ENGLISH28 0x03000019 +#define ENGLISH29 0x0300001A +#define ENGLISH31 0x0300001B +#define ENGLISH32 0x0300001C +#define ENGLISH33 0x0300001D +#define ENGLISH34 0x0300001E +#define ENGLISH35 0x0300001F +#define ENGLISH36 0x03000020 +#define ENGLISH37 0x03000021 +#define ENGLISH38 0x03000022 +#define ENGLISH39 0x03000023 +#define ENGLISH40 0x03000024 +#define ENGLISH41 0x03000025 +#define ENGLISH42 0x03000026 +#define ENGLISH43 0x03000027 +#define ENGLISH45 0x03000028 +#define ENGLISH47 0x03000029 +#define ENGLISH48 0x0300002A +#define ENGLISH49 0x0300002B +#define ENGLISH50 0x0300002C +#define ENGLISH54 0x0300002D +#define ENGLISH55 0x0300002E +#define ENGLISH56 0x0300002F +#define ENGLISH57 0x03000030 +#define ENGLISH58 0x03000031 +#define ENGLISH59 0x03000032 +#define ENGLISH60 0x03000033 +#define ENGLISH61 0x03000034 +#define ENGLISH63 0x03000035 +#define ENGLISH65 0x03000036 +#define ENGLISH66 0x03000037 +#define ENGLISH69 0x03000038 +#define ENGLISH71 0x03000039 +#define ENGLISH72 0x0300003A +#define ENGLISH73 0x0300003B +#define ENGLISH74 0x0300003C +#define ENGLISH90 0x0300003D +#define ENGLISH99 0x0300003E +#define ENGLISH129 0x0300003F +#define ENGLISH131 0x03000040 +#define ENGLISH133 0x03000041 +#define ENGLISH145 0x03000042 +#define ENGLISH146 0x03000043 + // 68 entities in TXTs, 68 in datafiles. + // french +#define FRENCH0 0x03010000 +#define FRENCH1 0x03010001 +#define FRENCH2 0x03010002 +#define FRENCH3 0x03010003 +#define FRENCH4 0x03010004 +#define FRENCH5 0x03010005 +#define FRENCH6 0x03010006 +#define FRENCH7 0x03010007 +#define FRENCH9 0x03010008 +#define FRENCH11 0x03010009 +#define FRENCH12 0x0301000A +#define FRENCH13 0x0301000B +#define FRENCH14 0x0301000C +#define FRENCH15 0x0301000D +#define FRENCH16 0x0301000E +#define FRENCH17 0x0301000F +#define FRENCH18 0x03010010 +#define FRENCH19 0x03010011 +#define FRENCH20 0x03010012 +#define FRENCH21 0x03010013 +#define FRENCH22 0x03010014 +#define FRENCH23 0x03010015 +#define FRENCH24 0x03010016 +#define FRENCH25 0x03010017 +#define FRENCH27 0x03010018 +#define FRENCH28 0x03010019 +#define FRENCH29 0x0301001A +#define FRENCH31 0x0301001B +#define FRENCH32 0x0301001C +#define FRENCH33 0x0301001D +#define FRENCH34 0x0301001E +#define FRENCH35 0x0301001F +#define FRENCH36 0x03010020 +#define FRENCH37 0x03010021 +#define FRENCH38 0x03010022 +#define FRENCH39 0x03010023 +#define FRENCH40 0x03010024 +#define FRENCH41 0x03010025 +#define FRENCH42 0x03010026 +#define FRENCH43 0x03010027 +#define FRENCH45 0x03010028 +#define FRENCH47 0x03010029 +#define FRENCH48 0x0301002A +#define FRENCH49 0x0301002B +#define FRENCH50 0x0301002C +#define FRENCH54 0x0301002D +#define FRENCH55 0x0301002E +#define FRENCH56 0x0301002F +#define FRENCH57 0x03010030 +#define FRENCH58 0x03010031 +#define FRENCH59 0x03010032 +#define FRENCH60 0x03010033 +#define FRENCH61 0x03010034 +#define FRENCH63 0x03010035 +#define FRENCH65 0x03010036 +#define FRENCH66 0x03010037 +#define FRENCH69 0x03010038 +#define FRENCH71 0x03010039 +#define FRENCH72 0x0301003A +#define FRENCH73 0x0301003B +#define FRENCH74 0x0301003C +#define FRENCH90 0x0301003D +#define FRENCH99 0x0301003E +#define FRENCH129 0x0301003F +#define FRENCH131 0x03010040 +#define FRENCH133 0x03010041 +#define FRENCH145 0x03010042 +#define FRENCH146 0x03010043 + // 68 entities in TXTs, 68 in datafiles. + // german +#define GERMAN0 0x03020000 +#define GERMAN1 0x03020001 +#define GERMAN2 0x03020002 +#define GERMAN3 0x03020003 +#define GERMAN4 0x03020004 +#define GERMAN5 0x03020005 +#define GERMAN6 0x03020006 +#define GERMAN7 0x03020007 +#define GERMAN9 0x03020008 +#define GERMAN11 0x03020009 +#define GERMAN12 0x0302000A +#define GERMAN13 0x0302000B +#define GERMAN14 0x0302000C +#define GERMAN15 0x0302000D +#define GERMAN16 0x0302000E +#define GERMAN17 0x0302000F +#define GERMAN18 0x03020010 +#define GERMAN19 0x03020011 +#define GERMAN20 0x03020012 +#define GERMAN21 0x03020013 +#define GERMAN22 0x03020014 +#define GERMAN23 0x03020015 +#define GERMAN24 0x03020016 +#define GERMAN25 0x03020017 +#define GERMAN27 0x03020018 +#define GERMAN28 0x03020019 +#define GERMAN29 0x0302001A +#define GERMAN31 0x0302001B +#define GERMAN32 0x0302001C +#define GERMAN33 0x0302001D +#define GERMAN34 0x0302001E +#define GERMAN35 0x0302001F +#define GERMAN36 0x03020020 +#define GERMAN37 0x03020021 +#define GERMAN38 0x03020022 +#define GERMAN39 0x03020023 +#define GERMAN40 0x03020024 +#define GERMAN41 0x03020025 +#define GERMAN42 0x03020026 +#define GERMAN43 0x03020027 +#define GERMAN45 0x03020028 +#define GERMAN47 0x03020029 +#define GERMAN48 0x0302002A +#define GERMAN49 0x0302002B +#define GERMAN50 0x0302002C +#define GERMAN54 0x0302002D +#define GERMAN55 0x0302002E +#define GERMAN56 0x0302002F +#define GERMAN57 0x03020030 +#define GERMAN58 0x03020031 +#define GERMAN59 0x03020032 +#define GERMAN60 0x03020033 +#define GERMAN61 0x03020034 +#define GERMAN63 0x03020035 +#define GERMAN65 0x03020036 +#define GERMAN66 0x03020037 +#define GERMAN69 0x03020038 +#define GERMAN71 0x03020039 +#define GERMAN72 0x0302003A +#define GERMAN73 0x0302003B +#define GERMAN74 0x0302003C +#define GERMAN90 0x0302003D +#define GERMAN99 0x0302003E +#define GERMAN129 0x0302003F +#define GERMAN131 0x03020040 +#define GERMAN133 0x03020041 +#define GERMAN145 0x03020042 +#define GERMAN146 0x03020043 + // 68 entities in TXTs, 68 in datafiles. + // italian +#define ITALIAN0 0x03030000 +#define ITALIAN1 0x03030001 +#define ITALIAN2 0x03030002 +#define ITALIAN3 0x03030003 +#define ITALIAN4 0x03030004 +#define ITALIAN5 0x03030005 +#define ITALIAN6 0x03030006 +#define ITALIAN7 0x03030007 +#define ITALIAN9 0x03030008 +#define ITALIAN11 0x03030009 +#define ITALIAN12 0x0303000A +#define ITALIAN13 0x0303000B +#define ITALIAN14 0x0303000C +#define ITALIAN15 0x0303000D +#define ITALIAN16 0x0303000E +#define ITALIAN17 0x0303000F +#define ITALIAN18 0x03030010 +#define ITALIAN19 0x03030011 +#define ITALIAN20 0x03030012 +#define ITALIAN21 0x03030013 +#define ITALIAN22 0x03030014 +#define ITALIAN23 0x03030015 +#define ITALIAN24 0x03030016 +#define ITALIAN25 0x03030017 +#define ITALIAN27 0x03030018 +#define ITALIAN28 0x03030019 +#define ITALIAN29 0x0303001A +#define ITALIAN31 0x0303001B +#define ITALIAN32 0x0303001C +#define ITALIAN33 0x0303001D +#define ITALIAN34 0x0303001E +#define ITALIAN35 0x0303001F +#define ITALIAN36 0x03030020 +#define ITALIAN37 0x03030021 +#define ITALIAN38 0x03030022 +#define ITALIAN39 0x03030023 +#define ITALIAN40 0x03030024 +#define ITALIAN41 0x03030025 +#define ITALIAN42 0x03030026 +#define ITALIAN43 0x03030027 +#define ITALIAN45 0x03030028 +#define ITALIAN47 0x03030029 +#define ITALIAN48 0x0303002A +#define ITALIAN49 0x0303002B +#define ITALIAN50 0x0303002C +#define ITALIAN54 0x0303002D +#define ITALIAN55 0x0303002E +#define ITALIAN56 0x0303002F +#define ITALIAN57 0x03030030 +#define ITALIAN58 0x03030031 +#define ITALIAN59 0x03030032 +#define ITALIAN60 0x03030033 +#define ITALIAN61 0x03030034 +#define ITALIAN63 0x03030035 +#define ITALIAN65 0x03030036 +#define ITALIAN66 0x03030037 +#define ITALIAN69 0x03030038 +#define ITALIAN71 0x03030039 +#define ITALIAN72 0x0303003A +#define ITALIAN73 0x0303003B +#define ITALIAN74 0x0303003C +#define ITALIAN90 0x0303003D +#define ITALIAN99 0x0303003E +#define ITALIAN129 0x0303003F +#define ITALIAN131 0x03030040 +#define ITALIAN133 0x03030041 +#define ITALIAN145 0x03030042 +#define ITALIAN146 0x03030043 + // 68 entities in TXTs, 68 in datafiles. + // spanish +#define SPANISH0 0x03040000 +#define SPANISH1 0x03040001 +#define SPANISH2 0x03040002 +#define SPANISH3 0x03040003 +#define SPANISH4 0x03040004 +#define SPANISH5 0x03040005 +#define SPANISH6 0x03040006 +#define SPANISH7 0x03040007 +#define SPANISH9 0x03040008 +#define SPANISH11 0x03040009 +#define SPANISH12 0x0304000A +#define SPANISH13 0x0304000B +#define SPANISH14 0x0304000C +#define SPANISH15 0x0304000D +#define SPANISH16 0x0304000E +#define SPANISH17 0x0304000F +#define SPANISH18 0x03040010 +#define SPANISH19 0x03040011 +#define SPANISH20 0x03040012 +#define SPANISH21 0x03040013 +#define SPANISH22 0x03040014 +#define SPANISH23 0x03040015 +#define SPANISH24 0x03040016 +#define SPANISH25 0x03040017 +#define SPANISH27 0x03040018 +#define SPANISH28 0x03040019 +#define SPANISH29 0x0304001A +#define SPANISH31 0x0304001B +#define SPANISH32 0x0304001C +#define SPANISH33 0x0304001D +#define SPANISH34 0x0304001E +#define SPANISH35 0x0304001F +#define SPANISH36 0x03040020 +#define SPANISH37 0x03040021 +#define SPANISH38 0x03040022 +#define SPANISH39 0x03040023 +#define SPANISH40 0x03040024 +#define SPANISH41 0x03040025 +#define SPANISH42 0x03040026 +#define SPANISH43 0x03040027 +#define SPANISH45 0x03040028 +#define SPANISH47 0x03040029 +#define SPANISH48 0x0304002A +#define SPANISH49 0x0304002B +#define SPANISH50 0x0304002C +#define SPANISH54 0x0304002D +#define SPANISH55 0x0304002E +#define SPANISH56 0x0304002F +#define SPANISH57 0x03040030 +#define SPANISH58 0x03040031 +#define SPANISH59 0x03040032 +#define SPANISH60 0x03040033 +#define SPANISH61 0x03040034 +#define SPANISH63 0x03040035 +#define SPANISH65 0x03040036 +#define SPANISH66 0x03040037 +#define SPANISH69 0x03040038 +#define SPANISH71 0x03040039 +#define SPANISH72 0x0304003A +#define SPANISH73 0x0304003B +#define SPANISH74 0x0304003C +#define SPANISH90 0x0304003D +#define SPANISH99 0x0304003E +#define SPANISH129 0x0304003F +#define SPANISH131 0x03040040 +#define SPANISH133 0x03040041 +#define SPANISH145 0x03040042 +#define SPANISH146 0x03040043 + // 68 entities in TXTs, 68 in datafiles. + // czech +#define CZECH0 0x03050000 +#define CZECH1 0x03050001 +#define CZECH2 0x03050002 +#define CZECH3 0x03050003 +#define CZECH4 0x03050004 +#define CZECH5 0x03050005 +#define CZECH6 0x03050006 +#define CZECH7 0x03050007 +#define CZECH9 0x03050008 +#define CZECH11 0x03050009 +#define CZECH12 0x0305000A +#define CZECH13 0x0305000B +#define CZECH14 0x0305000C +#define CZECH15 0x0305000D +#define CZECH16 0x0305000E +#define CZECH17 0x0305000F +#define CZECH18 0x03050010 +#define CZECH19 0x03050011 +#define CZECH20 0x03050012 +#define CZECH21 0x03050013 +#define CZECH22 0x03050014 +#define CZECH23 0x03050015 +#define CZECH24 0x03050016 +#define CZECH25 0x03050017 +#define CZECH27 0x03050018 +#define CZECH28 0x03050019 +#define CZECH29 0x0305001A +#define CZECH31 0x0305001B +#define CZECH32 0x0305001C +#define CZECH33 0x0305001D +#define CZECH34 0x0305001E +#define CZECH35 0x0305001F +#define CZECH36 0x03050020 +#define CZECH37 0x03050021 +#define CZECH38 0x03050022 +#define CZECH39 0x03050023 +#define CZECH40 0x03050024 +#define CZECH41 0x03050025 +#define CZECH42 0x03050026 +#define CZECH43 0x03050027 +#define CZECH45 0x03050028 +#define CZECH47 0x03050029 +#define CZECH48 0x0305002A +#define CZECH49 0x0305002B +#define CZECH50 0x0305002C +#define CZECH54 0x0305002D +#define CZECH55 0x0305002E +#define CZECH56 0x0305002F +#define CZECH57 0x03050030 +#define CZECH58 0x03050031 +#define CZECH59 0x03050032 +#define CZECH60 0x03050033 +#define CZECH61 0x03050034 +#define CZECH63 0x03050035 +#define CZECH65 0x03050036 +#define CZECH66 0x03050037 +#define CZECH69 0x03050038 +#define CZECH71 0x03050039 +#define CZECH72 0x0305003A +#define CZECH73 0x0305003B +#define CZECH74 0x0305003C +#define CZECH90 0x0305003D +#define CZECH99 0x0305003E +#define CZECH129 0x0305003F +#define CZECH131 0x03050040 +#define CZECH133 0x03050041 +#define CZECH145 0x03050042 +#define CZECH146 0x03050043 + // 68 entities in TXTs, ??? in datafiles. + // portugese +#define PORT0 0x03060000 +#define PORT1 0x03060001 +#define PORT2 0x03060002 +#define PORT3 0x03060003 +#define PORT4 0x03060004 +#define PORT5 0x03060005 +#define PORT6 0x03060006 +#define PORT7 0x03060007 +#define PORT9 0x03060008 +#define PORT11 0x03060009 +#define PORT12 0x0306000A +#define PORT13 0x0306000B +#define PORT14 0x0306000C +#define PORT15 0x0306000D +#define PORT16 0x0306000E +#define PORT17 0x0306000F +#define PORT18 0x03060010 +#define PORT19 0x03060011 +#define PORT20 0x03060012 +#define PORT21 0x03060013 +#define PORT22 0x03060014 +#define PORT23 0x03060015 +#define PORT24 0x03060016 +#define PORT25 0x03060017 +#define PORT27 0x03060018 +#define PORT28 0x03060019 +#define PORT29 0x0306001A +#define PORT31 0x0306001B +#define PORT32 0x0306001C +#define PORT33 0x0306001D +#define PORT34 0x0306001E +#define PORT35 0x0306001F +#define PORT36 0x03060020 +#define PORT37 0x03060021 +#define PORT38 0x03060022 +#define PORT39 0x03060023 +#define PORT40 0x03060024 +#define PORT41 0x03060025 +#define PORT42 0x03060026 +#define PORT43 0x03060027 +#define PORT45 0x03060028 +#define PORT47 0x03060029 +#define PORT48 0x0306002A +#define PORT49 0x0306002B +#define PORT50 0x0306002C +#define PORT54 0x0306002D +#define PORT55 0x0306002E +#define PORT56 0x0306002F +#define PORT57 0x03060030 +#define PORT58 0x03060031 +#define PORT59 0x03060032 +#define PORT60 0x03060033 +#define PORT61 0x03060034 +#define PORT63 0x03060035 +#define PORT65 0x03060036 +#define PORT66 0x03060037 +#define PORT69 0x03060038 +#define PORT71 0x03060039 +#define PORT72 0x0306003A +#define PORT73 0x0306003B +#define PORT74 0x0306003C +#define PORT90 0x0306003D +#define PORT99 0x0306003E +#define PORT129 0x0306003F +#define PORT131 0x03060040 +#define PORT133 0x03060041 +#define PORT145 0x03060042 +#define PORT146 0x03060043 + // 68 entities in TXTs, ??? in datafiles. +// general + // fonts +#define GAME_FONT 0x04000000 +#define OTHER_SR_FONT 0x04000001 +#define OTHER_SR_REDFONT 0x04000002 +#define SR_DEATHFONT 0x04000003 +#define CZECH_GAME_FONT 0x04000004 +#define CZECH_SR_FONT 0x04000005 +#define CZECH_SR_REDFONT 0x04000006 +#define CZECH_SR_DEATHFONT 0x04000007 + // 8 entities in TXTs, 1 in datafiles. + // pointers +#define MSE_POINTER 0x04010000 +#define MSE_OPERATE 0x04010001 +#define MSE_PICKUP 0x04010002 +#define MSE_EXAMINE 0x04010003 +#define MSE_MOUTH 0x04010004 +#define MSE_BECKON_L 0x04010005 +#define MSE_BECKON_R 0x04010006 +#define MSE_ARROW0 0x04010007 +#define MSE_ARROW1 0x04010008 +#define MSE_ARROW2 0x04010009 +#define MSE_ARROW3 0x0401000A +#define MSE_ARROW4 0x0401000B +#define MSE_ARROW5 0x0401000C +#define MSE_ARROW6 0x0401000D +#define MSE_ARROW7 0x0401000E +#define MSE_ARROW8 0x0401000F +#define MSE_ARROW9 0x04010010 + // 17 entities in TXTs, 17 in datafiles. + // luggage +#define LUGG_NEWSPAPER 0x04020000 +#define LUGG_HAZEL_WAND 0x04020001 +#define LUGG_BEER_TOWEL 0x04020002 +#define LUGG_HOTEL_KEY 0x04020003 +#define LUGG_BALL 0x04020004 +#define LUGG_STATUETTE 0x04020005 +#define LUGG_RED_NOSE 0x04020006 +#define LUGG_POLISHED_CHALICE 0x04020007 +#define LUGG_DOLLAR_BILL 0x04020008 +#define LUGG_PHOTOGRAPH 0x04020009 +#define LUGG_FLASHLIGHT 0x0402000A +#define LUGG_FUSE_WIRE 0x0402000B +#define LUGG_GEM 0x0402000C +#define LUGG_STATUETTE_PAINT 0x0402000D +#define LUGG_STICK 0x0402000E +#define LUGG_EXCAV_KEY 0x0402000F +#define LUGG_LAB_PASS 0x04020010 +#define LUGG_LIFTING_KEYS 0x04020011 +#define LUGG_MANUSCRIPT 0x04020012 +#define LUGG_MATCHBOOK 0x04020013 +#define LUGG_SUIT_MATERIAL 0x04020014 +#define LUGG_STICK_TOWEL 0x04020015 +#define LUGG_PLASTER 0x04020016 +#define LUGG_PRESSURE_GAUGE 0x04020017 +#define LUGG_RAILWAY_TICKET 0x04020018 +#define LUGG_BUZZER 0x04020019 +#define LUGG_ROSSO_CARD 0x0402001A +#define LUGG_TOILET_KEY 0x0402001B +#define LUGG_SOAP 0x0402001C +#define LUGG_STONE_KEY 0x0402001D +#define LUGG_CHALICE 0x0402001E +#define LUGG_TISSUE 0x0402001F +#define LUGG_TOILET_BRUSH 0x04020020 +#define LUGG_TOILET_CHAIN 0x04020021 +#define LUGG_TOWEL 0x04020022 +#define LUGG_TRIPOD 0x04020023 +#define LUGG_LENS 0x04020024 +#define LUGG_MIRROR 0x04020025 +#define LUGG_TOWEL_CUT 0x04020026 +#define LUGG_BIBLE 0x04020027 +#define LUGG_TISSUE_CHARRED 0x04020028 +#define LUGG_FALSE_KEY 0x04020029 +#define LUGG_KEYRING 0x0402002A +#define LUGG_SOAP_IMP 0x0402002B +#define LUGG_SOAP_PLAS 0x0402002C +#define LUGG_COG_1 0x0402002D +#define LUGG_COG_2 0x0402002E +#define LUGG_HANDLE 0x0402002F +#define LUGG_COIN 0x04020030 +#define LUGG_BIRO 0x04020031 +#define LUGG_PIPE 0x04020032 +#define LUGG_KING 0x04020033 +#define LUGG_KNIGHT 0x04020034 +#define LUGG_BISHOP 0x04020035 + // 54 entities in TXTs, 54 in datafiles. + // object_icons +#define ICON_LEFT_ARROW 0x04030000 +#define ICON_RIGHT_ARROW 0x04030001 +#define ICON_NEWSPAPER 0x04030002 +#define ICON_HAZEL_WAND 0x04030003 +#define ICON_BEER_TOWEL 0x04030004 +#define ICON_HOTEL_KEY 0x04030005 +#define ICON_BALL 0x04030006 +#define ICON_STATUETTE 0x04030007 +#define ICON_RED_NOSE 0x04030008 +#define ICON_POLISHED_CHALICE 0x04030009 +#define ICON_DOLLAR_BILL 0x0403000A +#define ICON_PHOTOGRAPH 0x0403000B +#define ICON_FLASHLIGHT 0x0403000C +#define ICON_FUSE_WIRE 0x0403000D +#define ICON_GEM 0x0403000E +#define ICON_STATUETTE_PAINT 0x0403000F +#define ICON_STICK 0x04030010 +#define ICON_EXCAV_KEY 0x04030011 +#define ICON_LAB_PASS 0x04030012 +#define ICON_LIFTING_KEYS 0x04030013 +#define ICON_MANUSCRIPT 0x04030014 +#define ICON_MATCHBOOK 0x04030015 +#define ICON_SUIT_MATERIAL 0x04030016 +#define ICON_STICK_TOWEL 0x04030017 +#define ICON_PLASTER 0x04030018 +#define ICON_PRESSURE_GAUGE 0x04030019 +#define ICON_RAILWAY_TICKET 0x0403001A +#define ICON_BUZZER 0x0403001B +#define ICON_ROSSO_CARD 0x0403001C +#define ICON_TOILET_KEY 0x0403001D +#define ICON_SOAP 0x0403001E +#define ICON_STONE_KEY 0x0403001F +#define ICON_CHALICE 0x04030020 +#define ICON_TISSUE 0x04030021 +#define ICON_TOILET_BRUSH 0x04030022 +#define ICON_TOILET_CHAIN 0x04030023 +#define ICON_TOWEL 0x04030024 +#define ICON_TRIPOD 0x04030025 +#define ICON_LENS 0x04030026 +#define ICON_MIRROR 0x04030027 +#define ICON_TOWEL_CUT 0x04030028 +#define ICON_BIBLE 0x04030029 +#define ICON_TISSUE_CHARRED 0x0403002A +#define ICON_FALSE_KEY 0x0403002B +#define ICON_KEYRING 0x0403002C +#define ICON_SOAP_IMP 0x0403002D +#define ICON_SOAP_PLAS 0x0403002E +#define ICON_COG_1 0x0403002F +#define ICON_COG_2 0x04030030 +#define ICON_HANDLE 0x04030031 +#define ICON_COIN 0x04030032 +#define ICON_BIRO 0x04030033 +#define ICON_PIPE 0x04030034 + // 53 entities in TXTs, 53 in datafiles. + // subject_icons +#define ICON_ALARM 0x04040000 +#define ICON_ARTO 0x04040001 +#define ICON_ASSASSIN 0x04040002 +#define ICON_AYUB 0x04040003 +#define ICON_BANANA 0x04040004 +#define ICON_BAPHOMET 0x04040005 +#define ICON_BEER 0x04040006 +#define ICON_BOOK 0x04040007 +#define ICON_BRIEFCASE 0x04040008 +#define ICON_BULL 0x04040009 +#define ICON_BULLS_HEAD 0x0404000A +#define ICON_BUST 0x0404000B +#define ICON_CANDLE 0x0404000C +#define ICON_CAR 0x0404000D +#define ICON_CASTLE 0x0404000E +#define ICON_CAT 0x0404000F +#define ICON_CHANTELLE 0x04040010 +#define ICON_CHESSBOARD 0x04040011 +#define ICON_CHESS_SET 0x04040012 +#define ICON_CHURCH 0x04040013 +#define ICON_CLOWN 0x04040014 +#define ICON_CLUB 0x04040015 +#define ICON_COINS 0x04040016 +#define ICON_COUNTESS 0x04040017 +#define ICON_CREST 0x04040018 +#define ICON_DIG 0x04040019 +#define ICON_DOG 0x0404001A +#define ICON_DUANE 0x0404001B +#define ICON_EKLUND 0x0404001C +#define ICON_ERIC 0x0404001D +#define ICON_FISH 0x0404001E +#define ICON_FLOWERS 0x0404001F +#define ICON_FORTUNE 0x04040020 +#define ICON_GEORGE 0x04040021 +#define ICON_GHOST 0x04040022 +#define ICON_GLASS_EYE 0x04040023 +#define ICON_GOAT 0x04040024 +#define ICON_GOODBYE 0x04040025 +#define ICON_GUARD 0x04040026 +#define ICON_HASH 0x04040027 +#define ICON_HENDERSONS 0x04040028 +#define ICON_JACKET 0x04040029 +#define ICON_JUGGLER 0x0404002A +#define ICON_KLAUSNER 0x0404002B +#define ICON_KNIGHT 0x0404002C +#define ICON_LADDER 0x0404002D +#define ICON_LEARY 0x0404002E +#define ICON_LEPRECHAUN 0x0404002F +#define ICON_LIE 0x04040030 +#define ICON_LOBINEAU 0x04040031 +#define ICON_MARQUET 0x04040032 +#define ICON_MARY 0x04040033 +#define ICON_MOB 0x04040034 +#define ICON_MONTFAUCON 0x04040035 +#define ICON_MOUE 0x04040036 +#define ICON_MR_SHINY 0x04040037 +#define ICON_NEJO 0x04040038 +#define ICON_NEJO_STALL 0x04040039 +#define ICON_NICO 0x0404003A +#define ICON_NO 0x0404003B +#define ICON_NURSE 0x0404003C +#define ICON_PACKAGE 0x0404003D +#define ICON_PAINTER 0x0404003E +#define ICON_PEAGRAM 0x0404003F +#define ICON_PEARL 0x04040040 +#define ICON_PHILIPPE 0x04040041 +#define ICON_PHONE 0x04040042 +#define ICON_PHRASE 0x04040043 +#define ICON_PIERMONT 0x04040044 +#define ICON_PLANTARD 0x04040045 +#define ICON_POTS 0x04040046 +#define ICON_PRIEST 0x04040047 +#define ICON_QUEEN 0x04040048 +#define ICON_RENEE 0x04040049 +#define ICON_ROSSO 0x0404004A +#define ICON_ROZZER 0x0404004B +#define ICON_SAFE 0x0404004C +#define ICON_SCROLL 0x0404004D +#define ICON_SEAN 0x0404004E +#define ICON_SIGN 0x0404004F +#define ICON_TAXI 0x04040050 +#define ICON_TEMPLARS 0x04040051 +#define ICON_THERMOSTAT 0x04040052 +#define ICON_TOILET 0x04040053 +#define ICON_TOMB 0x04040054 +#define ICON_TOOLBOX 0x04040055 +#define ICON_TRUTH 0x04040056 +#define ICON_ULTAR 0x04040057 +#define ICON_WEASEL 0x04040058 +#define ICON_WEAVER 0x04040059 +#define ICON_WELL 0x0404005A +#define ICON_WELL2 0x0404005B +#define ICON_WINDOW 0x0404005C +#define ICON_YES 0x0404005D + // 94 entities in TXTs, 94 in datafiles. + // save_menu +#define SR_FONT 0x04050000 +#define SR_BUTTON 0x04050001 +#define SR_REDFONT 0x04050002 +#define SR_PALETTE 0x04050003 +#define SR_PANEL_ENGLISH 0x04050004 +#define SR_PANEL_FRENCH 0x04050005 +#define SR_PANEL_GERMAN 0x04050006 +#define SR_PANEL_ITALIAN 0x04050007 +#define SR_PANEL_SPANISH 0x04050008 +#define SR_PANEL_AMERICAN 0x04050009 +#define SR_TEXT_BUTTON 0x0405000A +#define SR_SPEED 0x0405000B +#define SR_SCROLL1 0x0405000C +#define SR_SCROLL2 0x0405000D +#define SR_CONFIRM 0x0405000E +#define SR_VOLUME 0x0405000F +#define SR_VLIGHT 0x04050010 +#define SR_VKNOB 0x04050011 +#define SR_WINDOW 0x04050012 +#define SR_SLAB1 0x04050013 +#define SR_SLAB2 0x04050014 +#define SR_SLAB3 0x04050015 +#define SR_SLAB4 0x04050016 +#define SR_BUTUF 0x04050017 +#define SR_BUTUS 0x04050018 +#define SR_BUTDS 0x04050019 +#define SR_BUTDF 0x0405001A +#define SR_DEATHPANEL 0x0405001B // 0x04050019 + // 26 entities in TXTs, 29 in datafiles. + // george +#define GEORGE_MEGA 0x04060000 +#define GEORGE_WLK 0x04060001 +#define GEOSHO1 0x04060002 +#define GEOSHO1CDT 0x04060003 +#define GEOSHO1CDR 0x04060004 +#define GEOSHO2 0x04060005 +#define GEOSHO2CDT 0x04060006 +#define GEOSHO2CDR 0x04060007 +#define GEOSHO3 0x04060008 +#define GEOSHO3CDT 0x04060009 +#define GEOSHO3CDR 0x0406000A +#define GEOSHO5 0x0406000B +#define GEOSHO5CDT 0x0406000C +#define GEOSHO5CDR 0x0406000D +#define GEOSHO6 0x0406000E +#define GEOSHO6CDT 0x0406000F +#define GEOSHO6CDR 0x04060010 +#define GEOSHO7 0x04060011 +#define GEOSHO7CDT 0x04060012 +#define GEOSHO7CDR 0x04060013 +#define GEOTLK0 0x04060014 +#define GEOTLK0CDT 0x04060015 +#define GEOTLK1 0x04060016 +#define GEOTLK1CDT 0x04060017 +#define GEOTLK2 0x04060018 +#define GEOTLK2CDT 0x04060019 +#define GEOTLK3 0x0406001A +#define GEOTLK3CDT 0x0406001B +#define GEOTLK4 0x0406001C +#define GEOTLK4CDT 0x0406001D +#define GEOTLK5 0x0406001E +#define GEOTLK5CDT 0x0406001F +#define GEOTLK6 0x04060020 +#define GEOTLK6CDT 0x04060021 +#define GEOTLK7 0x04060022 +#define GEOTLK7CDT 0x04060023 +#define XGEOCRW0 0x04060024 +#define XGEOCRW0CDT 0x04060025 +#define XGEOCRW0CDR 0x04060026 +#define XGEOCRW1 0x04060027 +#define XGEOCRW1CDT 0x04060028 +#define XGEOCRW1CDR 0x04060029 +#define XGEOCRW2 0x0406002A +#define XGEOCRW2CDT 0x0406002B +#define XGEOCRW2CDR 0x0406002C +#define XGEOCRW3 0x0406002D +#define XGEOCRW3CDT 0x0406002E +#define XGEOCRW3CDR 0x0406002F +#define XGEOCRW4 0x04060030 +#define XGEOCRW4CDT 0x04060031 +#define XGEOCRW4CDR 0x04060032 +#define XGEOCRW5 0x04060033 +#define XGEOCRW5CDT 0x04060034 +#define XGEOCRW5CDR 0x04060035 +#define XGEOCRW6 0x04060036 +#define XGEOCRW6CDT 0x04060037 +#define XGEOCRW6CDR 0x04060038 +#define XGEOCRW7 0x04060039 +#define XGEOCRW7CDT 0x0406003A +#define XGEOCRW7CDR 0x0406003B +#define XGEOGIV0 0x0406003C +#define XGEOGIV0CDT 0x0406003D +#define XGEOGIV0CDR 0x0406003E +#define XGEOGIV1 0x0406003F +#define XGEOGIV1CDT 0x04060040 +#define XGEOGIV1CDR 0x04060041 +#define XGEOGIV2 0x04060042 +#define XGEOGIV2CDT 0x04060043 +#define XGEOGIV2CDR 0x04060044 +#define XGEOGIV3 0x04060045 +#define XGEOGIV3CDT 0x04060046 +#define XGEOGIV3CDR 0x04060047 +#define XGEOGIV4 0x04060048 +#define XGEOGIV4CDT 0x04060049 +#define XGEOGIV4CDR 0x0406004A +#define XGEOGIV5 0x0406004B +#define XGEOGIV5CDT 0x0406004C +#define XGEOGIV5CDR 0x0406004D +#define XGEOGIV6 0x0406004E +#define XGEOGIV6CDT 0x0406004F +#define XGEOGIV6CDR 0x04060050 +#define XGEOGIV7 0x04060051 +#define XGEOGIV7CDT 0x04060052 +#define XGEOGIV7CDR 0x04060053 +#define XGEOLUK3 0x04060054 +#define XGEOLUK3CDT 0x04060055 +#define XGEOLUK5 0x04060056 +#define XGEOLUK5CDT 0x04060057 +#define XGEOPIC0 0x04060058 +#define XGEOPIC0CDT 0x04060059 +#define XGEOPIC1 0x0406005A +#define XGEOPIC1CDT 0x0406005B +#define XGEOPIC2 0x0406005C +#define XGEOPIC2CDT 0x0406005D +#define XGEOPIC3 0x0406005E +#define XGEOPIC3CDT 0x0406005F +#define XGEOPIC4 0x04060060 +#define XGEOPIC4CDT 0x04060061 +#define XGEOPIC5 0x04060062 +#define XGEOPIC5CDT 0x04060063 +#define XGEOPIC6 0x04060064 +#define XGEOPIC6CDT 0x04060065 +#define XGEOPIC7 0x04060066 +#define XGEOPIC7CDT 0x04060067 +#define XGEOSHG0 0x04060068 +#define XGEOSHG0CDT 0x04060069 +#define XGEOSHG1 0x0406006A +#define XGEOSHG1CDT 0x0406006B +#define XGEOSHG2 0x0406006C +#define XGEOSHG2CDT 0x0406006D +#define XGEOSHG3 0x0406006E +#define XGEOSHG3CDT 0x0406006F +#define XGEOSHG4 0x04060070 +#define XGEOSHG4CDT 0x04060071 +#define XGEOSHG5 0x04060072 +#define XGEOSHG5CDT 0x04060073 +#define XGEOSHG6 0x04060074 +#define XGEOSHG6CDT 0x04060075 +#define XGEOSHG7 0x04060076 +#define XGEOSHG7CDT 0x04060077 +#define XGHAIR2 0x04060078 +#define XGHAIR2CDT 0x04060079 +#define XGHAIR6 0x0406007A +#define XGHAIR6CDT 0x0406007B +#define GEOBLNK2 0x0406007C +#define GEOBLNK2CDT 0x0406007D +#define GEOBLNK3 0x0406007E +#define GEOBLNK3CDT 0x0406007F +#define GEOBLNK4 0x04060080 +#define GEOBLNK4CDT 0x04060081 +#define GEOBLNK5 0x04060082 +#define GEOBLNK5CDT 0x04060083 +#define GEOBLNK6 0x04060084 +#define GEOBLNK6CDT 0x04060085 +#define XGRELAX0 0x04060086 +#define XGRELAX0CDT 0x04060087 +#define XGRELAX0CDR 0x04060088 +#define XGRELAX1 0x04060089 +#define XGRELAX1CDT 0x0406008A +#define XGRELAX1CDR 0x0406008B +#define XGRELAX2 0x0406008C +#define XGRELAX2CDT 0x0406008D +#define XGRELAX2CDR 0x0406008E +#define XGRELAX3 0x0406008F +#define XGRELAX3CDT 0x04060090 +#define XGRELAX3CDR 0x04060091 +#define XGRELAX4 0x04060092 +#define XGRELAX4CDT 0x04060093 +#define XGRELAX4CDR 0x04060094 +#define XGRELAX5 0x04060095 +#define XGRELAX5CDT 0x04060096 +#define XGRELAX5CDR 0x04060097 +#define XGRELAX6 0x04060098 +#define XGRELAX6CDT 0x04060099 +#define XGRELAX6CDR 0x0406009A +#define XGRELAX7 0x0406009B +#define XGRELAX7CDT 0x0406009C +#define XGRELAX7CDR 0x0406009D + // 158 entities in TXTs, 158 in datafiles. + // nico +#define MEGANICO 0x04070000 +#define NICO_WLK 0x04070001 +#define NICTLK0 0x04070002 +#define NICTLK0CDT 0x04070003 +#define NICTLK1 0x04070004 +#define NICTLK1CDT 0x04070005 +#define NICTLK2 0x04070006 +#define NICTLK2CDT 0x04070007 +#define NICTLK3 0x04070008 +#define NICTLK3CDT 0x04070009 +#define NICTLK4 0x0407000A +#define NICTLK4CDT 0x0407000B +#define NICTLK5 0x0407000C +#define NICTLK5CDT 0x0407000D +#define NICTLK6 0x0407000E +#define NICTLK6CDT 0x0407000F +#define NICTLK7 0x04070010 +#define NICTLK7CDT 0x04070011 + // 18 entities in TXTs, 18 in datafiles. +// maps + // room80 +#define room80_PAL 0x05000000 +#define room80_l0 0x05000001 +#define TEST_FLR 0x05000002 +#define SPRITE_PAL 0x05000003 +#define AEROPORTCDT 0x05000004 +#define AEROPORT 0x05000005 +#define APRTSTRTCDT 0x05000006 +#define APRTSTRT 0x05000007 +#define BAPHOMETCDT 0x05000008 +#define BAPHOMET 0x05000009 +#define CAFECDT 0x0500000A +#define CAFE 0x0500000B +#define COSTUMESCDT 0x0500000C +#define COSTUMES 0x0500000D +#define HOSPITALCDT 0x0500000E +#define HOSPITAL 0x0500000F +#define HOTELCDT 0x05000010 +#define HOTEL 0x05000011 +#define MONTFACNCDT 0x05000012 +#define MONTFACN 0x05000013 +#define MUSEUMCDT 0x05000014 +#define MUSEUM 0x05000015 +#define POLICECDT 0x05000016 +#define POLICE 0x05000017 + // 24 entities in TXTs, 24 in datafiles. + // room86 +#define room86_PAL 0x05010000 +#define room86_l0 0x05010001 +#define BANNOCKCDT 0x05010002 +#define BANNOCK 0x05010003 +#define MARIBCDT 0x05010004 +#define MARIB 0x05010005 +#define LOCHMARNCDT 0x05010006 +#define LOCHMARN 0x05010007 +#define PARISCDT 0x05010008 +#define PARIS 0x05010009 +#define VILLAVASCDT 0x0501000A +#define VILLAVAS 0x0501000B + // 12 entities in TXTs, 12 in datafiles. + // room90 +#define R90L0 0x05020000 +#define R90PAL 0x05020001 +#define PHONE_PAL 0x05020002 +#define GBLINK 0x05020003 +#define GBLINKCDT 0x05020004 +#define GRISE 0x05020005 +#define GRISECDT 0x05020006 +#define GRISECDR 0x05020007 +#define GTALK 0x05020008 +#define GTALKCDT 0x05020009 +#define NBLINK 0x0502000A +#define NBLINKCDT 0x0502000B +#define NRISE 0x0502000C +#define NRISECDT 0x0502000D +#define NRISECDR 0x0502000E +#define NTALK 0x0502000F +#define NTALKCDT 0x05020010 +#define TODTALK 0x05020011 +#define TODTALKCDT 0x05020012 + // 19 entities in TXTs, 19 in datafiles. + // room91 +#define R91L0 0x05030000 +#define R91PAL 0x05030001 +#define CLOWN 0x05030002 +#define CLOWNCDT 0x05030003 +#define DESVAS 0x05030004 +#define DESVASCDT 0x05030005 +#define EIFTOWER 0x05030006 +#define EIFTOWERCDT 0x05030007 +#define HORSETIP 0x05030008 +#define HORSETIPCDT 0x05030009 +#define LOBIN91 0x0503000A +#define LOBIN91CDT 0x0503000B +#define MONTFCON 0x0503000C +#define MONTFCONCDT 0x0503000D +#define NICOADD 0x0503000E +#define NICOADDCDT 0x0503000F +#define NICOPHN 0x05030010 +#define NICOPHNCDT 0x05030011 +#define TAILOR 0x05030012 +#define TAILORCDT 0x05030013 + // 20 entities in TXTs, 20 in datafiles. + // room99 +#define room99_PAL 0x05040000 +#define room99_l0 0x05040001 + // 2 entities in TXTs, 2 in datafiles. +// paris_1 + // sound_fx +#define FX_CAMERA1 0x06000000 +#define FX_CAMERA2 0x06000001 +#define FX_CAMERA3 0x06000002 +#define FX_CANDO 0x06000003 +#define FX_CANUP 0x06000004 +#define FX_CAW1 0x06000005 +#define FX_DUST 0x06000006 +#define FX_HORN1 0x06000007 +#define FX_HORN2 0x06000008 +#define FX_HORN3 0x06000009 +#define FX_LVSFLY 0x0600000A +#define FX_PAP1 0x0600000B +#define FX_PAP2 0x0600000C +#define FX_PICK1 0x0600000D +#define FX_PICK2 0x0600000E +#define FX_PICK3 0x0600000F +#define FX_PICK4 0x06000010 +#define FX_PICK5 0x06000011 +#define FX_TRAFFIC2 0x06000012 +#define FX_TWEET1 0x06000013 +#define FX_TWEET2 0x06000014 +#define FX_TWEET3 0x06000015 +#define FX_TWEET4 0x06000016 +#define FX_TWEET5 0x06000017 +#define FX_BIN1 0x06000018 +#define FX_BIN2 0x06000019 +#define FX_BIN3 0x0600001A +#define FX_CAT 0x0600001B +#define FX_COVERON2 0x0600001C +#define FX_CRATE 0x0600001D +#define FX_DRAIN 0x0600001E +#define FX_HOLE 0x0600001F +#define FX_BODY 0x06000020 +#define FX_BOTDN 0x06000021 +#define FX_BOTUP 0x06000022 +#define FX_GULP 0x06000023 +#define FX_LIGHT 0x06000024 +#define FX_PIKUP 0x06000025 +#define FX_PAP3 0x06000026 +#define FX_PAP4 0x06000027 +#define FX_PAP5 0x06000028 +#define FX_PISTOL 0x06000029 +#define FX_TBOX 0x0600002A +#define FX_KNOKKNOK 0x0600002B +#define FX_ALBCLO 0x0600002C +#define FX_ALBOP 0x0600002D +#define FX_LADD1 0x0600002E +#define FX_LADD2 0x0600002F +#define FX_LADD3 0x06000030 +#define FX_RAT1 0x06000031 +#define FX_RAT2 0x06000032 +#define FX_SEWSTEP1 0x06000033 +#define FX_SEWSTEP2 0x06000034 +#define FX_SWATER3 0x06000035 +#define FX_DRIP1 0x06000036 +#define FX_DRIP2 0x06000037 +#define FX_DRIP3 0x06000038 +#define FX_SWATER1 0x06000039 +#define FX_SEWLADD7 0x0600003A +#define FX_SEWLADU7 0x0600003B + // 60 entities in TXTs, 60 in datafiles. + // room1 +#define PARIS1_PAL 0x06010000 +#define room1_PAL 0x06010001 +#define room1_l0 0x06010002 +#define room1_l1 0x06010003 +#define room1_l2 0x06010004 +#define room1_gd1 0x06010005 +#define room1_gd2 0x06010006 +#define room1_flr 0x06010007 +#define room1_plx 0x06010008 +#define BIRDS 0x06010009 +#define BIRDSCDT 0x0601000A +#define BIRDSA 0x0601000B +#define BIRDSACDT 0x0601000C +#define BIRDSB 0x0601000D +#define BIRDSBCDT 0x0601000E +#define BIRDSC 0x0601000F +#define BIRDSCCDT 0x06010010 +#define BIRDSD 0x06010011 +#define BIRDSDCDT 0x06010012 +#define BIRDSE 0x06010013 +#define BIRDSECDT 0x06010014 +#define BIRDSF 0x06010015 +#define BIRDSFCDT 0x06010016 +#define BIRDSG 0x06010017 +#define BIRDSGCDT 0x06010018 +#define BIRDSH 0x06010019 +#define BIRDSHCDT 0x0601001A +#define BIRDSI 0x0601001B +#define BIRDSICDT 0x0601001C +#define CANOPY 0x0601001D +#define CANOPYCDT 0x0601001E +#define GEOCAN 0x0601001F +#define GEOCANCDT 0x06010020 +#define GEONIC 0x06010021 +#define GEONICCDT 0x06010022 +#define GEOPAP 0x06010023 +#define GEOPAPCDT 0x06010024 +#define GEOPAP2 0x06010025 +#define GEOPAP2CDT 0x06010026 +#define LVSFLY 0x06010027 +#define LVSFLYCDT 0x06010028 +#define MOUGRD 0x06010029 +#define MOUGRDCDT 0x0601002A +#define MOUTLK01 0x0601002B +#define MOUTLK01CDT 0x0601002C +#define MOUWLK01 0x0601002D +#define MOUWLK01CDT 0x0601002E +#define NICPHT1CDT 0x0601002F +#define NICPHT1 0x06010030 +#define NICPHT2CDT 0x06010031 +#define NICPHT2 0x06010032 +#define NICPHT3CDT 0x06010033 +#define NICPHT3 0x06010034 +#define NICPHT5CDT 0x06010035 +#define NICPHT5 0x06010036 +#define NICPHT6CDT 0x06010037 +#define NICPHT6 0x06010038 +#define NICPHT7CDT 0x06010039 +#define NICPHT7 0x0601003A +#define NICWLK01 0x0601003B +#define NICWLK01CDT 0x0601003C +#define NWPAPER 0x0601003D +#define NWPAPERCDT 0x0601003E +#define WRKDIG01 0x0601003F +#define WRKDIG01CDT 0x06010040 +#define XGEOPHN3 0x06010041 +#define XGEOPHN3CDT 0x06010042 +#define XGEOPHN5 0x06010043 +#define XGEOPHN5CDT 0x06010044 +#define XNICPHN3CDT 0x06010045 +#define XNICPHN3 0x06010046 +#define XNICPHN5CDT 0x06010047 +#define XNICPHN5 0x06010048 + // 73 entities in TXTs, 73 in datafiles. + // room2 +#define room2_PAL 0x06020000 +#define room2_l0 0x06020001 +#define room2_l1 0x06020002 +#define room2_l2 0x06020003 +#define room2_gd1 0x06020004 +#define room2_gd2 0x06020005 +#define room2_flr 0x06020006 +#define BIN1 0x06020007 +#define BIN1CDT 0x06020008 +#define BIN2 0x06020009 +#define BIN2CDT 0x0602000A +#define BIN3 0x0602000B +#define BIN3CDT 0x0602000C +#define CATJMP 0x0602000D +#define CATJMPCDT 0x0602000E +#define CRATE 0x0602000F +#define CRATECDT 0x06020010 +#define DRNBRK 0x06020011 +#define DRNBRKCDT 0x06020012 +#define GEOBIN 0x06020013 +#define GEOBINCDT 0x06020014 +#define GEOBOX 0x06020015 +#define GEOBOXCDT 0x06020016 +#define GEOBRS 0x06020017 +#define GEOBRSCDT 0x06020018 +#define GEOCAT 0x06020019 +#define GEOCATCDT 0x0602001A +#define GEOCATE 0x0602001B +#define GEOCATECDT 0x0602001C +#define GEOCLM02 0x0602001D +#define GEOCLM02CDT 0x0602001E +#define GEOCRT 0x0602001F +#define GEOCRTCDT 0x06020020 +#define GEODWN 0x06020021 +#define GEODWNCDT 0x06020022 +#define GEOLID 0x06020023 +#define GEOLIDCDT 0x06020024 +#define GEOLIDCDR 0x06020025 +#define GEOMAN8 0x06020026 +#define GEOMAN8CDT 0x06020027 +#define GEOMAN9 0x06020028 +#define GEOMAN9CDT 0x06020029 +#define GEOOUT 0x0602002A +#define GEOOUTCDT 0x0602002B +#define GEOPLL02 0x0602002C +#define GEOPLL02CDT 0x0602002D +#define GEOTRY02 0x0602002E +#define GEOTRY02CDT 0x0602002F +#define MANCOV 0x06020030 +#define MANCOVCDT 0x06020031 +#define MANCVOFF 0x06020032 +#define MANCVOFFCDT 0x06020033 + // 52 entities in TXTs, 52 in datafiles. + // room3 +#define room3_PAL 0x06030000 +#define room3_l0 0x06030001 +#define room3_l1 0x06030002 +#define room3_l2 0x06030003 +#define room3_gd1 0x06030004 +#define room3_gd2 0x06030005 +#define room3_flr 0x06030006 +#define BOTTLE 0x06030007 +#define BOTTLECDT 0x06030008 +#define BOTTLE1 0x06030009 +#define BOTTLE1CDT 0x0603000A +#define CHNDRN 0x0603000B +#define CHNDRNCDT 0x0603000C +#define CHNFNT 0x0603000D +#define CHNFNTCDT 0x0603000E +#define CHNSITA 0x0603000F +#define CHNSITACDT 0x06030010 +#define CHNSIT 0x06030011 +#define CHNSITCDT 0x06030012 +#define CHNTLK 0x06030013 +#define CHNTLKCDT 0x06030014 +#define CHNUPP 0x06030015 +#define CHNUPPCDT 0x06030016 +#define CHNUPPCDR 0x06030017 +#define CORPSE 0x06030018 +#define CORPSECDT 0x06030019 +#define FLICKER 0x0603001A +#define FLICKERCDT 0x0603001B +#define GEOBOT3 0x0603001C +#define GEOBOT3CDT 0x0603001D +#define GEOCARD3 0x0603001E +#define GEOCARD3CDT 0x0603001F +#define GEOCHN 0x06030020 +#define GEOCHNCDT 0x06030021 +#define GEOCPS 0x06030022 +#define GEOCPSCDT 0x06030023 +#define GEOCPSCDR 0x06030024 +#define MOUCHN 0x06030025 +#define MOUCHNCDT 0x06030026 +#define MOUCHN8 0x06030027 +#define MOUCHN8CDT 0x06030028 +#define MOUCPS 0x06030029 +#define MOUCPSCDT 0x0603002A +#define MOUCPSTK 0x0603002B +#define MOUCPSTKCDT 0x0603002C +#define MOUDOR03 0x0603002D +#define MOUDOR03CDT 0x0603002E +#define MOUROS 0x0603002F +#define MOUROSCDT 0x06030030 +#define MOUROS1 0x06030031 +#define MOUROS1CDT 0x06030032 +#define MOUROS1CDR 0x06030033 +#define MOUROS2 0x06030034 +#define MOUROS2CDT 0x06030035 +#define MOUSTD 0x06030036 +#define MOUSTDCDT 0x06030037 +#define MOUTALK 0x06030038 +#define MOUTALKCDT 0x06030039 +#define MOUTLK1 0x0603003A +#define MOUTLK1CDT 0x0603003B +#define MOUTRN03 0x0603003C +#define MOUTRN03CDT 0x0603003D +#define MOUTRN03CDR 0x0603003E +#define MOUTRN2 0x0603003F +#define MOUTRN2CDT 0x06030040 +#define MOUTRN2CDR 0x06030041 +#define MOUWLK 0x06030042 +#define MOUWLKCDT 0x06030043 +#define MOUWLK03 0x06030044 +#define MOUWLK03CDT 0x06030045 +#define ROSCARD 0x06030046 +#define ROSCARDCDT 0x06030047 +#define ROSCHN 0x06030048 +#define ROSCHNCDT 0x06030049 +#define ROSCHNCDR 0x0603004A +#define ROSGEO 0x0603004B +#define ROSGEOCDT 0x0603004C +#define ROSGEOA 0x0603004D +#define ROSGEOACDT 0x0603004E +#define ROSGEOB 0x0603004F +#define ROSGEOBCDT 0x06030050 +#define ROSGEOC 0x06030051 +#define ROSGEOCCDT 0x06030052 +#define ROSLIK 0x06030053 +#define ROSLIKCDT 0x06030054 +#define ROSLUK 0x06030055 +#define ROSLUKCDT 0x06030056 +#define ROSMOU 0x06030057 +#define ROSMOUCDT 0x06030058 +#define ROSNBK 0x06030059 +#define ROSNBKCDT 0x0603005A +#define ROSNBK8 0x0603005B +#define ROSNBK8CDT 0x0603005C +#define ROSPKT 0x0603005D +#define ROSPKTCDT 0x0603005E +#define ROSTMP 0x0603005F +#define ROSTMPCDT 0x06030060 +#define ROSTMP8 0x06030061 +#define ROSTMP8CDT 0x06030062 +#define ROSTURNA 0x06030063 +#define ROSTURNACDT 0x06030064 +#define ROSTURNB 0x06030065 +#define ROSTURNBCDT 0x06030066 +#define ROSTRN2 0x06030067 +#define ROSTRN2CDT 0x06030068 +#define ROSWRT 0x06030069 +#define ROSWRTCDT 0x0603006A + // 107 entities in TXTs, 107 in datafiles. + // room4 +#define room4_PAL 0x06040000 +#define room4_l0 0x06040001 +#define room4_l1 0x06040002 +#define room4_l2 0x06040003 +#define room4_gd1 0x06040004 +#define room4_gd2 0x06040005 +#define room4_flr 0x06040006 +#define ALBDOR 0x06040007 +#define ALBDORCDR 0x06040008 +#define ALBDORCDT 0x06040009 +#define ALBDOR8 0x0604000A +#define ALBDOR8CDT 0x0604000B +#define GEONOK 0x0604000C +#define GEONOKCDT 0x0604000D +#define GEONOKCDR 0x0604000E +#define GEOTBX 0x0604000F +#define GEOTBXCDT 0x06040010 +#define GEOWRK 0x06040011 +#define GEOWRKCDT 0x06040012 +#define GEOWRK8 0x06040013 +#define GEOWRK8CDT 0x06040014 +#define MOUENT 0x06040015 +#define MOUENTCDT 0x06040016 +#define MOUSHG 0x06040017 +#define MOUSHGCDT 0x06040018 +#define MOUSTR 0x06040019 +#define MOUSTRCDT 0x0604001A +#define MOUTLK04 0x0604001B +#define MOUTLK04CDT 0x0604001C +#define MOUWLK04 0x0604001D +#define MOUWLK04CDT 0x0604001E +#define ROSENT 0x0604001F +#define ROSENTCDT 0x06040020 +#define ROSTLK04 0x06040021 +#define ROSTLK04CDT 0x06040022 +#define ROSWLK 0x06040023 +#define ROSWLKCDT 0x06040024 +#define PHONE4 0x06040025 +#define PHONE4CDT 0x06040026 +#define WRKAXE 0x06040027 +#define WRKAXECDT 0x06040028 +#define WRKBLINK 0x06040029 +#define WRKBLINKCDT 0x0604002A +#define WRKCLM 0x0604002B +#define WRKCLMCDT 0x0604002C +#define WRKDIG 0x0604002D +#define WRKDIGCDT 0x0604002E +#define WRKPPR 0x0604002F +#define WRKPPRCDT 0x06040030 +#define WRKTLK 0x06040031 +#define WRKTLKCDT 0x06040032 +#define WRKTLK8 0x06040033 +#define WRKTLK8CDT 0x06040034 +#define WRKTLK9 0x06040035 +#define WRKTLK9CDT 0x06040036 +#define WRKTRN 0x06040037 +#define WRKTRNCDR 0x06040038 +#define WRKTRNCDT 0x06040039 +#define WRKXIT 0x0604003A +#define WRKXITCDT 0x0604003B + // 60 entities in TXTs, 60 in datafiles. + // room5 +#define room5_PAL 0x06050000 +#define room5_l0 0x06050001 +#define room5_l1 0x06050002 +#define room5_l2 0x06050003 +#define room5_gd1 0x06050004 +#define room5_gd2 0x06050005 +#define room5_flr 0x06050006 +#define ALBAPT 0x06050007 +#define ALBAPTCDT 0x06050008 +#define ALBAPTCDR 0x06050009 +#define ALBCLOSECDT 0x0605000A +#define ALBCLOSE 0x0605000B +#define ALBCRD8 0x0605000C +#define ALBCRD8CDT 0x0605000D +#define ALBDORTKCDT 0x0605000E +#define ALBDORTK 0x0605000F +#define ALBDRTK2CDT 0x06050010 +#define ALBDRTK2 0x06050011 +#define ALBHND 0x06050012 +#define ALBHNDCDT 0x06050013 +#define ALBOBJ 0x06050014 +#define ALBOBJCDT 0x06050015 +#define ALBOPENCDT 0x06050016 +#define ALBOPEN 0x06050017 +#define ALBPKT 0x06050018 +#define ALBPKTCDT 0x06050019 +#define ALBTLK 0x0605001A +#define ALBTLKCDT 0x0605001B +#define ALBWLK9CDT 0x0605001C +#define ALBWLK9 0x0605001D +#define GEOCRD05 0x0605001E +#define GEOCRD05CDT 0x0605001F +#define GEODOR05CDT 0x06050020 +#define GEODOR05 0x06050021 +#define GEOEMG 0x06050022 +#define GEOEMGCDT 0x06050023 +#define GEOEMGCDR 0x06050024 +#define GEOEMGA 0x06050025 +#define GEOEMGACDT 0x06050026 +#define GEOEMGACDR 0x06050027 +#define GEOEMGB 0x06050028 +#define GEOEMGBCDT 0x06050029 +#define GEOEMGBCDR 0x0605002A +#define GEOEXITCDT 0x0605002B +#define GEOEXIT 0x0605002C +#define GEOHND05 0x0605002D +#define GEOHND05CDT 0x0605002E +#define GEONOK05CDT 0x0605002F +#define GEONOK05 0x06050030 +#define GEOTLK05 0x06050031 +#define GEOTLK05CDT 0x06050032 + // 51 entities in TXTs, 51 in datafiles. + // room6 +#define SEWER_PAL 0x06060000 +#define room6_PAL 0x06060001 +#define room6_l0 0x06060002 +#define room6_l1 0x06060003 +#define room6_gd1 0x06060004 +#define room6_flr 0x06060005 +#define GEOASC06 0x06060006 +#define GEOASC06CDT 0x06060007 +#define GEODES06 0x06060008 +#define GEODES06CDT 0x06060009 +#define GEONOSE 0x0606000A +#define GEONOSECDT 0x0606000B +#define REDNOSE 0x0606000C +#define REDNOSECDT 0x0606000D +#define WATER06 0x0606000E +#define WATER06CDT 0x0606000F + // 16 entities in TXTs, 16 in datafiles. + // room7 +#define room7_PAL 0x06070000 +#define room7_l0 0x06070001 +#define room7_l1 0x06070002 +#define room7_l2 0x06070003 +#define room7_gd1 0x06070004 +#define room7_gd2 0x06070005 +#define room7_flr 0x06070006 +#define GEOASC07 0x06070007 +#define GEOASC07CDT 0x06070008 +#define GEOASC07CDR 0x06070009 +#define GEOPLL07 0x0607000A +#define GEOPLL07CDT 0x0607000B +#define GEOPLL07CDR 0x0607000C +#define GEOSPK 0x0607000D +#define GEOSPKCDT 0x0607000E +#define GEOTIS 0x0607000F +#define GEOTISCDT 0x06070010 +#define MATERIAL 0x06070011 +#define MATERIALCDT 0x06070012 +#define TISSUE7 0x06070013 +#define TISSUE7CDT 0x06070014 +#define WATER07 0x06070015 +#define WATER07CDT 0x06070016 + // 23 entities in TXTs, 23 in datafiles. + // room8 +#define room8_PAL 0x06080000 +#define room8_l0 0x06080001 +#define room8_l1 0x06080002 +#define room8_l2 0x06080003 +#define room8_gd1 0x06080004 +#define room8_gd2 0x06080005 +#define room8_flr 0x06080006 +#define room8_plx 0x06080007 + // 8 entities in TXTs, 8 in datafiles. +// paris_2 + // sound_fx +#define FX_BIRD 0x07000000 +#define FX_BIRD2 0x07000001 +#define FX_CARLTON 0x07000002 +#define FX_CARS 0x07000003 +#define FX_DOORTRY 0x07000004 +#define FX_FIESTA 0x07000005 +#define FX_FLATDOOR 0x07000006 +#define FX_HVYVEHL 0x07000007 +#define FX_HVYVEHR 0x07000008 +#define FX_LITEVEHL 0x07000009 +#define FX_LITEVEHR 0x0700000A +#define FX_FONEUP 0x0700000B +#define FX_FONEDN 0x0700000C +#define FX_GEOCCH 0x0700000D +#define FX_GEOCHAIR 0x0700000E +#define FX_GEOCHR9 0x0700000F +#define FX_NICOPEN 0x07000010 +#define FX_NICLOSE 0x07000011 +#define FX_PHONICO1 0x07000012 +#define FX_GRAMOFON 0x07000013 +#define FX_SHOCK1 0x07000014 +#define FX_WINDUP11 0x07000015 +#define FX_FRISK 0x07000016 +#define FX_TRAFFIC3 0x07000017 +#define FX_DESKBELL 0x07000018 +#define FX_KEY13 0x07000019 +#define FX_PAPER6 0x0700001A +#define FX_PHONEDN2 0x0700001B +#define FX_PHONEUP2 0x0700001C +#define FX_PIANO14 0x0700001D +#define FX_TRYDOR14 0x0700001E +#define FX_CABCLOSE 0x0700001F +#define FX_CABOPEN 0x07000020 +#define FX_DORCLOSE 0x07000021 +#define FX_WINDOPEN 0x07000022 +#define FX_COO 0x07000023 +#define FX_COO2 0x07000024 +#define FX_LEDGE1 0x07000025 +#define FX_LEDGE2 0x07000026 +#define FX_BRIEFOFF 0x07000027 +#define FX_BRIEFON 0x07000028 +#define FX_JUMPIN 0x07000029 +#define FX_WARDIN 0x0700002A +#define FX_WARDOUT 0x0700002B +#define FX_CLIMBIN 0x0700002C +#define FX_CLIMBOUT 0x0700002D + // 46 entities in TXTs, 46 in datafiles. + // room9 +#define PARIS2_PAL 0x07010000 +#define room9_PAL 0x07010001 +#define room9_l0 0x07010002 +#define room9_l1 0x07010003 +#define room9_l2 0x07010004 +#define room9_gd1 0x07010005 +#define room9_gd2 0x07010006 +#define room9_flr 0x07010007 +#define CARA9CDT 0x07010008 +#define CARA9 0x07010009 +#define CARB9CDT 0x0701000A +#define CARB9 0x0701000B +#define CARC9CDT 0x0701000C +#define CARC9 0x0701000D +#define DOROPN09CDR 0x0701000E +#define DOROPN09CDT 0x0701000F +#define DOROPN09 0x07010010 +#define FLWLUKCDR 0x07010011 +#define FLWLUKCDT 0x07010012 +#define FLWLUK 0x07010013 +#define FLWNITCDT 0x07010014 +#define FLWNIT 0x07010015 +#define FLWTLKCDT 0x07010016 +#define FLWTLK 0x07010017 +#define GEODOOR9 0x07010018 +#define GEODOOR9CDT 0x07010019 +#define GEOSTPCDT 0x0701001A +#define GEOSTP 0x0701001B +#define GEOSTP8CDT 0x0701001C +#define GEOSTP8 0x0701001D +#define GEOTRY 0x0701001E +#define GEOTRYCDT 0x0701001F +#define TRUCKA9CDT 0x07010020 +#define TRUCKA9 0x07010021 +#define TRUCKB9CDT 0x07010022 +#define TRUCKB9 0x07010023 +#define TRUCKC9CDT 0x07010024 +#define TRUCKC9 0x07010025 + // 38 entities in TXTs, 38 in datafiles. + // room10 +#define R10SPRPAL 0x07020000 +#define room10_PAL 0x07020001 +#define room10_l0 0x07020002 +#define room10_l1 0x07020003 +#define room10_gd1 0x07020004 +#define room10_flr 0x07020005 +#define DOORCDT 0x07020006 +#define DOOR 0x07020007 +#define GEOCCHCDT 0x07020008 +#define GEOCCHCDR 0x07020009 +#define GEOCCH 0x0702000A +#define GEOCCH8CDT 0x0702000B +#define GEOCCH8 0x0702000C +#define GEOCCH9CDT 0x0702000D +#define GEOCCH9 0x0702000E +#define GEOCHRCDT 0x0702000F +#define GEOCHR 0x07020010 +#define GEOCHR8CDT 0x07020011 +#define GEOCHR8 0x07020012 +#define GEOCHR9CDT 0x07020013 +#define GEOCHR9 0x07020014 +#define GEODWN10CDT 0x07020015 +#define GEODWN10 0x07020016 +#define GEOENT10CDT 0x07020017 +#define GEOENT10 0x07020018 +#define GEOGEM10CDT 0x07020019 +#define GEOGEM10 0x0702001A +#define GEOGEMBCDT 0x0702001B +#define GEOGEMB 0x0702001C +#define GEOLUK10CDT 0x0702001D +#define GEOLUK10 0x0702001E +#define GEOLVS10CDT 0x0702001F +#define GEOLVS10 0x07020020 +#define GEOMAGTKCDT 0x07020021 +#define GEOMAGTK 0x07020022 +#define GEOMAT10CDT 0x07020023 +#define GEOMAT10 0x07020024 +#define GEOMATBCDT 0x07020025 +#define GEOMATB 0x07020026 +#define GEOMATCCDT 0x07020027 +#define GEOMATC 0x07020028 +#define GEONIC10CDR 0x07020029 +#define GEONIC10CDT 0x0702002A +#define GEONIC10 0x0702002B +#define GEONOSCDT 0x0702002C +#define GEONOS 0x0702002D +#define GEONOS10CDT 0x0702002E +#define GEONOS10 0x0702002F +#define GEONWPAPCDT 0x07020030 +#define GEONWPAP 0x07020031 +#define GEOPHN10CDT 0x07020032 +#define GEOPHN10 0x07020033 +#define GEOPHTCDT 0x07020034 +#define GEOPHT 0x07020035 +#define GEOPHT10CDT 0x07020036 +#define GEOPHT10 0x07020037 +#define GEOPHTLKCDT 0x07020038 +#define GEOPHTLK 0x07020039 +#define GEOPPR10CDT 0x0702003A +#define GEOPPR10 0x0702003B +#define GEOPRDCDT 0x0702003C +#define GEOPRD 0x0702003D +#define GEOREDCDT 0x0702003E +#define GEORED 0x0702003F +#define GEORELCDR 0x07020040 +#define GEORELCDT 0x07020041 +#define GEOREL 0x07020042 +#define GEORXTCDT 0x07020043 +#define GEORXT 0x07020044 +#define GEOTIS10CDT 0x07020045 +#define GEOTIS10 0x07020046 +#define GEOTISBCDT 0x07020047 +#define GEOTISB 0x07020048 +#define GEOTRIP1CDT 0x07020049 +#define GEOTRIP1 0x0702004A +#define GEOTRIP2CDT 0x0702004B +#define GEOTRIP2 0x0702004C +#define LOBTLK10CDT 0x0702004D +#define LOBTLK10 0x0702004E +#define MANUCDT 0x0702004F +#define MANU 0x07020050 +#define NICCHR9CDR 0x07020051 +#define NICCHR9CDT 0x07020052 +#define NICCHR9 0x07020053 +#define NICDWN10CDT 0x07020054 +#define NICDWN10 0x07020055 +#define NICLUK10CDT 0x07020056 +#define NICLUK10 0x07020057 +#define NICMAGCDR 0x07020058 +#define NICMAGCDT 0x07020059 +#define NICMAG 0x0702005A +#define NICNOSCDT 0x0702005B +#define NICNOS 0x0702005C +#define NICNOS10CDT 0x0702005D +#define NICNOS10 0x0702005E +#define NICNOSBCDT 0x0702005F +#define NICNOSB 0x07020060 +#define NICPHN10CDT 0x07020061 +#define NICPHN10 0x07020062 +#define NICPHT10CDT 0x07020063 +#define NICPHT10 0x07020064 +#define NICPPRCDT 0x07020065 +#define NICPPR 0x07020066 +#define NICPPR2CDT 0x07020067 +#define NICPPR2 0x07020068 +#define NICREDCDT 0x07020069 +#define NICRED 0x0702006A +#define NICRED2CDR 0x0702006B +#define NICRED2CDT 0x0702006C +#define NICRED2 0x0702006D +#define NICSIT 0x0702006E +#define NICSITCDT 0x0702006F +#define NICTLK10CDT 0x07020070 +#define NICTLK10 0x07020071 +#define NICTLKL 0x07020072 +#define NICTLKLCDT 0x07020073 +#define NICTLKR 0x07020074 +#define NICTLKRCDT 0x07020075 +#define NICTLKX 0x07020076 +#define NICTLKXCDT 0x07020077 +#define NICTLKXCDR 0x07020078 +#define NICTRIPCDT 0x07020079 +#define NICTRIP 0x0702007A +#define NICTURN 0x0702007B +#define NICTURNCDT 0x0702007C +#define NICTURNCDR 0x0702007D +#define NICWRT 0x0702007E +#define NICWRTCDT 0x0702007F +#define PHONE10CDT 0x07020080 +#define PHONE10 0x07020081 +#define PEAPAGECDT 0x07020082 +#define PEAPAGE 0x07020083 +#define PEAPAGE_PAL 0x07020084 +#define MANUSCRPCDT 0x07020085 +#define MANUSCRP 0x07020086 +#define MANUSCRP_PAL 0x07020087 +#define TRIPOD10CDT 0x07020088 +#define TRIPOD10 0x07020089 + // 138 entities in TXTs, 138 in datafiles. + // room11 +#define room11_PAL 0x07030000 +#define room11_l0 0x07030001 +#define room11_l1 0x07030002 +#define room11_l2 0x07030003 +#define room11_gd1 0x07030004 +#define room11_gd2 0x07030005 +#define room11_flr 0x07030006 +#define COSGIVCDR 0x07030007 +#define COSGIVCDT 0x07030008 +#define COSGIV 0x07030009 +#define COSLOOPCDT 0x0703000A +#define COSLOOP 0x0703000B +#define COSSHKCDT 0x0703000C +#define COSSHK 0x0703000D +#define COSSNFCDT 0x0703000E +#define COSSNF 0x0703000F +#define COSTLKCDT 0x07030010 +#define COSTLK 0x07030011 +#define DISCSPINCDT 0x07030012 +#define DISCSPIN 0x07030013 +#define GEOPIC11CDR 0x07030014 +#define GEOPIC11CDT 0x07030015 +#define GEOPIC11 0x07030016 +#define GEOSHK11CDT 0x07030017 +#define GEOSHK11 0x07030018 +#define GEOTURDCDT 0x07030019 +#define GEOTURD 0x0703001A +#define GEOTIS11CDT 0x0703001B +#define GEOTIS11 0x0703001C +#define GEOWINDCDT 0x0703001D +#define GEOWIND 0x0703001E +#define WINDUPCDT 0x0703001F +#define WINDUP 0x07030020 + // 33 entities in TXTs, 33 in datafiles. + // room12 +#define room12_PAL 0x07040000 +#define room12_l0 0x07040001 +#define room12_l1 0x07040002 +#define room12_gd1 0x07040003 +#define room12_flr 0x07040004 +#define FLAGSCDT 0x07040005 +#define FLAGS 0x07040006 +#define GEOAPPCDT 0x07040007 +#define GEOAPP 0x07040008 +#define GEOARMCDT 0x07040009 +#define GEOARM 0x0704000A +#define GEOASC12CDT 0x0704000B +#define GEOASC12 0x0704000C +#define GEODES12CDT 0x0704000D +#define GEODES12 0x0704000E +#define GORCOINCDT 0x0704000F +#define GORCOIN 0x07040010 +#define GORFRKCDT 0x07040011 +#define GORFRK 0x07040012 +#define GORMANCDT 0x07040013 +#define GORMAN 0x07040014 +#define GORTALKCDT 0x07040015 +#define GORTALK 0x07040016 +#define GORTLKCDT 0x07040017 +#define GORTLK 0x07040018 +#define GORTURNCDR 0x07040019 +#define GORTURNCDT 0x0704001A +#define GORTURN 0x0704001B +#define LATVIAN12CDT 0x0704001C +#define LATVIAN12 0x0704001D +#define WEABAKCDT 0x0704001E +#define WEABAK 0x0704001F +#define WEASMKCDT 0x07040020 +#define WEASMK 0x07040021 +#define WEATLKCDT 0x07040022 +#define WEATLK 0x07040023 +#define WEATLK12CDT 0x07040024 +#define WEATLK12 0x07040025 +#define WEATRNCDR 0x07040026 +#define WEATRNCDT 0x07040027 +#define WEATRN 0x07040028 + // 41 entities in TXTs, 41 in datafiles. + // room13 +#define R13SPRPAL 0x07050000 +#define room13_PAL 0x07050001 +#define room13_l0 0x07050002 +#define room13_l1 0x07050003 +#define room13_l2 0x07050004 +#define room13_gd1 0x07050005 +#define room13_gd2 0x07050006 +#define room13_flr 0x07050007 +#define CLKIDLCDT 0x07050008 +#define CLKIDL 0x07050009 +#define CLKMANCDT 0x0705000A +#define CLKMAN 0x0705000B +#define CLKTAKCDT 0x0705000C +#define CLKTAK 0x0705000D +#define CLKTLKCDT 0x0705000E +#define CLKTLK 0x0705000F +#define CLKTLK2CDT 0x07050010 +#define CLKTLK2 0x07050011 +#define CLKTLK3CDT 0x07050012 +#define CLKTLK3 0x07050013 +#define CLKTURNCDR 0x07050014 +#define CLKTURNCDT 0x07050015 +#define CLKTURN 0x07050016 +#define CLKWLKCDT 0x07050017 +#define CLKWLK 0x07050018 +#define CLKWLK2CDT 0x07050019 +#define CLKWLK2 0x0705001A +#define CLKWLK3CDT 0x0705001B +#define CLKWLK3 0x0705001C +#define CLKWULCDT 0x0705001D +#define CLKWUL 0x0705001E +#define GEOASC13CDT 0x0705001F +#define GEOASC13 0x07050020 +#define GEODES13CDT 0x07050021 +#define GEODES13 0x07050022 +#define GEOKEYCDT 0x07050023 +#define GEOKEY 0x07050024 +#define GEOKEY13CDT 0x07050025 +#define GEOKEY13 0x07050026 +#define GEOMAN13CDT 0x07050027 +#define GEOMAN13 0x07050028 +#define GEOTELCDT 0x07050029 +#define GEOTEL 0x0705002A +#define GEOTEL9CDT 0x0705002B +#define GEOTEL9 0x0705002C +#define KEY13CDT 0x0705002D +#define KEY13 0x0705002E +#define LATLUKCDR 0x0705002F +#define LATLUKCDT 0x07050030 +#define LATLUK 0x07050031 +#define LATRDSCDT 0x07050032 +#define LATRDS 0x07050033 +#define LATTLKCDT 0x07050034 +#define LATTLK 0x07050035 +#define PMTGIVCDT 0x07050036 +#define PMTGIV 0x07050037 +#define PMTPNOCDT 0x07050038 +#define PMTPNO 0x07050039 +#define PMTSTDCDT 0x0705003A +#define PMTSTD 0x0705003B +#define PMTTLKCDT 0x0705003C +#define PMTTLK 0x0705003D +#define PMTTLK8CDT 0x0705003E +#define PMTTLK8 0x0705003F +#define PMTTLK9CDT 0x07050040 +#define PMTTLK9 0x07050041 +#define PMTTOTLKCDR 0x07050042 +#define PMTTOTLKCDT 0x07050043 +#define PMTTOTLK 0x07050044 +#define PMTTURNCDR 0x07050045 +#define PMTTURNCDT 0x07050046 +#define PMTTURN 0x07050047 +#define PMTWLK1CDT 0x07050048 +#define PMTWLK1 0x07050049 +#define PMTWLK2CDT 0x0705004A +#define PMTWLK2 0x0705004B + // 76 entities in TXTs, 76 in datafiles. + // room14 +#define room14_PAL 0x07060000 +#define room14_l0 0x07060001 +#define room14_l1 0x07060002 +#define room14_gd1 0x07060003 +#define room14_flr 0x07060004 +#define GEOASC14CDT 0x07060005 +#define GEOASC14 0x07060006 +#define GEODES14CDT 0x07060007 +#define GEODES14 0x07060008 +#define GEODORCDR 0x07060009 +#define GEODORCDT 0x0706000A +#define GEODOR 0x0706000B + // 12 entities in TXTs, 12 in datafiles. + // room15 +#define room15_PAL 0x07070000 +#define room15_l0 0x07070001 +#define room15_l1 0x07070002 +#define room15_l2 0x07070003 +#define room15_gd1 0x07070004 +#define room15_gd2 0x07070005 +#define room15_flr 0x07070006 +#define DOROPN15CDT 0x07070007 +#define DOROPN15 0x07070008 +#define GEOBEDCDR 0x07070009 +#define GEOBEDCDT 0x0707000A +#define GEOBED 0x0707000B +#define GEODOR15CDT 0x0707000C +#define GEODOR15 0x0707000D +#define GEOENT15CDT 0x0707000E +#define GEOENT15 0x0707000F +#define GEOWIN1CDT 0x07070010 +#define GEOWIN1 0x07070011 +#define GEOWIN15CDT 0x07070012 +#define GEOWIN15 0x07070013 +#define GEOWIN2CDT 0x07070014 +#define GEOWIN2 0x07070015 +#define GEOWRBCDR 0x07070016 +#define GEOWRBCDT 0x07070017 +#define GEOWRB 0x07070018 +#define WINDOWCDT 0x07070019 +#define WINDOW 0x0707001A + // 27 entities in TXTs, 27 in datafiles. + // room16 +#define room16_PAL 0x07080000 +#define R16L0 0x07080001 +#define R16L1 0x07080002 +#define R16G1 0x07080003 +#define GEOILWCDT 0x07080004 +#define GEOILW 0x07080005 +#define GEOIRWCDT 0x07080006 +#define GEOIRW 0x07080007 +#define GEOMANLCDT 0x07080008 +#define GEOMANL 0x07080009 +#define GEOMANRCDT 0x0708000A +#define GEOMANR 0x0708000B +#define GEOMLWCDT 0x0708000C +#define GEOMLW 0x0708000D +#define GEOMRWCDT 0x0708000E +#define GEOMRW 0x0708000F +#define GEOOLWCDT 0x07080010 +#define GEOOLWCDR 0x07080011 +#define GEOOLW 0x07080012 +#define GEOORWCDT 0x07080013 +#define GEOORWCDR 0x07080014 +#define GEOORW 0x07080015 +#define MANLCDT 0x07080016 +#define MANL 0x07080017 +#define MANRCDT 0x07080018 +#define MANR 0x07080019 + // 26 entities in TXTs, 26 in datafiles. + // room17 +#define room17_PAL 0x07090000 +#define room17_l0 0x07090001 +#define room17_l1 0x07090002 +#define room17_l2 0x07090003 +#define room17_gd1 0x07090004 +#define room17_gd2 0x07090005 +#define room17_flr 0x07090006 +#define IBACK17 0x07090007 +#define IBACK17PAL 0x07090008 +#define GEOINQ17 0x07090009 +#define GEOINQ17CDT 0x0709000A +#define SBACK17 0x0709000B +#define SBACK17PAL 0x0709000C +#define GEOSUR17 0x0709000D +#define GEOSUR17CDT 0x0709000E +#define ASSTAIR2_PAL 0x0709000F +#define ASSTAIR2 0x07090010 +#define ASSTAIRCDT 0x07090011 +#define ASSTAIR 0x07090012 +#define ASSDORCDT 0x07090013 +#define ASSDOR 0x07090014 +#define ASSDOR2CDT 0x07090015 +#define ASSDOR2 0x07090016 +#define ASSTRWCDT 0x07090017 +#define ASSTRW 0x07090018 +#define ASSWRBCDT 0x07090019 +#define ASSWRB 0x0709001A +#define ASWLK17CDT 0x0709001B +#define ASWLK17 0x0709001C +#define BRFCASECDT 0x0709001D +#define BRFCASE 0x0709001E +#define GEOBCBCDR 0x0709001F +#define GEOBCBCDT 0x07090020 +#define GEOBCB 0x07090021 +#define GEOBED17CDT 0x07090022 +#define GEOBED17 0x07090023 +#define GEOBFCCDR 0x07090024 +#define GEOBFCCDT 0x07090025 +#define GEOBFC 0x07090026 +#define GEODOR17CDT 0x07090027 +#define GEODOR17 0x07090028 +#define GEODOR2CDR 0x07090029 +#define GEODOR2CDT 0x0709002A +#define GEODOR2 0x0709002B +#define GEOPANTSCDT 0x0709002C +#define GEOPANTS 0x0709002D +#define GEOWIN8CDT 0x0709002E +#define GEOWIN8 0x0709002F +#define GEOWIN9CDT 0x07090030 +#define GEOWIN9 0x07090031 +#define GEOWRB1CDR 0x07090032 +#define GEOWRB1CDT 0x07090033 +#define GEOWRB1 0x07090034 +#define GEOWRB2CDT 0x07090035 +#define GEOWRB2 0x07090036 +#define GEOWRB3CDR 0x07090037 +#define GEOWRB3CDT 0x07090038 +#define GEOWRB3 0x07090039 +#define GEOWRB4CDT 0x0709003A +#define GEOWRB4 0x0709003B +#define PANTS2CDT 0x0709003C +#define PANTS2 0x0709003D +#define PANTWRBCDT 0x0709003E +#define PANTWRB 0x0709003F +#define STATDOORCDT 0x07090040 +#define STATDOOR 0x07090041 +#define WRBDOR17CDT 0x07090042 +#define WRBDOR17 0x07090043 + // 68 entities in TXTs, 68 in datafiles. + // room18 +#define R18SPRPAL 0x070A0000 +#define room18_PAL 0x070A0001 +#define room18_l0 0x070A0002 +#define room18_l1 0x070A0003 +#define room18_l2 0x070A0004 +#define room18_gd1 0x070A0005 +#define room18_gd2 0x070A0006 +#define room18_flr 0x070A0007 +#define FAN18CDT 0x070A0008 +#define FAN18 0x070A0009 +#define GENBNDCDT 0x070A000A +#define GENBND 0x070A000B +#define GENSTRCDT 0x070A000C +#define GENSTR 0x070A000D +#define GENTLK18CDT 0x070A000E +#define GENTLK18 0x070A000F +#define GEOLVE18CDT 0x070A0010 +#define GEOLVE18 0x070A0011 +#define MOUBAK18CDT 0x070A0012 +#define MOUBAK18 0x070A0013 +#define MOUBUSYCDT 0x070A0014 +#define MOUBUSY 0x070A0015 +#define MOUTKROSCDT 0x070A0016 +#define MOUTKROS 0x070A0017 +#define MOUTLK18CDT 0x070A0018 +#define MOUTLK18 0x070A0019 +#define MOUWLK18CDT 0x070A001A +#define MOUWLK18 0x070A001B +#define ROSBAK18CDT 0x070A001C +#define ROSBAK18 0x070A001D +#define ROSBUSYCDT 0x070A001E +#define ROSBUSY 0x070A001F +#define ROSSTDCDT 0x070A0020 +#define ROSSTD 0x070A0021 +#define ROSTLK18CDT 0x070A0022 +#define ROSTLK18 0x070A0023 +#define ROSTLKXCDT 0x070A0024 +#define ROSTLKX 0x070A0025 +#define ROSTURNCDR 0x070A0026 +#define ROSTURNCDT 0x070A0027 +#define ROSTURN 0x070A0028 +#define ROSWLK18CDT 0x070A0029 +#define ROSWLK18 0x070A002A + // 43 entities in TXTs, 43 in datafiles. + // room46 +#define room46_PAL 0x070B0000 +#define room46_l0 0x070B0001 +#define room46_l1 0x070B0002 +#define room46_l2 0x070B0003 +#define room46_gd1 0x070B0004 +#define room46_gd2 0x070B0005 +#define room46_flr 0x070B0006 +#define MANU46CDT 0x070B0007 +#define MANU46 0x070B0008 + // 9 entities in TXTs, 9 in datafiles. +// paris_3 + // sound_fx +#define FX_MUESEXT 0x08000000 +#define FX_AIRCON28 0x08000001 +#define FX_SARCO28A 0x08000002 +#define FX_SARCO28B 0x08000003 +#define FX_SARCO28C 0x08000004 +#define FX_TOTEM28A 0x08000005 +#define FX_ALARM 0x08000006 +#define FX_CARABINE 0x08000007 +#define FX_DOOR29 0x08000008 +#define FX_FISHFALL 0x08000009 +#define FX_GDROP29 0x0800000A +#define FX_GUI_HIT 0x0800000B +#define FX_GUN1 0x0800000C +#define FX_ROPEDOWN 0x0800000D +#define FX_SARCO29 0x0800000E +#define FX_SMASHGLA 0x0800000F +#define FX_TOTEM29A 0x08000010 +#define FX_TOTEM29B 0x08000011 +#define FX_HOSPEXT 0x08000012 +#define FX_GRAVEL1 0x08000013 +#define FX_GRAVEL2 0x08000014 +#define FX_HOSPNOIS 0x08000015 +#define FX_CUPBOPEN 0x08000016 +#define FX_CUPBCLOS 0x08000017 +#define FX_KIKSHINY 0x08000018 +#define FX_SHINY 0x08000019 +#define FX_SHINYOFF 0x0800001A +#define FX_SHINYON 0x0800001B +#define FX_BLOODPRE 0x0800001C +#define FX_GUN34 0x0800001D +#define FX_PULSE2 0x0800001E +#define FX_PULSE3 0x0800001F + // 32 entities in TXTs, 32 in datafiles. + // benoir +#define MEGABEN 0x08010000 +#define BEN_WLK 0x08010001 +#define STDTAL1 0x08010002 +#define STDTAL1CDT 0x08010003 +#define STDTAL3 0x08010004 +#define STDTAL3CDT 0x08010005 +#define STDTAL5 0x08010006 +#define STDTAL5CDT 0x08010007 +#define XBENPG3 0x08010008 +#define XBENPG3CDT 0x08010009 +#define XBENPG5 0x0801000A +#define XBENPG5CDT 0x0801000B + // 12 entities in TXTs, 12 in datafiles. + // mus +#define MEGAMUS 0x08020000 +#define MUS_WLK 0x08020001 +#define MUSTLK0 0x08020002 +#define MUSTLK0CDT 0x08020003 +#define MUSTLK1 0x08020004 +#define MUSTLK1CDT 0x08020005 +#define MUSTLK2 0x08020006 +#define MUSTLK2CDT 0x08020007 +#define MUSTLK3 0x08020008 +#define MUSTLK3CDT 0x08020009 +#define MUSTLK4 0x0802000A +#define MUSTLK4CDT 0x0802000B +#define MUSTLK5 0x0802000C +#define MUSTLK5CDT 0x0802000D +#define MUSTLK6 0x0802000E +#define MUSTLK6CDT 0x0802000F +#define MUSTLK7 0x08020010 +#define MUSTLK7CDT 0x08020011 + // 18 entities in TXTs, 18 in datafiles. + // white +#define MEGA_WHITE 0x08030000 +#define WHTTLK0 0x08030001 +#define WHTTLK0CDT 0x08030002 +#define WHTTLK1 0x08030003 +#define WHTTLK1CDT 0x08030004 +#define WHTTLK2 0x08030005 +#define WHTTLK2CDT 0x08030006 +#define WHTTLK3 0x08030007 +#define WHTTLK3CDT 0x08030008 +#define WHTTLK4 0x08030009 +#define WHTTLK4CDT 0x0803000A +#define WHTTLK5 0x0803000B +#define WHTTLK5CDT 0x0803000C +#define WHTTLK6 0x0803000D +#define WHTTLK6CDT 0x0803000E +#define WHTTLK7 0x0803000F +#define WHTTLK7CDT 0x08030010 +#define WHTSHRUG 0x08030011 +#define WHTSHRUGCDT 0x08030012 +#define XGEOPG3 0x08030013 +#define XGEOPG3CDT 0x08030014 +#define XGEOPG5 0x08030015 +#define XGEOPG5CDT 0x08030016 + // 23 entities in TXTs, 23 in datafiles. + // room27 +#define PARIS3_PAL 0x08040000 +#define room27_PAL 0x08040001 +#define R27L0 0x08040002 +#define R27L1 0x08040003 +#define R27L2 0x08040004 +#define R27G1 0x08040005 +#define R27G2 0x08040006 +#define room27_flr 0x08040007 +#define GEOWIN27CDR 0x08040008 +#define GEOWIN27CDT 0x08040009 +#define GEOWIN27 0x0804000A + // 11 entities in TXTs, 11 in datafiles. + // room28 +#define R28SPRPAL 0x08050000 +#define R28PAL 0x08050001 +#define R28L0 0x08050002 +#define R28L1 0x08050003 +#define R28L2 0x08050004 +#define R28G1 0x08050005 +#define R28G2 0x08050006 +#define room28_flr 0x08050007 +#define GEOALMCDT 0x08050008 +#define GEOALM 0x08050009 +#define GEOSARCDT 0x0805000A +#define GEOSAR 0x0805000B +#define GEOSAR1CDT 0x0805000C +#define GEOSAR1 0x0805000D +#define GEOSAR2CDR 0x0805000E +#define GEOSAR2CDT 0x0805000F +#define GEOSAR2 0x08050010 +#define GEOSHK28CDT 0x08050011 +#define GEOSHK28 0x08050012 +#define GEOTOTCDT 0x08050013 +#define GEOTOT 0x08050014 +#define GEOWINCDT 0x08050015 +#define GEOWIN 0x08050016 +#define GUAWINCDT 0x08050017 +#define GUAWIN 0x08050018 +#define LOBEXITCDT 0x08050019 +#define LOBEXIT 0x0805001A +#define LOBMANCDT 0x0805001B +#define LOBMAN 0x0805001C +#define LOBSTUCDT 0x0805001D +#define LOBSTU 0x0805001E +#define LOBTLKCDT 0x0805001F +#define LOBTLK 0x08050020 +#define LOBTURN1CDT 0x08050021 +#define LOBTURN1 0x08050022 +#define LOBTURN2CDT 0x08050023 +#define LOBTURN2 0x08050024 +#define MUSOPNCDT 0x08050025 +#define MUSOPN 0x08050026 +#define SARDOR28CDT 0x08050027 +#define SARDOR28 0x08050028 +#define TOTEM28CDT 0x08050029 +#define TOTEM28 0x0805002A +#define TRIPOD28CDT 0x0805002B +#define TRIPOD28 0x0805002C +#define WINDO28CDR 0x0805002D +#define WINDO28CDT 0x0805002E +#define WINDO28 0x0805002F +#define WINROD28CDT 0x08050030 +#define WINROD28 0x08050031 + // 50 entities in TXTs, 50 in datafiles. + // room29 +#define R29SPRPAL 0x08060000 +#define BBACK29SPRPAL 0x08060001 +#define R29PAL 0x08060002 +#define R29L0 0x08060003 +#define R29L1 0x08060004 +#define R29G1 0x08060005 +#define room29_flr 0x08060006 +#define BBACK29 0x08060007 +#define BBACK29PAL 0x08060008 +#define GEOSUR29CDT 0x08060009 +#define GEOSUR29 0x0806000A +#define CASECDT 0x0806000B +#define CASE 0x0806000C +#define DOOR29CDT 0x0806000D +#define DOOR29 0x0806000E +#define FISH29CDT 0x0806000F +#define FISH29 0x08060010 +#define FLAPENTCDT 0x08060011 +#define FLAPENT 0x08060012 +#define FLAPTLK1CDT 0x08060013 +#define FLAPTLK1 0x08060014 +#define FLAPTLK3CDT 0x08060015 +#define FLAPTLK3 0x08060016 +#define FLAPTOR1CDR 0x08060017 +#define FLAPTOR1CDT 0x08060018 +#define FLAPTOR1 0x08060019 +#define FLAPTOR4CDT 0x0806001A +#define FLAPTOR4 0x0806001B +#define FLAPWLKCDT 0x0806001C +#define FLAPWLK 0x0806001D +#define GEODEDCDT 0x0806001E +#define GEODED 0x0806001F +#define GEOFISHCDT 0x08060020 +#define GEOFISH 0x08060021 +#define GEOFWDCDT 0x08060022 +#define GEOFWD 0x08060023 +#define GEOPEEKCDT 0x08060024 +#define GEOPEEK 0x08060025 +#define GEOSAR6CDT 0x08060026 +#define GEOSAR6 0x08060027 +#define GEOTOT29CDT 0x08060028 +#define GEOTOT29 0x08060029 +#define GEOTOTBCDT 0x0806002A +#define GEOTOTB 0x0806002B +#define GEOTPTOCDT 0x0806002C +#define GEOTPTO 0x0806002D +#define GUIENTCDT 0x0806002E +#define GUIENT 0x0806002F +#define GUIGUNCDT 0x08060030 +#define GUIGUN 0x08060031 +#define GUIKNECDT 0x08060032 +#define GUIKNE 0x08060033 +#define GUIKNE1CDT 0x08060034 +#define GUIKNE1 0x08060035 +#define GUITLK1CDT 0x08060036 +#define GUITLK1 0x08060037 +#define GUITLK3CDT 0x08060038 +#define GUITLK3 0x08060039 +#define GUITLK4CDT 0x0806003A +#define GUITLK4 0x0806003B +#define GUIWLKCDT 0x0806003C +#define GUIWLK 0x0806003D +#define NICPUS1CDT 0x0806003E +#define NICPUS1 0x0806003F +#define ROPE29CDT 0x08060040 +#define ROPE29 0x08060041 +#define SARDOORCDT 0x08060042 +#define SARDOOR 0x08060043 +#define TOR1CDT 0x08060044 +#define TOR1 0x08060045 +#define TOR3CDR 0x08060046 +#define TOR3CDT 0x08060047 +#define TOR3 0x08060048 +#define TOR4CDT 0x08060049 +#define TOR4 0x0806004A +#define TOR6CDT 0x0806004B +#define TOR6 0x0806004C +#define TOR7CDT 0x0806004D +#define TOR7 0x0806004E +#define TOTFALLCDT 0x0806004F +#define TOTFALL 0x08060050 + // 81 entities in TXTs, 81 in datafiles. + // room31 +#define room31_PAL 0x08070000 +#define room31_l0 0x08070001 +#define room31_flr 0x08070002 +#define GEOAMBCDT 0x08070003 +#define GEOAMB 0x08070004 +#define GEODOR31CDT 0x08070005 +#define GEODOR31 0x08070006 + // 7 entities in TXTs, 7 in datafiles. + // room32 +#define room32_PAL 0x08080000 +#define room32_l0 0x08080001 +#define room32_l1 0x08080002 +#define room32_l2 0x08080003 +#define room32_gd1 0x08080004 +#define room32_gd2 0x08080005 +#define room32_flr 0x08080006 +#define CONSTPCDT 0x08080007 +#define CONSTP 0x08080008 +#define CONTLKCDT 0x08080009 +#define CONTLK 0x0808000A +#define CONTLK2CDT 0x0808000B +#define CONTLK2 0x0808000C +#define CONWLKCDT 0x0808000D +#define CONWLK 0x0808000E +#define RECCOMCDT 0x0808000F +#define RECCOM 0x08080010 +#define RECKEYCDT 0x08080011 +#define RECKEY 0x08080012 +#define RECTLKCDT 0x08080013 +#define RECTLK 0x08080014 +#define RECTLK2CDT 0x08080015 +#define RECTLK2 0x08080016 +#define RECTRNCDT 0x08080017 +#define RECTRN 0x08080018 + // 25 entities in TXTs, 25 in datafiles. + // room33 +#define room33_PAL 0x08090000 +#define room33_l0 0x08090001 +#define room33_l1 0x08090002 +#define room33_l2 0x08090003 +#define room33_gd1 0x08090004 +#define room33_gd2 0x08090005 +#define room33_flr 0x08090006 +#define DOMDRNCDT 0x08090007 +#define DOMDRN 0x08090008 +#define DOMDUHCDT 0x08090009 +#define DOMDUH 0x0809000A +#define DOMKIKCDT 0x0809000B +#define DOMKIK 0x0809000C +#define DOMPLGCDT 0x0809000D +#define DOMPLG 0x0809000E +#define DOMTLKCDT 0x0809000F +#define DOMTLK 0x08090010 +#define DOMVACCDT 0x08090011 +#define DOMVAC 0x08090012 +#define DOMWLKCDT 0x08090013 +#define DOMWLK 0x08090014 +#define DOMWLK2CDT 0x08090015 +#define DOMWLK2 0x08090016 +#define DOMWLK3CDT 0x08090017 +#define DOMWLK3 0x08090018 +#define DOMWLK4CDT 0x08090019 +#define DOMWLK4 0x0809001A +#define GEOCOTCDT 0x0809001B +#define GEOCOT 0x0809001C +#define GEOPLG33CDT 0x0809001D +#define GEOPLG33 0x0809001E +#define GEOWATCDT 0x0809001F +#define GEOWAT 0x08090020 +#define GEOWWATCDT 0x08090021 +#define GEOWWAT 0x08090022 +#define LEAD1CDT 0x08090023 +#define LEAD1 0x08090024 +#define LEAD2CDT 0x08090025 +#define LEAD2 0x08090026 +#define SHINY33CDT 0x08090027 +#define SHINY33 0x08090028 + // 41 entities in TXTs, 41 in datafiles. + // room34 +#define room34_PAL 0x080A0000 +#define room34_l0 0x080A0001 +#define room34_l1 0x080A0002 +#define room34_l2 0x080A0003 +#define room34_l3 0x080A0004 +#define room34_gd1 0x080A0005 +#define room34_gd2 0x080A0006 +#define room34_gd3 0x080A0007 +#define room34_flr 0x080A0008 +#define R34PLX 0x080A0009 +#define BENBP1CDT 0x080A000A +#define BENBP1 0x080A000B +#define BENBP2CDT 0x080A000C +#define BENBP2 0x080A000D +#define DOOR34CDR 0x080A000E +#define DOOR34CDT 0x080A000F +#define DOOR34 0x080A0010 +#define GENDTLKCDT 0x080A0011 +#define GENDTLK 0x080A0012 +#define GENENTCDT 0x080A0013 +#define GENENT 0x080A0014 +#define GENSHOTCDT 0x080A0015 +#define GENSHOT 0x080A0016 +#define GENSTLKCDT 0x080A0017 +#define GENSTLK 0x080A0018 +#define GENSUPCDT 0x080A0019 +#define GENSUP 0x080A001A +#define GENTRNCDT 0x080A001B +#define GENTRN 0x080A001C +#define GEOBAKCDT 0x080A001D +#define GEOBAK 0x080A001E +#define GEOBP2CDT 0x080A001F +#define GEOBP2 0x080A0020 +#define GEOCH1CDR 0x080A0021 +#define GEOCH1CDT 0x080A0022 +#define GEOCH1 0x080A0023 +#define GEOCH2CDR 0x080A0024 +#define GEOCH2CDT 0x080A0025 +#define GEOCH2 0x080A0026 +#define GEOCH3CDR 0x080A0027 +#define GEOCH3CDT 0x080A0028 +#define GEOCH3 0x080A0029 +#define GEODOR34CDT 0x080A002A +#define GEODOR34 0x080A002B +#define GEOENT34CDT 0x080A002C +#define GEOENT34 0x080A002D +#define GEONURBPCDT 0x080A002E +#define GEONURBP 0x080A002F +#define GEOTAKCDT 0x080A0030 +#define GEOTAK 0x080A0031 +#define GEOTRYDCDT 0x080A0032 +#define GEOTRYD 0x080A0033 +#define GEOTRYTKCDT 0x080A0034 +#define GEOTRYTK 0x080A0035 +#define HATGIVCDT 0x080A0036 +#define HATGIV 0x080A0037 +#define HATSTPCDT 0x080A0038 +#define HATSTP 0x080A0039 +#define HATTLKCDT 0x080A003A +#define HATTLK 0x080A003B +#define HATWLKCDT 0x080A003C +#define HATWLK 0x080A003D +#define HATWLK2CDT 0x080A003E +#define HATWLK2 0x080A003F +#define MONITOR 0x080A0040 +#define MONITOR_PAL 0x080A0041 +#define PULSE1CDT 0x080A0042 +#define PULSE1 0x080A0043 +#define PULSE2CDT 0x080A0044 +#define PULSE2 0x080A0045 +#define PULSE3CDT 0x080A0046 +#define PULSE3 0x080A0047 +#define RENTLKCDT 0x080A0048 +#define RENTLK 0x080A0049 +#define SMARMCDR 0x080A004A +#define SMARMCDT 0x080A004B +#define SMARM 0x080A004C +#define SMSTPCDR 0x080A004D +#define SMSTPCDT 0x080A004E +#define SMSTP 0x080A004F +#define SMTALKCDT 0x080A0050 +#define SMTALK 0x080A0051 +#define SMTALK2CDT 0x080A0052 +#define SMTALK2 0x080A0053 +#define STUDENTCDT 0x080A0054 +#define STUDENT 0x080A0055 +#define STUDGIVCDT 0x080A0056 +#define STUDGIV 0x080A0057 +#define STUDMOVCDT 0x080A0058 +#define STUDMOV 0x080A0059 + // 90 entities in TXTs, 90 in datafiles. + // room35 +#define room35_PAL 0x080B0000 +#define room35_l0 0x080B0001 +#define room35_l1 0x080B0002 +#define room35_gd1 0x080B0003 +#define room35_flr 0x080B0004 +#define ALSHOCKCDT 0x080B0005 +#define ALSHOCK 0x080B0006 +#define CURFLATCDT 0x080B0007 +#define CURFLAT 0x080B0008 +#define EKLBED35CDT 0x080B0009 +#define EKLBED35 0x080B000A +#define EKLTLK35CDT 0x080B000B +#define EKLTLK35 0x080B000C +#define EKLWLK35CDT 0x080B000D +#define EKLWLK35 0x080B000E +#define GEORCT35CDT 0x080B000F +#define GEORCT35 0x080B0010 +#define GEOSIT35CDR 0x080B0011 +#define GEOSIT35CDT 0x080B0012 +#define GEOSIT35 0x080B0013 +#define GEOTLKCDT 0x080B0014 +#define GEOTLK 0x080B0015 +#define GEOTLK35CDT 0x080B0016 +#define GEOTLK35 0x080B0017 +#define GEOTRN35CDT 0x080B0018 +#define GEOTRN35 0x080B0019 +#define JAQTLK1CDT 0x080B001A +#define JAQTLK1 0x080B001B +#define JAQTLK2CDT 0x080B001C +#define JAQTLK2 0x080B001D + // 30 entities in TXTs, 30 in datafiles. +// paris_4 + // sound_fx +#define FX_COVDWN 0x09000000 +#define FX_KEYIN 0x09000001 +#define FX_MANOP36 0x09000002 +#define FX_MONTAMB 0x09000003 +#define FX_OOH 0x09000004 +#define FX_PULLUP36 0x09000005 +#define FX_REPLCE36 0x09000006 +#define FX_AMBIEN37 0x09000007 +#define FX_CHAIN37 0x09000008 +#define FX_CHAIN37B 0x09000009 +#define FX_DOOR37 0x0900000A +#define FX_HOLE37 0x0900000B +#define FX_KNOCK37 0x0900000C +#define FX_KNOCK37B 0x0900000D +#define FX_WINCH37 0x0900000E +#define FX_AIRCON41 0x0900000F +#define FX_FONEDN41 0x09000010 +#define FX_FONEUP41 0x09000011 +#define FX_PHONCALL 0x09000012 +#define FX_THERMO1 0x09000013 +#define FX_TAPDRIP 0x09000014 +#define FX_DRIER1 0x09000015 +#define FX_CHURCHFX 0x09000016 + // 23 entities in TXTs, 23 in datafiles. + // room36 +#define R36SPRPAL 0x09010000 +#define R36L0 0x09010001 +#define R36L1 0x09010002 +#define R36G1 0x09010003 +#define room36_PAL 0x09010004 +#define room36_flr 0x09010005 +#define R36PLX 0x09010006 +#define BAL36CDT 0x09010007 +#define BAL36 0x09010008 +#define CRO36APPCDT 0x09010009 +#define CRO36APP 0x0901000A +#define CRO36GEOCDT 0x0901000B +#define CRO36GEO 0x0901000C +#define CRO36IDLCDT 0x0901000D +#define CRO36IDL 0x0901000E +#define CRO36JUGCDT 0x0901000F +#define CRO36JUG 0x09010010 +#define CRO36UNICDT 0x09010011 +#define CRO36UNI 0x09010012 +#define GEN36DRICDT 0x09010013 +#define GEN36DRI 0x09010014 +#define GEN36FEHCDT 0x09010015 +#define GEN36FEH 0x09010016 +#define GEN36HURCDT 0x09010017 +#define GEN36HUR 0x09010018 +#define GEN36LEACDT 0x09010019 +#define GEN36LEA 0x0901001A +#define GEN36POICDR 0x0901001B +#define GEN36POICDT 0x0901001C +#define GEN36POI 0x0901001D +#define GEN36SPECDT 0x0901001E +#define GEN36SPE 0x0901001F +#define GEN36TALCDT 0x09010020 +#define GEN36TAL 0x09010021 +#define GEO36CLOCDT 0x09010022 +#define GEO36CLO 0x09010023 +#define GEO36ENTCDT 0x09010024 +#define GEO36ENT 0x09010025 +#define GEO36EXTCDT 0x09010026 +#define GEO36EXT 0x09010027 +#define GEO36JUGCDT 0x09010028 +#define GEO36JUG 0x09010029 +#define GEO36KNECDR 0x0901002A +#define GEO36KNECDT 0x0901002B +#define GEO36KNE 0x0901002C +#define GEO36LUKCDR 0x0901002D +#define GEO36LUKCDT 0x0901002E +#define GEO36LUK 0x0901002F +#define GEO36NOSCDT 0x09010030 +#define GEO36NOS 0x09010031 +#define GEO36OPECDT 0x09010032 +#define GEO36OPE 0x09010033 +#define GEO36POPCDT 0x09010034 +#define GEO36POP 0x09010035 +#define GEO36SHOCDR 0x09010036 +#define GEO36SHOCDT 0x09010037 +#define GEO36SHO 0x09010038 +#define GEO36SNTCDT 0x09010039 +#define GEO36SNT 0x0901003A +#define GEO36STDCDT 0x0901003B +#define GEO36STD 0x0901003C +#define GEO36STUCDT 0x0901003D +#define GEO36STU 0x0901003E +#define GEO36TAKCDT 0x0901003F +#define GEO36TAK 0x09010040 +#define HAT36CDT 0x09010041 +#define HAT36 0x09010042 +#define JUG36FINCDT 0x09010043 +#define JUG36FIN 0x09010044 +#define JUG36FURCDT 0x09010045 +#define JUG36FUR 0x09010046 +#define JUG36GIVCDT 0x09010047 +#define JUG36GIV 0x09010048 +#define JUG36GOCDT 0x09010049 +#define JUG36GO 0x0901004A +#define JUG36JUGCDT 0x0901004B +#define JUG36JUG 0x0901004C +#define JUG36LAFCDT 0x0901004D +#define JUG36LAF 0x0901004E +#define JUG36STACDT 0x0901004F +#define JUG36STA 0x09010050 +#define JUG36TAKCDT 0x09010051 +#define JUG36TAK 0x09010052 +#define JUG36TALCDT 0x09010053 +#define JUG36TAL 0x09010054 +#define MANCOV36CDT 0x09010055 +#define MANCOV36 0x09010056 +#define MANOFF36CDT 0x09010057 +#define MANOFF36 0x09010058 +#define VIN36CDT 0x09010059 +#define VIN36 0x0901005A + // 91 entities in TXTs, 91 in datafiles. + // room37 +#define room37_PAL 0x09020000 +#define R37L0 0x09020001 +#define R37L1 0x09020002 +#define R37G1 0x09020003 +#define room37_flr 0x09020004 +#define DOR37COLCDT 0x09020005 +#define DOR37COL 0x09020006 +#define GEO37ASCCDT 0x09020007 +#define GEO37ASC 0x09020008 +#define GEO37COGCDT 0x09020009 +#define GEO37COG 0x0902000A +#define GEO37DESCDT 0x0902000B +#define GEO37DES 0x0902000C +#define GEO37HUKCDR 0x0902000D +#define GEO37HUKCDT 0x0902000E +#define GEO37HUK 0x0902000F +#define GEO37INBCDT 0x09020010 +#define GEO37INB 0x09020011 +#define GEO37LEVCDT 0x09020012 +#define GEO37LEV 0x09020013 +#define GEO37OUTCDT 0x09020014 +#define GEO37OUT 0x09020015 +#define GEO37RUNCDT 0x09020016 +#define GEO37RUN 0x09020017 +#define GEO37TA1CDT 0x09020018 +#define GEO37TA1 0x09020019 +#define GEO37TA2CDT 0x0902001A +#define GEO37TA2 0x0902001B +#define GEO37TA3CDT 0x0902001C +#define GEO37TA3 0x0902001D +#define GEO37TA4CDT 0x0902001E +#define GEO37TA4 0x0902001F +#define GEO37TU1CDR 0x09020020 +#define GEO37TU1CDT 0x09020021 +#define GEO37TU1 0x09020022 +#define GEO37TU2CDT 0x09020023 +#define GEO37TU2 0x09020024 +#define GEO37WLCDR 0x09020025 +#define GEO37WLCDT 0x09020026 +#define GEO37WL 0x09020027 +#define HOO37LBOCDR 0x09020028 +#define HOO37LBOCDT 0x09020029 +#define HOO37LBO 0x0902002A +#define HOO37PULCDT 0x0902002B +#define HOO37PUL 0x0902002C +#define ROCKS1CDT 0x0902002D +#define ROCKS1 0x0902002E +#define WAL37BRECDT 0x0902002F +#define WAL37BRE 0x09020030 +#define WAL37SLICDT 0x09020031 +#define WAL37SLI 0x09020032 +#define WATER37CDT 0x09020033 +#define WATER37 0x09020034 +#define WATER37ACDT 0x09020035 +#define WATER37A 0x09020036 +#define WHEEL37CDT 0x09020037 +#define WHEEL37 0x09020038 + // 57 entities in TXTs, 57 in datafiles. + // room38 +#define R38SPRPAL 0x09030000 +#define room38_PAL 0x09030001 +#define R38L0 0x09030002 +#define R38L1 0x09030003 +#define R38G1 0x09030004 +#define room38_flr 0x09030005 +#define BBACK38 0x09030006 +#define BBACK38PAL 0x09030007 +#define GEOINQ38CDT 0x09030008 +#define GEOINQ38 0x09030009 +#define GEO38AS1CDT 0x0903000A +#define GEO38AS1 0x0903000B +#define GEO38AS2CDT 0x0903000C +#define GEO38AS2 0x0903000D +#define GEO38DE1CDT 0x0903000E +#define GEO38DE1 0x0903000F +#define GEO38DE2CDT 0x09030010 +#define GEO38DE2 0x09030011 +#define GEO38LUKCDR 0x09030012 +#define GEO38LUKCDT 0x09030013 +#define GEO38LUK 0x09030014 + // 21 entities in TXTs, 21 in datafiles. + // room39 +#define R39SPRPAL 0x09040000 +#define R39L0 0x09040001 +#define R39L1 0x09040002 +#define R39G1 0x09040003 +#define room39_PAL 0x09040004 +#define room39_flr 0x09040005 +#define R39PLX 0x09040006 +#define BOA39GOACDT 0x09040007 +#define BOA39GOA 0x09040008 +#define BOA39SPRCDT 0x09040009 +#define BOA39SPR 0x0904000A +#define CIV391T2CDR 0x0904000B +#define CIV391T2CDT 0x0904000C +#define CIV391T2 0x0904000D +#define CIV391T3CDR 0x0904000E +#define CIV391T3CDT 0x0904000F +#define CIV391T3 0x09040010 +#define CIV392T3CDR 0x09040011 +#define CIV392T3CDT 0x09040012 +#define CIV392T3 0x09040013 +#define CIV39T1CDT 0x09040014 +#define CIV39T1 0x09040015 +#define CIV39T2CDT 0x09040016 +#define CIV39T2 0x09040017 +#define CIV39T3CDT 0x09040018 +#define CIV39T3 0x09040019 +#define CIVLIST1CDT 0x0904001A +#define CIVLIST1 0x0904001B +#define CIVLIST2CDT 0x0904001C +#define CIVLIST2 0x0904001D +#define CIVLIST3CDT 0x0904001E +#define CIVLIST3 0x0904001F +#define COL391T2CDR 0x09040020 +#define COL391T2CDT 0x09040021 +#define COL391T2 0x09040022 +#define COL391T3CDR 0x09040023 +#define COL391T3CDT 0x09040024 +#define COL391T3 0x09040025 +#define COL392T3CDR 0x09040026 +#define COL392T3CDT 0x09040027 +#define COL392T3 0x09040028 +#define COL39T1CDT 0x09040029 +#define COL39T1 0x0904002A +#define COL39T2CDT 0x0904002B +#define COL39T2 0x0904002C +#define COL39T3CDT 0x0904002D +#define COL39T3 0x0904002E +#define COLLIST2CDT 0x0904002F +#define COLLIST2 0x09040030 +#define COLLIST3CDT 0x09040031 +#define COLLIST3 0x09040032 +#define CON39TALCDT 0x09040033 +#define CON39TAL 0x09040034 +#define EKL391T2CDR 0x09040035 +#define EKL391T2CDT 0x09040036 +#define EKL391T2 0x09040037 +#define EKL391T3CDR 0x09040038 +#define EKL391T3CDT 0x09040039 +#define EKL391T3 0x0904003A +#define EKL392T3CDR 0x0904003B +#define EKL392T3CDT 0x0904003C +#define EKL392T3 0x0904003D +#define EKL39T1CDT 0x0904003E +#define EKL39T1 0x0904003F +#define EKL39T2CDT 0x09040040 +#define EKL39T2 0x09040041 +#define EKL39T3CDT 0x09040042 +#define EKL39T3 0x09040043 +#define EKLLIST1CDT 0x09040044 +#define EKLLIST1 0x09040045 +#define EKLLIST2CDT 0x09040046 +#define EKLLIST2 0x09040047 +#define EKLLIST3CDT 0x09040048 +#define EKLLIST3 0x09040049 +#define EXE391T2CDR 0x0904004A +#define EXE391T2CDT 0x0904004B +#define EXE391T2 0x0904004C +#define EXE391T3CDR 0x0904004D +#define EXE391T3CDT 0x0904004E +#define EXE391T3 0x0904004F +#define EXE392T3CDR 0x09040050 +#define EXE392T3CDT 0x09040051 +#define EXE392T3 0x09040052 +#define EXE39T1CDT 0x09040053 +#define EXE39T1 0x09040054 +#define EXE39T2CDT 0x09040055 +#define EXE39T2 0x09040056 +#define EXE39T3CDT 0x09040057 +#define EXE39T3 0x09040058 +#define GEO39ENTCDT 0x09040059 +#define GEO39ENT 0x0904005A +#define GEO39EXTCDT 0x0904005B +#define GEO39EXT 0x0904005C +#define GEO39GEMCDR 0x0904005D +#define GEO39GEMCDT 0x0904005E +#define GEO39GEM 0x0904005F +#define GEO39TRICDR 0x09040060 +#define GEO39TRICDT 0x09040061 +#define GEO39TRI 0x09040062 +#define LAT391T2CDR 0x09040063 +#define LAT391T2CDT 0x09040064 +#define LAT391T2 0x09040065 +#define LAT391T3CDR 0x09040066 +#define LAT391T3CDT 0x09040067 +#define LAT391T3 0x09040068 +#define LAT392T3CDR 0x09040069 +#define LAT392T3CDT 0x0904006A +#define LAT392T3 0x0904006B +#define LAT39T1CDT 0x0904006C +#define LAT39T1 0x0904006D +#define LAT39T2CDT 0x0904006E +#define LAT39T2 0x0904006F +#define LAT39T3CDT 0x09040070 +#define LAT39T3 0x09040071 +#define LATLIST1CDT 0x09040072 +#define LATLIST1 0x09040073 +#define LATLIST2CDT 0x09040074 +#define LATLIST2 0x09040075 +#define LATLIST3CDT 0x09040076 +#define LATLIST3 0x09040077 +#define MAS391T2CDR 0x09040078 +#define MAS391T2CDT 0x09040079 +#define MAS391T2 0x0904007A +#define MAS391T3CDR 0x0904007B +#define MAS391T3CDT 0x0904007C +#define MAS391T3 0x0904007D +#define MAS392T3CDR 0x0904007E +#define MAS392T3CDT 0x0904007F +#define MAS392T3 0x09040080 +#define MAS39T1CDT 0x09040081 +#define MAS39T1 0x09040082 +#define MAS39T2CDT 0x09040083 +#define MAS39T2 0x09040084 +#define MAS39T3CDT 0x09040085 +#define MAS39T3 0x09040086 +#define MASLIST1CDT 0x09040087 +#define MASLIST1 0x09040088 +#define MASLIST2CDT 0x09040089 +#define MASLIST2 0x0904008A +#define MASLIST3CDT 0x0904008B +#define MASLIST3 0x0904008C +#define RAYS39CDT 0x0904008D +#define RAYS39 0x0904008E +#define TRI39ALOCDT 0x0904008F +#define TRI39ALO 0x09040090 +#define TRI39GEMCDT 0x09040091 +#define TRI39GEM 0x09040092 + // 147 entities in TXTs, 147 in datafiles. + // room40 +#define R40L0 0x09050000 +#define room40_PAL 0x09050001 +#define room40_flr 0x09050002 +#define GEO40ASCCDT 0x09050003 +#define GEO40ASC 0x09050004 +#define GEO40DESCDT 0x09050005 +#define GEO40DES 0x09050006 +#define GEO40DIPCDT 0x09050007 +#define GEO40DIP 0x09050008 +#define GUA40ENTCDT 0x09050009 +#define GUA40ENT 0x0905000A +#define GUA40STACDT 0x0905000B +#define GUA40STA 0x0905000C +#define GUA40TALCDT 0x0905000D +#define GUA40TAL 0x0905000E +#define PAI40FAGCDT 0x0905000F +#define PAI40FAG 0x09050010 +#define PAI40IDLCDT 0x09050011 +#define PAI40IDL 0x09050012 +#define PAI40LEACDT 0x09050013 +#define PAI40LEA 0x09050014 +#define PAI40STACDR 0x09050015 +#define PAI40STACDT 0x09050016 +#define PAI40STA 0x09050017 +#define PAI40TALCDT 0x09050018 +#define PAI40TAL 0x09050019 + // 26 entities in TXTs, 26 in datafiles. + // room41 +#define R41L0 0x09060000 +#define R41L1 0x09060001 +#define R41G1 0x09060002 +#define room41_PAL 0x09060003 +#define room41_flr 0x09060004 +#define GEO41ENTCDT 0x09060005 +#define GEO41ENT 0x09060006 +#define GEO41OP2CDT 0x09060007 +#define GEO41OP2 0x09060008 +#define GEO41OPECDT 0x09060009 +#define GEO41OPE 0x0906000A +#define GEO41THECDR 0x0906000B +#define GEO41THECDT 0x0906000C +#define GEO41THE 0x0906000D +#define GLO41IDLCDT 0x0906000E +#define GLO41IDL 0x0906000F +#define GLO41KEYCDR 0x09060010 +#define GLO41KEYCDT 0x09060011 +#define GLO41KEY 0x09060012 +#define GLO41TALCDT 0x09060013 +#define GLO41TAL 0x09060014 +#define GUA41ANSCDT 0x09060015 +#define GUA41ANS 0x09060016 +#define GUA41GLOCDT 0x09060017 +#define GUA41GLO 0x09060018 +#define GUA41IDLCDT 0x09060019 +#define GUA41IDL 0x0906001A +#define GUA41KEYCDR 0x0906001B +#define GUA41KEYCDT 0x0906001C +#define GUA41KEY 0x0906001D +#define GUA41PHOCDT 0x0906001E +#define GUA41PHO 0x0906001F +#define GUA41TALCDT 0x09060020 +#define GUA41TAL 0x09060021 +#define PAI41HANCDT 0x09060022 +#define PAI41HAN 0x09060023 +#define PAI41LEACDT 0x09060024 +#define PAI41LEA 0x09060025 +#define PAI41TALCDT 0x09060026 +#define PAI41TAL 0x09060027 +#define PHONE41CDT 0x09060028 +#define PHONE41 0x09060029 + // 42 entities in TXTs, 42 in datafiles. + // room42 +#define room42_PAL 0x09070000 +#define R42L0 0x09070001 +#define R42L1 0x09070002 +#define R42L2 0x09070003 +#define R42G1 0x09070004 +#define R42G2 0x09070005 +#define room42_flr 0x09070006 +#define CHALICE42 0x09070007 +#define CHALICE42_PAL 0x09070008 +#define GEO42CHACDT 0x09070009 +#define GEO42CHA 0x0907000A +#define GEO42DESCDR 0x0907000B +#define GEO42DESCDT 0x0907000C +#define GEO42DES 0x0907000D + // 14 entities in TXTs, 14 in datafiles. + // room43 +#define room43_PAL 0x09080000 +#define R43L0 0x09080001 +#define R43L1 0x09080002 +#define R43G1 0x09080003 +#define room43_flr 0x09080004 +#define GEO43DR2CDT 0x09080005 +#define GEO43DR2 0x09080006 +#define GEO43DRYCDT 0x09080007 +#define GEO43DRY 0x09080008 +#define GEO43HAN 0x09080009 +#define GEO43HANCDT 0x0908000A +#define GEO43KEYCDT 0x0908000B +#define GEO43KEY 0x0908000C +#define GEO43PLACDT 0x0908000D +#define GEO43PLA 0x0908000E +#define GEO43PRECDT 0x0908000F +#define GEO43PRE 0x09080010 +#define GEO43SOACDT 0x09080011 +#define GEO43SOA 0x09080012 +#define GEO43SWPCDT 0x09080013 +#define GEO43SWP 0x09080014 +#define GEO43WATCDT 0x09080015 +#define GEO43WAT 0x09080016 +#define SOAP43CDT 0x09080017 +#define SOAP43 0x09080018 +#define WATER43CDT 0x09080019 +#define WATER43 0x0908001A + // 27 entities in TXTs, 27 in datafiles. + // room48 +#define R48SPRPAL 0x09090000 +#define R48L0 0x09090001 +#define R48L1 0x09090002 +#define R48L2 0x09090003 +#define R48G1 0x09090004 +#define R48G2 0x09090005 +#define R48PAL 0x09090006 +#define room48_flr 0x09090007 +#define R48PLX 0x09090008 +#define GEO48BENCDR 0x09090009 +#define GEO48BENCDT 0x0909000A +#define GEO48BEN 0x0909000B +#define GEO48GIVCDR 0x0909000C +#define GEO48GIVCDT 0x0909000D +#define GEO48GIV 0x0909000E +#define GEO48LENCDT 0x0909000F +#define GEO48LEN 0x09090010 +#define PRI48CANCDR 0x09090011 +#define PRI48CANCDT 0x09090012 +#define PRI48CAN 0x09090013 +#define PRI48IDLCDT 0x09090014 +#define PRI48IDL 0x09090015 +#define PRI48PO1CDT 0x09090016 +#define PRI48PO1 0x09090017 +#define PRI48PO2CDT 0x09090018 +#define PRI48PO2 0x09090019 +#define PRI48RETCDT 0x0909001A +#define PRI48RET 0x0909001B +#define PRI48TAKCDT 0x0909001C +#define PRI48TAK 0x0909001D +#define PRI48TALCDT 0x0909001E +#define PRI48TAL 0x0909001F +#define PRI48TURCDR 0x09090020 +#define PRI48TURCDT 0x09090021 +#define PRI48TUR 0x09090022 +#define WINDOW1 0x09090023 +#define WINDOW1_PAL 0x09090024 +#define WINDOW2 0x09090025 +#define WINDOW2_PAL 0x09090026 + // 39 entities in TXTs, 39 in datafiles. +// ireland + // sound_fx +#define FX_EIRBIRD3 0x0A000000 +#define FX_SHOCK2 0x0A000001 +#define FX_EIRBIRD1 0x0A000002 +#define FX_EIRBIRD2 0x0A000003 +#define FX_SWITCH19 0x0A000004 +#define FX_TRAPOPEN 0x0A000005 +#define FX_VIOLIN19 0x0A000006 +#define FX_WHISTLE 0x0A000007 +#define FX_BARFLAP 0x0A000008 +#define FX_DORCLOSE20 0x0A000009 +#define FX_DRINK 0x0A00000A +#define FX_FITZHIT 0x0A00000B +#define FX_FITZRUN 0x0A00000C +#define FX_FITZUP 0x0A00000D +#define FX_FUSE20 0x0A00000E +#define FX_PULLPINT 0x0A00000F +#define FX_SNEEZE1 0x0A000010 +#define FX_SNEEZE2 0x0A000011 +#define FX_WASHER 0x0A000012 +#define FX_CELTAP 0x0A000013 +#define FX_DRIPIRE 0x0A000014 +#define FX_DRIPIRE2 0x0A000015 +#define FX_TAP 0x0A000016 +#define FX_TAP2 0x0A000017 +#define FX_CLIMBHAY 0x0A000018 +#define FX_FARMERGO 0x0A000019 +#define FX_CASTLWAL 0x0A00001A +#define FX_CLIMBFAL 0x0A00001B +#define FX_KEYSTEP 0x0A00001C +#define FX_WIND 0x0A00001D +#define FX_GEOGOAT 0x0A00001E +#define FX_GOATBAA 0x0A00001F +#define FX_GOATCHEW 0x0A000020 +#define FX_GOATDOH 0x0A000021 +#define FX_PLOUGH 0x0A000022 +#define FX_EIRDRIP1 0x0A000023 +#define FX_EIRDRIP2 0x0A000024 +#define FX_LADDWN25 0x0A000025 +#define FX_LADDUP25 0x0A000026 +#define FX_SECDOR25 0x0A000027 +#define FX_SLABFALL 0x0A000028 +#define FX_SLABUP 0x0A000029 +#define FX_TRIGER25 0x0A00002A +#define FX_WRING 0x0A00002B +#define FX_LEVER 0x0A00002C +#define FX_LEVER2 0x0A00002D +#define FX_RAT3A 0x0A00002E +#define FX_RAT3B 0x0A00002F +#define FX_RAT3C 0x0A000030 +#define FX_RAT3D 0x0A000031 + // 50 entities in TXTs, 50 in datafiles. + // room19 +#define R19SPRPAL 0x0A010000 +#define R19L0 0x0A010001 +#define R19L1 0x0A010002 +#define R19L2 0x0A010003 +#define R19G1 0x0A010004 +#define R19G2 0x0A010005 +#define R19PAL 0x0A010006 +#define R19FLR 0x0A010007 +#define ASSTAP 0x0A010008 +#define ASSTAPCDT 0x0A010009 +#define ASSTLK19 0x0A01000A +#define ASSTLK19CDT 0x0A01000B +#define ASSWLK2 0x0A01000C +#define ASSWLK2CDT 0x0A01000D +#define ASSWLK6 0x0A01000E +#define ASSWLK6CDT 0x0A01000F +#define BOXCVR 0x0A010010 +#define BOXCVRCDT 0x0A010011 +#define GEODRN 0x0A010012 +#define GEODRNCDT 0x0A010013 +#define GEOMAG 0x0A010014 +#define GEOMAGCDT 0x0A010015 +#define GEORCT 0x0A010016 +#define GEORCTCDT 0x0A010017 +#define GEOTRP 0x0A010018 +#define GEOTRPCDT 0x0A010019 +#define GEOTRP8 0x0A01001A +#define GEOTRP8CDT 0x0A01001B +#define GEOWRN 0x0A01001C +#define GEOWRNCDT 0x0A01001D +#define LID19 0x0A01001E +#define LID19CDT 0x0A01001F +#define MAGCON 0x0A010020 +#define MAGCONCDT 0x0A010021 +#define MAGCONCDR 0x0A010022 +#define MAGMOV 0x0A010023 +#define MAGMOVCDT 0x0A010024 +#define MAGMOVCDR 0x0A010025 +#define MAGSHK 0x0A010026 +#define MAGSHKCDT 0x0A010027 +#define MAGSHY 0x0A010028 +#define MAGSHYCDT 0x0A010029 +#define MAGSHYCDR 0x0A01002A +#define MAGSLK 0x0A01002B +#define MAGSLKCDT 0x0A01002C +#define MAGTALK 0x0A01002D +#define MAGTALKCDT 0x0A01002E +#define MAGTLK 0x0A01002F +#define MAGTLKCDT 0x0A010030 +#define MAGTLK8 0x0A010031 +#define MAGTLK8CDT 0x0A010032 +#define TRPOPN 0x0A010033 +#define TRPOPNCDT 0x0A010034 + // 53 entities in TXTs, 53 in datafiles. + // room20 +#define R20SPRPAL 0x0A020000 +#define R20L0 0x0A020001 +#define R20L1 0x0A020002 +#define R20L2 0x0A020003 +#define R20L3 0x0A020004 +#define R20G1 0x0A020005 +#define R20G2 0x0A020006 +#define R20G3 0x0A020007 +#define R20PAL 0x0A020008 +#define R20FLR 0x0A020009 +#define BARTPS 0x0A02000A +#define BARTPSCDT 0x0A02000B +#define BARTWL 0x0A02000C +#define BARTWLCDT 0x0A02000D +#define BRIDRN 0x0A02000E +#define BRIDRNCDT 0x0A02000F +#define BRIDRNCDR 0x0A020010 +#define BRIFTZ 0x0A020011 +#define BRIFTZCDT 0x0A020012 +#define BRIFTZCDR 0x0A020013 +#define BRITLK 0x0A020014 +#define BRITLKCDT 0x0A020015 +#define BRITLK8 0x0A020016 +#define BRITLK8CDT 0x0A020017 +#define BRITLK9 0x0A020018 +#define BRITLK9CDT 0x0A020019 +#define BRITRN 0x0A02001A +#define BRITRNCDT 0x0A02001B +#define BRITRNCDR 0x0A02001C +#define DOROPN20 0x0A02001D +#define DOROPN20CDT 0x0A02001E +#define DOROPN20CDR 0x0A02001F +#define DOYDRN 0x0A020020 +#define DOYDRNCDT 0x0A020021 +#define DOYDRNCDR 0x0A020022 +#define DOYFTZ 0x0A020023 +#define DOYFTZCDT 0x0A020024 +#define DOYFTZCDR 0x0A020025 +#define DOYTLK 0x0A020026 +#define DOYTLKCDT 0x0A020027 +#define DOYTLK20 0x0A020028 +#define DOYTLK20CDT 0x0A020029 +#define DOYTLK8 0x0A02002A +#define DOYTLK8CDT 0x0A02002B +#define DOYTLK9 0x0A02002C +#define DOYTLK9CDT 0x0A02002D +#define DOYTRN 0x0A02002E +#define DOYTRNCDT 0x0A02002F +#define DOYTRNCDR 0x0A020030 +#define DOYTRN20 0x0A020031 +#define DOYTRN20CDT 0x0A020032 +#define DOYTRN20CDR 0x0A020033 +#define DOYTRN8 0x0A020034 +#define DOYTRN8CDT 0x0A020035 +#define DOYTRN8CDR 0x0A020036 +#define DOYTRN9 0x0A020037 +#define DOYTRN9CDT 0x0A020038 +#define DOYTRN9CDR 0x0A020039 +#define FIDPLY 0x0A02003A +#define FIDPLYCDT 0x0A02003B +#define FLPOPN 0x0A02003C +#define FLPOPNCDT 0x0A02003D +#define FRMTLK20 0x0A02003E +#define FRMTLK20CDT 0x0A02003F +#define FTZAGT 0x0A020040 +#define FTZAGTCDT 0x0A020041 +#define FTZGET 0x0A020042 +#define FTZGETCDT 0x0A020043 +#define FTZGETCDR 0x0A020044 +#define FTZRUN 0x0A020045 +#define FTZRUNCDT 0x0A020046 +#define FTZSTD 0x0A020047 +#define FTZSTDCDT 0x0A020048 +#define FTZTALK 0x0A020049 +#define FTZTALKCDT 0x0A02004A +#define FTZTLK 0x0A02004B +#define FTZTLKCDT 0x0A02004C +#define FTZTLK8 0x0A02004D +#define FTZTLK8CDT 0x0A02004E +#define GEODRN20 0x0A02004F +#define GEODRN20CDT 0x0A020050 +#define GEOPHN20 0x0A020051 +#define GEOPHN20CDT 0x0A020052 +#define GEOPHN20CDR 0x0A020053 +#define GEOPLG 0x0A020054 +#define GEOPLGCDT 0x0A020055 +#define GEOPLG8 0x0A020056 +#define GEOPLG8CDT 0x0A020057 +#define GEOSEE 0x0A020058 +#define GEOSEECDT 0x0A020059 +#define GEOSNR 0x0A02005A +#define GEOSNRCDT 0x0A02005B +#define GEOSNR8 0x0A02005C +#define GEOSNR8CDT 0x0A02005D +#define GEOTWL20 0x0A02005E +#define GEOTWL20CDT 0x0A02005F +#define GEOXIT20 0x0A020060 +#define GEOXIT20CDT 0x0A020061 +#define GLSGEO 0x0A020062 +#define GLSGEOCDT 0x0A020063 +#define GLSWSH 0x0A020064 +#define GLSWSHCDT 0x0A020065 +#define LESDOR 0x0A020066 +#define LESDORCDT 0x0A020067 +#define LESDOY 0x0A020068 +#define LESDOYCDT 0x0A020069 +#define LESFLP 0x0A02006A +#define LESFLPCDT 0x0A02006B +#define LESFTZ 0x0A02006C +#define LESFTZCDT 0x0A02006D +#define LESFTZCDR 0x0A02006E +#define LESGLS 0x0A02006F +#define LESGLSCDT 0x0A020070 +#define LESGLSCDR 0x0A020071 +#define LESLNS 0x0A020072 +#define LESLNSCDT 0x0A020073 +#define LESLNSCDR 0x0A020074 +#define LESMOV 0x0A020075 +#define LESMOVCDT 0x0A020076 +#define LESMOVCDR 0x0A020077 +#define LESPMP 0x0A020078 +#define LESPMPCDT 0x0A020079 +#define LESPNT 0x0A02007A +#define LESPNTCDT 0x0A02007B +#define LESPNT20 0x0A02007C +#define LESPNT20CDT 0x0A02007D +#define LESPNT8 0x0A02007E +#define LESPNT8CDT 0x0A02007F +#define LESPNT8CDR 0x0A020080 +#define LESTALK 0x0A020081 +#define LESTALKCDT 0x0A020082 +#define LESTLK 0x0A020083 +#define LESTLKCDT 0x0A020084 +#define LESTLK20 0x0A020085 +#define LESTLK20CDT 0x0A020086 +#define LESTLK8 0x0A020087 +#define LESTLK8CDT 0x0A020088 +#define LESTLK9 0x0A020089 +#define LESTLK9CDT 0x0A02008A +#define LESTURN 0x0A02008B +#define LESTURNCDT 0x0A02008C +#define LESTURNCDR 0x0A02008D +#define LESWLK 0x0A02008E +#define LESWLKCDT 0x0A02008F +#define LESWLK8 0x0A020090 +#define LESWLK8CDT 0x0A020091 +#define LESWSH 0x0A020092 +#define LESWSHCDT 0x0A020093 +#define LESWSHCDR 0x0A020094 +#define MAGENT 0x0A020095 +#define MAGENTCDT 0x0A020096 +#define MAGEXIT 0x0A020097 +#define MAGEXITCDT 0x0A020098 +#define MAGMOV20 0x0A020099 +#define MAGMOV20CDT 0x0A02009A +#define MAGTEST 0x0A02009B +#define MAGTESTCDT 0x0A02009C +#define MAGTLK20 0x0A02009D +#define MAGTLK20CDT 0x0A02009E +#define PLGWLL 0x0A02009F +#define PLGWLLCDT 0x0A0200A0 +#define RONDRN 0x0A0200A1 +#define RONDRNCDT 0x0A0200A2 +#define RONDRNCDR 0x0A0200A3 +#define RONDRP 0x0A0200A4 +#define RONDRPCDT 0x0A0200A5 +#define RONFTZ 0x0A0200A6 +#define RONFTZCDT 0x0A0200A7 +#define RONFTZCDR 0x0A0200A8 +#define RONGEO 0x0A0200A9 +#define RONGEOCDT 0x0A0200AA +#define RONGEOCDR 0x0A0200AB +#define RONGLS 0x0A0200AC +#define RONGLSCDT 0x0A0200AD +#define RONGLSCDR 0x0A0200AE +#define RONGLS8 0x0A0200AF +#define RONGLS8CDT 0x0A0200B0 +#define RONPIK 0x0A0200B1 +#define RONPIKCDT 0x0A0200B2 +#define RONPKT 0x0A0200B3 +#define RONPKTCDT 0x0A0200B4 +#define RONPKTCDR 0x0A0200B5 +#define RONSNR 0x0A0200B6 +#define RONSNRCDT 0x0A0200B7 +#define RONSNZ 0x0A0200B8 +#define RONSNZCDT 0x0A0200B9 +#define RONSNZ2 0x0A0200BA +#define RONSNZ2CDT 0x0A0200BB +#define RONTLK 0x0A0200BC +#define RONTLKCDT 0x0A0200BD +#define RONTLK2 0x0A0200BE +#define RONTLK2CDT 0x0A0200BF +#define RONWIR 0x0A0200C0 +#define RONWIRCDT 0x0A0200C1 +#define RONWIRCDR 0x0A0200C2 +#define SNRTBL 0x0A0200C3 +#define SNRTBLCDT 0x0A0200C4 + // 197 entities in TXTs, 197 in datafiles. + // room21 +#define R21L0 0x0A030000 +#define R21L1 0x0A030001 +#define R21L2 0x0A030002 +#define R21G1 0x0A030003 +#define R21G2 0x0A030004 +#define R21PAL 0x0A030005 +#define R21FLR 0x0A030006 +#define CALBLO 0x0A030007 +#define CALBLOCDT 0x0A030008 +#define GEMSHN 0x0A030009 +#define GEMSHNCDT 0x0A03000A +#define GEOGEM 0x0A03000B +#define GEOGEMCDT 0x0A03000C +#define GEOGEM8 0x0A03000D +#define GEOGEM8CDT 0x0A03000E +#define GEOLVR 0x0A03000F +#define GEOLVRCDT 0x0A030010 +#define GEOLVR21 0x0A030011 +#define GEOLVR21CDT 0x0A030012 +#define GEOLVR8 0x0A030013 +#define GEOLVR8CDT 0x0A030014 +#define GEOTAP 0x0A030015 +#define GEOTAPCDT 0x0A030016 +#define GEOTLK21 0x0A030017 +#define GEOTLK21CDT 0x0A030018 +#define GEOTORCH 0x0A030019 +#define GEOTORCHCDT 0x0A03001A +#define GEOTRN21 0x0A03001B +#define GEOTRN21CDT 0x0A03001C +#define GEOTRN21CDR 0x0A03001D +#define GEOTWL21 0x0A03001E +#define GEOTWL21CDT 0x0A03001F +#define LVRPSH 0x0A030020 +#define LVRPSHCDT 0x0A030021 +#define MAGCEL 0x0A030022 +#define MAGCELCDT 0x0A030023 +#define MAGCELCDR 0x0A030024 +#define MAGTLK21 0x0A030025 +#define MAGTLK21CDT 0x0A030026 +#define TAPDRP 0x0A030027 +#define TAPDRPCDT 0x0A030028 +#define TAPRUN 0x0A030029 +#define TAPRUNCDT 0x0A03002A +#define TORCH21 0x0A03002B +#define TORCH21CDT 0x0A03002C + // 45 entities in TXTs, 45 in datafiles. + // room22 +#define R22SPRPAL 0x0A040000 +#define R22L0 0x0A040001 +#define R22L1 0x0A040002 +#define R22G1 0x0A040003 +#define R22PAL 0x0A040004 +#define R22FLR 0x0A040005 +#define FRMBUK 0x0A040006 +#define FRMBUKCDT 0x0A040007 +#define FRMSTD 0x0A040008 +#define FRMSTDCDT 0x0A040009 +#define FRMTLK 0x0A04000A +#define FRMTLKCDT 0x0A04000B +#define FRMWLK 0x0A04000C +#define FRMWLKCDT 0x0A04000D +#define GEOCLM 0x0A04000E +#define GEOCLMCDT 0x0A04000F +#define GEOCLMCDR 0x0A040010 +#define GEOPSH22 0x0A040011 +#define GEOPSH22CDT 0x0A040012 + // 19 entities in TXTs, 19 in datafiles. + // room23 +#define R23L0 0x0A050000 +#define R23PAL 0x0A050001 +#define GEOCLM23 0x0A050002 +#define GEOCLM23CDT 0x0A050003 +#define GEOCLM23CDR 0x0A050004 +#define GEOKEY23 0x0A050005 +#define GEOKEY23CDT 0x0A050006 +#define GEOTOP 0x0A050007 +#define GEOTOPCDT 0x0A050008 +#define GEOTOPCDR 0x0A050009 +#define GEOTRY23 0x0A05000A +#define GEOTRY23CDT 0x0A05000B +#define GEOTUG23 0x0A05000C +#define GEOTUG23CDT 0x0A05000D +#define LFTKEY23 0x0A05000E +#define LFTKEY23CDT 0x0A05000F + // 16 entities in TXTs, 16 in datafiles. + // room24 +#define R24L0 0x0A060000 +#define R24L1 0x0A060001 +#define R24G1 0x0A060002 +#define R24PLX 0x0A060003 +#define R24PAL 0x0A060004 +#define R24FLR 0x0A060005 +#define GEOASC24 0x0A060006 +#define GEOASC24CDT 0x0A060007 +#define GEODES24 0x0A060008 +#define GEODES24CDT 0x0A060009 +#define GEOHITL 0x0A06000A +#define GEOHITLCDT 0x0A06000B +#define GEOHITR 0x0A06000C +#define GEOHITRCDT 0x0A06000D +#define GEOLAD 0x0A06000E +#define GEOLADCDT 0x0A06000F +#define GEOLAD8 0x0A060010 +#define GEOLAD8CDT 0x0A060011 +#define GEOPLW 0x0A060012 +#define GEOPLWCDT 0x0A060013 +#define GEORUN 0x0A060014 +#define GEORUNCDT 0x0A060015 +#define GEOUPL24 0x0A060016 +#define GEOUPL24CDT 0x0A060017 +#define GEOUPR24 0x0A060018 +#define GEOUPR24CDT 0x0A060019 +#define GOTBAKL 0x0A06001A +#define GOTBAKLCDT 0x0A06001B +#define GOTBAKR 0x0A06001C +#define GOTBAKRCDT 0x0A06001D +#define GOTCL 0x0A06001E +#define GOTCLCDT 0x0A06001F +#define GOTCR 0x0A060020 +#define GOTCRCDT 0x0A060021 +#define GOTEAT 0x0A060022 +#define GOTEATCDT 0x0A060023 +#define GOTPLW 0x0A060024 +#define GOTPLWCDT 0x0A060025 +#define GOTPLW1 0x0A060026 +#define GOTPLW1CDT 0x0A060027 +#define GOTRIS 0x0A060028 +#define GOTRISCDT 0x0A060029 +#define GOTRISCDR 0x0A06002A +#define PLWMOV 0x0A06002B +#define PLWMOVCDT 0x0A06002C + // 45 entities in TXTs, 45 in datafiles. + // room25 +#define R25SPRPAL 0x0A070000 +#define R25L0 0x0A070001 +#define R25L1 0x0A070002 +#define R25G1 0x0A070003 +#define R25PAL 0x0A070004 +#define R25FLR 0x0A070005 +#define ALTOPN 0x0A070006 +#define ALTOPNCDT 0x0A070007 +#define GEOASC25 0x0A070008 +#define GEOASC25CDT 0x0A070009 +#define GEOCLM25 0x0A07000A +#define GEOCLM25CDT 0x0A07000B +#define GEODES25 0x0A07000C +#define GEODES25CDT 0x0A07000D +#define GEODRY25 0x0A07000E +#define GEODRY25CDT 0x0A07000F +#define GEOFIN25 0x0A070010 +#define GEOFIN25CDT 0x0A070011 +#define GEOPLAS 0x0A070012 +#define GEOPLASCDT 0x0A070013 +#define GEOPLASCDR 0x0A070014 +#define GEOPLS 0x0A070015 +#define GEOPLSCDT 0x0A070016 +#define GEOPSH25 0x0A070017 +#define GEOPSH25CDT 0x0A070018 +#define GEOPUT 0x0A070019 +#define GEOPUTCDT 0x0A07001A +#define GEOSAC 0x0A07001B +#define GEOSACCDT 0x0A07001C +#define GEOSAC25 0x0A07001D +#define GEOSAC25CDT 0x0A07001E +#define GEOSTD25 0x0A07001F +#define GEOSTD25CDT 0x0A070020 +#define GEOSTN 0x0A070021 +#define GEOSTNCDT 0x0A070022 +#define GEOSTN8 0x0A070023 +#define GEOSTN8CDT 0x0A070024 +#define GEOTWL25 0x0A070025 +#define GEOTWL25CDT 0x0A070026 +#define GEOWALF2 0x0A070027 +#define GEOWALF2CDT 0x0A070028 +#define IMPFLR 0x0A070029 +#define IMPFLRCDT 0x0A07002A +#define IMPPLS 0x0A07002B +#define IMPPLSCDT 0x0A07002C +#define PLASWALL 0x0A07002D +#define PLASWALLCDT 0x0A07002E +#define STNFALL 0x0A07002F +#define STNFALLCDT 0x0A070030 + // 49 entities in TXTs, 49 in datafiles. + // room26 +#define R26SPRPAL 0x0A080000 +#define R26L0 0x0A080001 +#define R26L1 0x0A080002 +#define R26L2 0x0A080003 +#define R26G1 0x0A080004 +#define R26G2 0x0A080005 +#define R26PAL 0x0A080006 +#define R26FLR 0x0A080007 +#define GEOLVR08 0x0A080008 +#define GEOLVR08CDT 0x0A080009 +#define GEOLVR26 0x0A08000A +#define GEOLVR26CDT 0x0A08000B +#define LVRDRK 0x0A08000C +#define LVRDRKCDT 0x0A08000D +#define RATJMP 0x0A08000E +#define RATJMPCDT 0x0A08000F + // 16 entities in TXTs, 16 in datafiles. +// spain + // sound_fx +#define FX_SPNBIRD1 0x0B000000 +#define FX_SPNBIRD2 0x0B000001 +#define FX_AMBIEN56 0x0B000002 +#define FX_DOGS56 0x0B000003 +#define FX_PENDULUM 0x0B000004 +#define FX_CANFALL 0x0B000005 +#define FX_HOSE57 0x0B000006 +#define FX_HOSE57B 0x0B000007 +#define FX_SPAIN 0x0B000008 +#define FX_CHESS 0x0B000009 +#define FX_SECDOR59 0x0B00000A +#define FX_WINDOW59 0x0B00000B +#define FX_LIONFALL 0x0B00000C +#define FX_LIONFAL2 0x0B00000D +#define FX_TOOTHPUL 0x0B00000E +#define FX_SECDOR61 0x0B00000F +#define FX_WELLDRIP 0x0B000010 + // 17 entities in TXTs, 17 in datafiles. + // room56 +#define SPAIN_PAL 0x0B010000 +#define R56L0 0x0B010001 +#define R56L1 0x0B010002 +#define R56L2 0x0B010003 +#define R56G1 0x0B010004 +#define R56G2 0x0B010005 +#define R56PAL 0x0B010006 +#define R56FLR 0x0B010007 +#define CHALIC56 0x0B010008 +#define CHALIC56CDT 0x0B010009 +#define GARD20 0x0B01000A +#define GARD20CDT 0x0B01000B +#define GARD21 0x0B01000C +#define GARD21CDT 0x0B01000D +#define GARD22 0x0B01000E +#define GARD22CDT 0x0B01000F +#define GEOSPA10 0x0B010010 +#define GEOSPA10CDT 0x0B010011 +#define GEOSPA10CDR 0x0B010012 +#define GEOSPA11 0x0B010013 +#define GEOSPA11CDT 0x0B010014 +#define GEOSPA13 0x0B010015 +#define GEOSPA13CDT 0x0B010016 +#define GEOSPA13CDR 0x0B010017 +#define GEOSPA19 0x0B010018 +#define GEOSPA19CDT 0x0B010019 +#define GEOSPA44 0x0B01001A +#define GEOSPA44CDT 0x0B01001B +#define GEOSPA48 0x0B01001C +#define GEOSPA48CDT 0x0B01001D +#define PENDULUM 0x0B01001E +#define PENDULUMCDT 0x0B01001F +#define PIECE56 0x0B010020 +#define PIECE56CDT 0x0B010021 +#define VASC01 0x0B010022 +#define VASC01CDT 0x0B010023 +#define VASC02 0x0B010024 +#define VASC02CDT 0x0B010025 +#define VASC04 0x0B010026 +#define VASC04CDT 0x0B010027 +#define VASC05 0x0B010028 +#define VASC05CDT 0x0B010029 +#define VASC05CDR 0x0B01002A +#define VASC06 0x0B01002B +#define VASC06CDT 0x0B01002C +#define VASC26 0x0B01002D +#define VASC26CDT 0x0B01002E +#define VASC26CDR 0x0B01002F +#define VASC27 0x0B010030 +#define VASC27CDT 0x0B010031 +#define VASC28 0x0B010032 +#define VASC28CDT 0x0B010033 +#define VASC29 0x0B010034 +#define VASC29CDT 0x0B010035 +#define VASC29CDR 0x0B010036 +#define VASC30 0x0B010037 +#define VASC30CDT 0x0B010038 +#define VASC30CDR 0x0B010039 +#define VASC32 0x0B01003A +#define VASC32CDT 0x0B01003B + // 60 entities in TXTs, 60 in datafiles. + // room57 +#define R57L0 0x0B020000 +#define R57L1 0x0B020001 +#define R57G1 0x0B020002 +#define R57PAL 0x0B020003 +#define R57FLR 0x0B020004 +#define R57PLX 0x0B020005 +#define MEGA_DOWSE 0x0B020006 +#define GAR57GOB 0x0B020007 +#define GAR57GOBCDT 0x0B020008 +#define GARD01 0x0B020009 +#define GARD01CDT 0x0B02000A +#define GARD02 0x0B02000B +#define GARD02CDT 0x0B02000C +#define GARD03 0x0B02000D +#define GARD03CDT 0x0B02000E +#define GARD04 0x0B02000F +#define GARD04CDT 0x0B020010 +#define GARD04CDR 0x0B020011 +#define GARD05 0x0B020012 +#define GARD05CDT 0x0B020013 +#define GARD06 0x0B020014 +#define GARD06CDT 0x0B020015 +#define GARD07 0x0B020016 +#define GARD07CDT 0x0B020017 +#define GARD07CDR 0x0B020018 +#define GARD08 0x0B020019 +#define GARD08CDT 0x0B02001A +#define GARD09 0x0B02001B +#define GARD09CDT 0x0B02001C +#define GARD17 0x0B02001D +#define GARD17CDT 0x0B02001E +#define GARD17CDR 0x0B02001F +#define GARD18 0x0B020020 +#define GARD18CDT 0x0B020021 +#define GARD31 0x0B020022 +#define GARD31CDT 0x0B020023 +#define GARD31CDR 0x0B020024 +#define GARD32 0x0B020025 +#define GARD32CDT 0x0B020026 +#define GARD34 0x0B020027 +#define GARD34CDT 0x0B020028 +#define GARD35 0x0B020029 +#define GARD35CDT 0x0B02002A +#define GARD36 0x0B02002B +#define GARD36CDT 0x0B02002C +#define GARD37 0x0B02002D +#define GARD37CDT 0x0B02002E +#define GARD38 0x0B02002F +#define GARD38CDT 0x0B020030 +#define GARD39 0x0B020031 +#define GARD39CDT 0x0B020032 +#define GARD40 0x0B020033 +#define GARD40CDT 0x0B020034 +#define GARD40CDR 0x0B020035 +#define GARD41 0x0B020036 +#define GARD41CDT 0x0B020037 +#define GARD42 0x0B020038 +#define GARD42CDT 0x0B020039 +#define GARD43 0x0B02003A +#define GARD43CDT 0x0B02003B +#define GARD44 0x0B02003C +#define GARD44CDT 0x0B02003D +#define GARD44CDR 0x0B02003E +#define GARD45 0x0B02003F +#define GARD45CDT 0x0B020040 +#define GARDKNE 0x0B020041 +#define GARDKNECDT 0x0B020042 +#define GAUGE57 0x0B020043 +#define GAUGE57CDT 0x0B020044 +#define GEOSPA01 0x0B020045 +#define GEOSPA01CDT 0x0B020046 +#define GEOSPA20 0x0B020047 +#define GEOSPA20CDT 0x0B020048 +#define GEOSPA22 0x0B020049 +#define GEOSPA22CDT 0x0B02004A +#define GEOSPA42 0x0B02004B +#define GEOSPA42CDT 0x0B02004C +#define GEOSPA47 0x0B02004D +#define GEOSPA47CDT 0x0B02004E +#define HOLE57 0x0B02004F +#define HOLE57CDT 0x0B020050 +#define HOSE57 0x0B020051 +#define HOSE57CDT 0x0B020052 + // 83 entities in TXTs, 83 in datafiles. + // room58 +#define R58L0 0x0B030000 +#define R58L1 0x0B030001 +#define R58G1 0x0B030002 +#define R58PAL 0x0B030003 +#define R58FLR 0x0B030004 +#define R58PLX 0x0B030005 +#define GARD24 0x0B030006 +#define GARD24CDT 0x0B030007 +#define GARD25 0x0B030008 +#define GARD25CDT 0x0B030009 +#define GARD26 0x0B03000A +#define GARD26CDT 0x0B03000B +#define MAUSDOOR 0x0B03000C +#define MAUSDOORCDT 0x0B03000D +#define VASC07 0x0B03000E +#define VASC07CDT 0x0B03000F +#define VASC08 0x0B030010 +#define VASC08CDT 0x0B030011 +#define VASC09 0x0B030012 +#define VASC09CDT 0x0B030013 +#define VASC10 0x0B030014 +#define VASC10CDT 0x0B030015 +#define VASC11 0x0B030016 +#define VASC11CDT 0x0B030017 +#define VASC12 0x0B030018 +#define VASC12CDT 0x0B030019 + // 26 entities in TXTs, 26 in datafiles. + // room59 +#define R59L0 0x0B040000 +#define R59L1 0x0B040001 +#define R59L2 0x0B040002 +#define R59G1 0x0B040003 +#define R59G2 0x0B040004 +#define R59PAL 0x0B040005 +#define R59FLR 0x0B040006 +#define BIBLE59 0x0B040007 +#define BIBLE59CDT 0x0B040008 +#define BLOWOUT 0x0B040009 +#define BLOWOUTCDT 0x0B04000A +#define CANDLE59 0x0B04000B +#define CANDLE59CDT 0x0B04000C +#define CHAL59 0x0B04000D +#define CHAL59CDT 0x0B04000E +#define FLAMEL59 0x0B04000F +#define FLAMEL59CDT 0x0B040010 +#define FLAMER59 0x0B040011 +#define FLAMER59CDT 0x0B040012 +#define FLAMET59 0x0B040013 +#define FLAMET59CDT 0x0B040014 +#define GARD27 0x0B040015 +#define GARD27CDT 0x0B040016 +#define GARD28 0x0B040017 +#define GARD28CDT 0x0B040018 +#define GARD29 0x0B040019 +#define GARD29CDT 0x0B04001A +#define GARD30 0x0B04001B +#define GARD30CDT 0x0B04001C +#define GEOBIBLE 0x0B04001D +#define GEOBIBLECDT 0x0B04001E +#define GEOSPA12 0x0B04001F +#define GEOSPA12CDT 0x0B040020 +#define GEOSPA16 0x0B040021 +#define GEOSPA16CDT 0x0B040022 +#define GEOSPA17 0x0B040023 +#define GEOSPA17CDT 0x0B040024 +#define GEOSPA18 0x0B040025 +#define GEOSPA18CDT 0x0B040026 +#define GEOSPA18CDR 0x0B040027 +#define GEOSPA23 0x0B040028 +#define GEOSPA23CDT 0x0B040029 +#define GEOSPA23CDR 0x0B04002A +#define GEOSPA37 0x0B04002B +#define GEOSPA37CDT 0x0B04002C +#define GEOSPA37CDR 0x0B04002D +#define GEOSPA38 0x0B04002E +#define GEOSPA38CDT 0x0B04002F +#define GEOSPA39 0x0B040030 +#define GEOSPA39CDT 0x0B040031 +#define GEOSPA40 0x0B040032 +#define GEOSPA40CDT 0x0B040033 +#define GEOSPA41 0x0B040034 +#define GEOSPA41CDT 0x0B040035 +#define GEOSPA43 0x0B040036 +#define GEOSPA43CDT 0x0B040037 +#define GEOSPA45 0x0B040038 +#define GEOSPA45CDT 0x0B040039 +#define GEOSPA46 0x0B04003A +#define GEOSPA46CDT 0x0B04003B +#define SECDOR59 0x0B04003C +#define SECDOR59CDT 0x0B04003D +#define SNUFF59 0x0B04003E +#define SNUFF59CDT 0x0B04003F +#define TISSUE59 0x0B040040 +#define TISSUE59CDT 0x0B040041 +#define VASC13 0x0B040042 +#define VASC13CDT 0x0B040043 +#define VASC14 0x0B040044 +#define VASC14CDT 0x0B040045 +#define VASC15 0x0B040046 +#define VASC15CDT 0x0B040047 +#define VASC16 0x0B040048 +#define VASC16CDT 0x0B040049 +#define VASC17 0x0B04004A +#define VASC17CDT 0x0B04004B +#define VASC18 0x0B04004C +#define VASC18CDT 0x0B04004D +#define VASC19 0x0B04004E +#define VASC19CDT 0x0B04004F +#define VASC20 0x0B040050 +#define VASC20CDT 0x0B040051 +#define VASC20CDR 0x0B040052 +#define VASC21 0x0B040053 +#define VASC21CDT 0x0B040054 +#define VASC22 0x0B040055 +#define VASC22CDT 0x0B040056 +#define VASC23 0x0B040057 +#define VASC23CDT 0x0B040058 +#define VASC24 0x0B040059 +#define VASC24CDT 0x0B04005A +#define VASC25 0x0B04005B +#define VASC25CDT 0x0B04005C +#define VASC31 0x0B04005D +#define VASC31CDT 0x0B04005E +#define WINDSHUT 0x0B04005F +#define WINDSHUTCDT 0x0B040060 +#define WINDSHUTCDR 0x0B040061 + // 98 entities in TXTs, 98 in datafiles. + // room60 +#define R60L0 0x0B050000 +#define R60L1 0x0B050001 +#define R60L2 0x0B050002 +#define R60G1 0x0B050003 +#define R60G2 0x0B050004 +#define R60PAL 0x0B050005 +#define R60FLR 0x0B050006 +#define GARD10 0x0B050007 +#define GARD10CDT 0x0B050008 +#define GARD11 0x0B050009 +#define GARD11CDT 0x0B05000A +#define GARD13 0x0B05000B +#define GARD13CDT 0x0B05000C +#define GARD16 0x0B05000D +#define GARD16CDT 0x0B05000E +#define GARD19 0x0B05000F +#define GARD19CDT 0x0B050010 +#define GEOSPA05 0x0B050011 +#define GEOSPA05CDT 0x0B050012 +#define GEOSPA05CDR 0x0B050013 +#define GEOSPA08 0x0B050014 +#define GEOSPA08CDT 0x0B050015 +#define GEOSPA09 0x0B050016 +#define GEOSPA09CDT 0x0B050017 +#define GEOSPA09CDR 0x0B050018 +#define GEOSPA21 0x0B050019 +#define GEOSPA21CDT 0x0B05001A +#define MIRROR60 0x0B05001B +#define MIRROR60CDT 0x0B05001C + // 29 entities in TXTs, 29 in datafiles. + // room61 +#define R61L0 0x0B060000 +#define R61L1 0x0B060001 +#define R61G1 0x0B060002 +#define R61PAL 0x0B060003 +#define R61FLR 0x0B060004 +#define DUST 0x0B060005 +#define DUSTCDT 0x0B060006 +#define GEOSPA24 0x0B060007 +#define GEOSPA24CDT 0x0B060008 +#define GEOSPA25 0x0B060009 +#define GEOSPA25CDT 0x0B06000A +#define GEOSPA26 0x0B06000B +#define GEOSPA26CDT 0x0B06000C +#define GEOSPA27 0x0B06000D +#define GEOSPA27CDT 0x0B06000E +#define GEOSPA30 0x0B06000F +#define GEOSPA30CDT 0x0B060010 +#define GEOSPA31 0x0B060011 +#define GEOSPA31CDT 0x0B060012 +#define GEOSPA32 0x0B060013 +#define GEOSPA32CDT 0x0B060014 +#define GEOSPA33 0x0B060015 +#define GEOSPA33CDT 0x0B060016 +#define GEOSPA35 0x0B060017 +#define GEOSPA35CDT 0x0B060018 +#define LION1 0x0B060019 +#define LION1CDT 0x0B06001A +#define LION2 0x0B06001B +#define LION2CDT 0x0B06001C +#define LIONDOOR 0x0B06001D +#define LIONDOORCDT 0x0B06001E +#define LIONFLOR 0x0B06001F +#define LIONFLORCDT 0x0B060020 +#define ROPE61 0x0B060021 +#define ROPE61CDT 0x0B060022 +#define SECDOR61 0x0B060023 +#define SECDOR61CDT 0x0B060024 + // 37 entities in TXTs, 37 in datafiles. + // room62 +#define R62L0 0x0B070000 +#define R62PAL 0x0B070001 +#define BISHOP62 0x0B070002 +#define BISHOP62CDT 0x0B070003 +#define KING62 0x0B070004 +#define KING62CDT 0x0B070005 +#define KNIGHT62 0x0B070006 +#define KNIGHT62CDT 0x0B070007 + // 8 entities in TXTs, 8 in datafiles. +// syria + // sound_fx +#define FX_CAMERA45 0x0C000000 +#define FX_SHOCK3 0x0C000001 +#define FX_STALLBEL 0x0C000002 +#define FX_AYUBDOOR 0x0C000003 +#define FX_BALLPLAY 0x0C000004 +#define FX_CATHIT 0x0C000005 +#define FX_MARIB 0x0C000006 +#define FX_NEWTON 0x0C000007 +#define FX_STALLCAT 0x0C000008 +#define FX_STATBREK 0x0C000009 +#define FX_KEYS49 0x0C00000A +#define FX_MANG1 0x0C00000B +#define FX_MANG2 0x0C00000C +#define FX_MANG3 0x0C00000D +#define FX_UNLOCK49 0x0C00000E +#define FX_WCCHAIN 0x0C00000F +#define FX_CUBDOR 0x0C000010 +#define FX_BREKSTIK 0x0C000011 +#define FX_CLIMBDWN 0x0C000012 +#define FX_CRICKET 0x0C000013 +#define FX_GEOFAL54 0x0C000014 +#define FX_KHANDOWN 0x0C000015 +#define FX_RINGPULL 0x0C000016 +#define FX_SECDOR54 0x0C000017 +#define FX_SHOTKHAN 0x0C000018 +#define FX_SYRIWIND 0x0C000019 +#define FX_THUMP1 0x0C00001A +#define FX_SECDOR55 0x0C00001B + // 28 entities in TXTs, 28 in datafiles. + // duane +#define DUANE_MEGA 0x0C010000 +#define DUANE_WLK 0x0C010001 +#define DNETLK3 0x0C010002 +#define DNETLK3CDT 0x0C010003 +#define DNETLK5 0x0C010004 +#define DNETLK5CDT 0x0C010005 +#define XDNEMON3 0x0C010006 +#define XDNEMON3CDT 0x0C010007 +#define XDNEMON5 0x0C010008 +#define XDNEMON5CDT 0x0C010009 +#define XDNESTA3 0x0C01000A +#define XDNESTA3CDT 0x0C01000B +#define XDNESTA5 0x0C01000C +#define XDNESTA5CDT 0x0C01000D +#define XDNEPHO3 0x0C01000E +#define XDNEPHO3CDT 0x0C01000F +#define XDNEPHO5 0x0C010010 +#define XDNEPHO5CDT 0x0C010011 + // 18 entities in TXTs, 18 in datafiles. + // room45 +#define SYRIA_PAL 0x0C020000 +#define R45SPRPAL 0x0C020001 +#define R45L0 0x0C020002 +#define R45L1 0x0C020003 +#define R45G1 0x0C020004 +#define R45PAL 0x0C020005 +#define R45FLR 0x0C020006 +#define R45PLX 0x0C020007 +#define ART1 0x0C020008 +#define ART1CDT 0x0C020009 +#define ART2 0x0C02000A +#define ART2CDT 0x0C02000B +#define ART3A 0x0C02000C +#define ART3ACDT 0x0C02000D +#define ART3ACDR 0x0C02000E +#define ART4 0x0C02000F +#define ART4CDT 0x0C020010 +#define ART5 0x0C020011 +#define ART5CDT 0x0C020012 +#define ART6 0x0C020013 +#define ART6CDT 0x0C020014 +#define ART7 0x0C020015 +#define ART7CDT 0x0C020016 +#define AYU1 0x0C020017 +#define AYU1CDT 0x0C020018 +#define AYU1A 0x0C020019 +#define AYU1ACDT 0x0C02001A +#define AYU1B 0x0C02001B +#define AYU1BCDT 0x0C02001C +#define AYU5 0x0C02001D +#define AYU5CDT 0x0C02001E +#define BRUSH 0x0C02001F +#define BRUSHCDT 0x0C020020 +#define CAT1 0x0C020021 +#define CAT1CDT 0x0C020022 +#define CAT3 0x0C020023 +#define CAT3CDT 0x0C020024 +#define CAT4 0x0C020025 +#define CAT4CDT 0x0C020026 +#define CAT5 0x0C020027 +#define CAT5CDT 0x0C020028 +#define GEOCHA 0x0C020029 +#define GEOCHACDT 0x0C02002A +#define GEOSYR1 0x0C02002B +#define GEOSYR1CDT 0x0C02002C +#define GEOSYR10 0x0C02002D +#define GEOSYR10CDT 0x0C02002E +#define GEOSYR10CDR 0x0C02002F +#define GEOSYR18 0x0C020030 +#define GEOSYR18CDT 0x0C020031 +#define GEOSYR2 0x0C020032 +#define GEOSYR2CDT 0x0C020033 +#define GEOSYR5 0x0C020034 +#define GEOSYR5CDT 0x0C020035 +#define GEOSYR6 0x0C020036 +#define GEOSYR6CDT 0x0C020037 +#define GEOSYR7 0x0C020038 +#define GEOSYR7CDT 0x0C020039 +#define NEJ1 0x0C02003A +#define NEJ1CDT 0x0C02003B +#define NEJ10 0x0C02003C +#define NEJ10CDT 0x0C02003D +#define NEJ12 0x0C02003E +#define NEJ12CDT 0x0C02003F +#define NEJ13 0x0C020040 +#define NEJ13CDT 0x0C020041 +#define NEJ13CDR 0x0C020042 +#define NEJ2 0x0C020043 +#define NEJ2CDT 0x0C020044 +#define NEJ2B 0x0C020045 +#define NEJ2BCDT 0x0C020046 +#define NEJ4 0x0C020047 +#define NEJ4CDT 0x0C020048 +#define NEJ6 0x0C020049 +#define NEJ6CDT 0x0C02004A +#define NEJ7 0x0C02004B +#define NEJ7CDT 0x0C02004C +#define NEJ7B 0x0C02004D +#define NEJ7BCDT 0x0C02004E +#define NEJ8 0x0C02004F +#define NEJ8CDT 0x0C020050 +#define NEJ9 0x0C020051 +#define NEJ9CDT 0x0C020052 +#define NEWTON 0x0C020053 +#define NEWTONCDT 0x0C020054 +#define PRL1 0x0C020055 +#define PRL1CDT 0x0C020056 +#define PRL2 0x0C020057 +#define PRL2CDT 0x0C020058 +#define PRL6 0x0C020059 +#define PRL6CDT 0x0C02005A +#define PRL7 0x0C02005B +#define PRL7CDT 0x0C02005C +#define PRL8 0x0C02005D +#define PRL8CDT 0x0C02005E +#define SHO1 0x0C02005F +#define SHO1CDT 0x0C020060 +#define SHO2 0x0C020061 +#define SHO2CDT 0x0C020062 +#define SHT1 0x0C020063 +#define SHT1CDT 0x0C020064 +#define SHT2 0x0C020065 +#define SHT2CDT 0x0C020066 +#define SHT3 0x0C020067 +#define SHT3CDT 0x0C020068 +#define STA2 0x0C020069 +#define STA2CDT 0x0C02006A +#define STEAM45 0x0C02006B +#define STEAM45CDT 0x0C02006C +#define TRUCK45 0x0C02006D +#define TRUCK45CDT 0x0C02006E +#define TRUCKEMP 0x0C02006F +#define TRUCKEMPCDT 0x0C020070 +#define ULT6 0x0C020071 +#define ULT6CDT 0x0C020072 +#define ULT7 0x0C020073 +#define ULT7CDT 0x0C020074 +#define ULT8 0x0C020075 +#define ULT8CDT 0x0C020076 +#define ULT9 0x0C020077 +#define ULT9CDT 0x0C020078 +#define XGEOMON3 0x0C020079 +#define XGEOMON3CDT 0x0C02007A +#define XGEOMON5 0x0C02007B +#define XGEOMON5CDT 0x0C02007C +#define XGEOSTA3 0x0C02007D +#define XGEOSTA3CDT 0x0C02007E +#define XGEOSTA5 0x0C02007F +#define XGEOSTA5CDT 0x0C020080 +#define XGEOSTAT 0x0C020081 +#define XGEOSTATCDT 0x0C020082 + // 131 entities in TXTs, 131 in datafiles. + // room47 +#define R47L0 0x0C030000 +#define R47L1 0x0C030001 +#define R47L2 0x0C030002 +#define R47G1 0x0C030003 +#define R47G2 0x0C030004 +#define R47PAL 0x0C030005 +#define R47FLR 0x0C030006 +#define CAR1 0x0C030007 +#define CAR1CDT 0x0C030008 +#define CAR2 0x0C030009 +#define CAR2CDT 0x0C03000A +#define CAR3 0x0C03000B +#define CAR3CDT 0x0C03000C +#define CAR4 0x0C03000D +#define CAR4CDT 0x0C03000E +#define CAR5 0x0C03000F +#define CAR5CDT 0x0C030010 +#define CAR6 0x0C030011 +#define CAR6CDT 0x0C030012 +#define CRPMOV 0x0C030013 +#define CRPMOVCDT 0x0C030014 +#define GEOSYR3 0x0C030015 +#define GEOSYR3CDT 0x0C030016 +#define GEOSYR3A 0x0C030017 +#define GEOSYR3ACDT 0x0C030018 +#define GEOSYR4 0x0C030019 +#define GEOSYR4CDT 0x0C03001A +#define GEOSYR4A 0x0C03001B +#define GEOSYR4ACDT 0x0C03001C + // 29 entities in TXTs, 29 in datafiles. + // room49 +#define R49L0 0x0C040000 +#define R49L1 0x0C040001 +#define R49L2 0x0C040002 +#define R49G1 0x0C040003 +#define R49G2 0x0C040004 +#define R49PAL 0x0C040005 +#define R49FLR 0x0C040006 +#define DOOR49 0x0C040007 +#define DOOR49CDT 0x0C040008 +#define DOOR49CDR 0x0C040009 +#define GEOKEYS1 0x0C04000A +#define GEOKEYS1CDT 0x0C04000B +#define GEOSYR43 0x0C04000C +#define GEOSYR43CDT 0x0C04000D +#define KEYS 0x0C04000E +#define KEYSCDT 0x0C04000F +#define MAN1 0x0C040010 +#define MAN1CDT 0x0C040011 +#define MAN2 0x0C040012 +#define MAN2CDT 0x0C040013 +#define MAN3 0x0C040014 +#define MAN3CDT 0x0C040015 +#define MAN4 0x0C040016 +#define MAN4CDT 0x0C040017 +#define MAN4A 0x0C040018 +#define MAN4ACDT 0x0C040019 +#define ULT10 0x0C04001A +#define ULT10CDT 0x0C04001B +#define ULT15 0x0C04001C +#define ULT15CDT 0x0C04001D +#define ULT3 0x0C04001E +#define ULT3CDT 0x0C04001F +#define ULTTAK 0x0C040020 +#define ULTTAKCDT 0x0C040021 + // 34 entities in TXTs, 34 in datafiles. + // room50 +#define R50L0 0x0C050000 +#define R50L1 0x0C050001 +#define R50L2 0x0C050002 +#define R50L3 0x0C050003 +#define R50G1 0x0C050004 +#define R50G2 0x0C050005 +#define R50G3 0x0C050006 +#define R50PAL 0x0C050007 +#define R50FLR 0x0C050008 +#define CHAIN50 0x0C050009 +#define CHAIN50CDT 0x0C05000A +#define CUBDOR50 0x0C05000B +#define CUBDOR50CDT 0x0C05000C +#define DOOR50 0x0C05000D +#define DOOR50CDT 0x0C05000E +#define DOOR50CDR 0x0C05000F +#define GEOSYR48 0x0C050010 +#define GEOSYR48CDT 0x0C050011 +#define GEOSYR49 0x0C050012 +#define GEOSYR49CDT 0x0C050013 +#define GEOSYR50 0x0C050014 +#define GEOSYR50CDT 0x0C050015 +#define GEOSYR51 0x0C050016 +#define GEOSYR51CDT 0x0C050017 +#define GEOSYR51CDR 0x0C050018 +#define GEOSYR52 0x0C050019 +#define GEOSYR52CDT 0x0C05001A +#define GEOSYR53 0x0C05001B +#define GEOSYR53CDT 0x0C05001C +#define GEOSYR54 0x0C05001D +#define GEOSYR54CDT 0x0C05001E +#define TOWEL1 0x0C05001F +#define TOWEL1CDT 0x0C050020 +#define TOWEL4 0x0C050021 +#define TOWEL4CDT 0x0C050022 + // 35 entities in TXTs, 35 in datafiles. + // room53 +#define R53L0 0x0C060000 +#define R53PAL 0x0C060001 +#define BACK53PLX 0x0C060002 +#define FRONT53PLX 0x0C060003 +#define R53SPRPAL 0x0C060004 + // 5 entities in TXTs, 5 in datafiles. + // room54 +#define R54L0 0x0C070000 +#define R54L1 0x0C070001 +#define R54G1 0x0C070002 +#define R54PAL 0x0C070003 +#define R54FLR 0x0C070004 +#define R54PLX 0x0C070005 +#define GEOSYR19 0x0C070006 +#define GEOSYR19CDT 0x0C070007 +#define GEOSYR20 0x0C070008 +#define GEOSYR20CDT 0x0C070009 +#define GEOSYR22 0x0C07000A +#define GEOSYR22CDT 0x0C07000B +#define GEOSYR23 0x0C07000C +#define GEOSYR23CDT 0x0C07000D +#define GEOSYR25 0x0C07000E +#define GEOSYR25CDT 0x0C07000F +#define GEOSYR26 0x0C070010 +#define GEOSYR26CDT 0x0C070011 +#define GEOSYR27 0x0C070012 +#define GEOSYR27CDT 0x0C070013 +#define GEOSYR37 0x0C070014 +#define GEOSYR37CDT 0x0C070015 +#define GEOSYR39 0x0C070016 +#define GEOSYR39CDT 0x0C070017 +#define GEOSYR40 0x0C070018 +#define GEOSYR40CDT 0x0C070019 +#define GEOSYR41 0x0C07001A +#define GEOSYR41CDT 0x0C07001B +#define GEOSYR42 0x0C07001C +#define GEOSYR42CDT 0x0C07001D +#define GEOSYR99 0x0C07001E +#define GEOSYR99CDT 0x0C07001F +#define GUN54 0x0C070020 +#define GUN54CDT 0x0C070021 +#define KHS10 0x0C070022 +#define KHS10CDT 0x0C070023 +#define KHS12 0x0C070024 +#define KHS12CDT 0x0C070025 +#define KHS5 0x0C070026 +#define KHS5CDT 0x0C070027 +#define KHS7 0x0C070028 +#define KHS7CDT 0x0C070029 +#define KHS8 0x0C07002A +#define KHS8CDT 0x0C07002B +#define KHS9 0x0C07002C +#define KHS9CDT 0x0C07002D +#define KHSTLK54 0x0C07002E +#define KHSTLK54CDT 0x0C07002F +#define SECDOR 0x0C070030 +#define SECDORCDT 0x0C070031 +#define STCKTREE 0x0C070032 +#define STCKTREECDT 0x0C070033 +#define STICKIN 0x0C070034 +#define STICKINCDT 0x0C070035 +#define XGEOSY21 0x0C070036 +#define XGEOSY21CDT 0x0C070037 + // 56 entities in TXTs, 56 in datafiles. + // room55 +#define R55SPRPAL 0x0C080000 +#define R55L0 0x0C080001 +#define R55PAL 0x0C080002 +#define R55FLR 0x0C080003 +#define R55PLX 0x0C080004 +#define BODY55 0x0C080005 +#define BODY55CDT 0x0C080006 +#define BRITMAP 0x0C080007 +#define BRITMAP_PAL 0x0C080008 +#define DOOR55 0x0C080009 +#define DOOR55CDT 0x0C08000A +#define DOOR55CDR 0x0C08000B +#define GEOSY30T 0x0C08000C +#define GEOSY30TCDT 0x0C08000D +#define GEOSY30U 0x0C08000E +#define GEOSY30UCDT 0x0C08000F +#define GEOSYR29 0x0C080010 +#define GEOSYR29CDT 0x0C080011 +#define GEOSYR30 0x0C080012 +#define GEOSYR30CDT 0x0C080013 +#define GEOSYR31 0x0C080014 +#define GEOSYR31CDT 0x0C080015 +#define GEOSYR33 0x0C080016 +#define GEOSYR33CDT 0x0C080017 +#define GEOSYR34 0x0C080018 +#define GEOSYR34CDT 0x0C080019 +#define GEOSYR34CDR 0x0C08001A +#define GEOSYR35 0x0C08001B +#define GEOSYR35CDT 0x0C08001C +#define GEOSYR56 0x0C08001D +#define GEOSYR56CDT 0x0C08001E +#define KHS2 0x0C08001F +#define KHS2CDT 0x0C080020 +#define KHS3 0x0C080021 +#define KHS3CDT 0x0C080022 +#define KHS6 0x0C080023 +#define KHS6CDT 0x0C080024 + // 37 entities in TXTs, 37 in datafiles. +// train + // sound_fx +#define FX_SHOCK63 0x0D000000 +#define FX_TRAINEXT 0x0D000001 +#define FX_TRAININT 0x0D000002 +#define FX_DOOR65 0x0D000003 +#define FX_WIND66 0x0D000004 +#define FX_WINDOW66 0x0D000005 +#define FX_BRAKES 0x0D000006 +#define FX_DOOR69 0x0D000007 +#define FX_EKSHOOT 0x0D000008 +#define FX_FIGHT69 0x0D000009 +#define FX_PNEUMO69 0x0D00000A +#define FX_TICK69 0x0D00000B +#define FX_TRNPASS 0x0D00000C + // 13 entities in TXTs, 13 in datafiles. + // room63 +#define TRAIN_PAL 0x0D010000 +#define R63L0 0x0D010001 +#define R63L1 0x0D010002 +#define R63G1 0x0D010003 +#define R63PAL 0x0D010004 +#define R63FLR 0x0D010005 +#define GEOTRAIN_MEGA 0x0D010006 +#define GEOTRAIN_WLK 0x0D010007 +#define BASHER63 0x0D010008 +#define BASHER63CDT 0x0D010009 +#define BOXDOR64 0x0D01000A +#define BOXDOR64CDT 0x0D01000B +#define BUSHA63 0x0D01000C +#define BUSHA63CDT 0x0D01000D +#define BUSHB63 0x0D01000E +#define BUSHB63CDT 0x0D01000F +#define BUSHC63 0x0D010010 +#define BUSHC63CDT 0x0D010011 +#define DOOR63C1 0x0D010012 +#define DOOR63C1CDT 0x0D010013 +#define DOOR63C1CDR 0x0D010014 +#define DOOR63C2 0x0D010015 +#define DOOR63C2CDT 0x0D010016 +#define DOOR63C2CDR 0x0D010017 +#define DOOR63C3 0x0D010018 +#define DOOR63C3CDT 0x0D010019 +#define DOOR63C3CDR 0x0D01001A +#define GEOCLI64 0x0D01001B +#define GEOCLI64CDT 0x0D01001C +#define GEOJGL64 0x0D01001D +#define GEOJGL64CDT 0x0D01001E +#define GEOJGR64 0x0D01001F +#define GEOJGR64CDT 0x0D010020 +#define GEOLAD64 0x0D010021 +#define GEOLAD64CDT 0x0D010022 +#define GEOSHK64 0x0D010023 +#define GEOSHK64CDT 0x0D010024 +#define GEOSTDL 0x0D010025 +#define GEOSTDLCDT 0x0D010026 +#define GEOSTDR 0x0D010027 +#define GEOSTDRCDT 0x0D010028 +#define GUIDOR63 0x0D010029 +#define GUIDOR63CDT 0x0D01002A +#define GUIDSM63 0x0D01002B +#define GUIDSM63CDT 0x0D01002C +#define LADY63 0x0D01002D +#define LADY63CDT 0x0D01002E +#define LIGHT63A 0x0D01002F +#define LIGHT63ACDT 0x0D010030 +#define LIGHT63B 0x0D010031 +#define LIGHT63BCDT 0x0D010032 +#define LIGHT63C 0x0D010033 +#define LIGHT63CCDT 0x0D010034 +#define LIGHT63D 0x0D010035 +#define LIGHT63DCDT 0x0D010036 +#define LIGHT63E 0x0D010037 +#define LIGHT63ECDT 0x0D010038 +#define NICO63 0x0D010039 +#define NICO63CDT 0x0D01003A +#define POLE63 0x0D01003B +#define POLE63CDT 0x0D01003C +#define WHEELA63 0x0D01003D +#define WHEELA63CDT 0x0D01003E +#define WHEELB63 0x0D01003F +#define WHEELB63CDT 0x0D010040 +#define WHEELC63 0x0D010041 +#define WHEELC63CDT 0x0D010042 +#define WHEELD63 0x0D010043 +#define WHEELD63CDT 0x0D010044 +#define WHEELE63 0x0D010045 +#define WHEELE63CDT 0x0D010046 +#define WHEELF63 0x0D010047 +#define WHEELF63CDT 0x0D010048 + // 73 entities in TXTs, 73 in datafiles. + // room65 +#define R65L0 0x0D020000 +#define R65L1 0x0D020001 +#define R65G1 0x0D020002 +#define R65PAL 0x0D020003 +#define R65FLR 0x0D020004 +#define DOOR65 0x0D020005 +#define DOOR65CDT 0x0D020006 +#define DOOR65CDR 0x0D020007 +#define GEOGUA 0x0D020008 +#define GEOGUACDT 0x0D020009 +#define GEOLNK3 0x0D02000A +#define GEOLNK3CDT 0x0D02000B +#define GEONIC65 0x0D02000C +#define GEONIC65CDT 0x0D02000D +#define GEOSIT 0x0D02000E +#define GEOSITCDT 0x0D02000F +#define GEOSIT65 0x0D020010 +#define GEOSIT65CDT 0x0D020011 +#define GEOSTD65 0x0D020012 +#define GEOSTD65CDT 0x0D020013 +#define GEOSTD65CDR 0x0D020014 +#define GEOTIK 0x0D020015 +#define GEOTIKCDT 0x0D020016 +#define GEOTN652 0x0D020017 +#define GEOTN652CDT 0x0D020018 +#define GEOTN652CDR 0x0D020019 +#define GEOTRN65 0x0D02001A +#define GEOTRN65CDT 0x0D02001B +#define GEOTRN65CDR 0x0D02001C +#define GUADOR65 0x0D02001D +#define GUADOR65CDT 0x0D02001E +#define GUALEA65 0x0D02001F +#define GUALEA65CDT 0x0D020020 +#define GUATGN 0x0D020021 +#define GUATGNCDT 0x0D020022 +#define GUATGNCDR 0x0D020023 +#define GUATIK1 0x0D020024 +#define GUATIK1CDT 0x0D020025 +#define GUATIK2 0x0D020026 +#define GUATIK2CDT 0x0D020027 +#define GUATLK1 0x0D020028 +#define GUATLK1CDT 0x0D020029 +#define GUATLK2 0x0D02002A +#define GUATLK2CDT 0x0D02002B +#define NICGEO65 0x0D02002C +#define NICGEO65CDT 0x0D02002D +#define NICSIT65 0x0D02002E +#define NICSIT65CDT 0x0D02002F +#define NICTRN65 0x0D020030 +#define NICTRN65CDT 0x0D020031 +#define NICTRN65CDR 0x0D020032 +#define OLDREAD 0x0D020033 +#define OLDREADCDT 0x0D020034 +#define OLDREADCDR 0x0D020035 +#define OLDTIK1 0x0D020036 +#define OLDTIK1CDT 0x0D020037 +#define OLDTLK1 0x0D020038 +#define OLDTLK1CDT 0x0D020039 + // 58 entities in TXTs, 58 in datafiles. + // room66 +#define R66L0 0x0D030000 +#define R66PAL 0x0D030001 +#define R66FLR 0x0D030002 +#define BASHBURP 0x0D030003 +#define BASHBURPCDT 0x0D030004 +#define BASHCAN 0x0D030005 +#define BASHCANCDT 0x0D030006 +#define BASHCLA 0x0D030007 +#define BASHCLACDT 0x0D030008 +#define BASHDRI 0x0D030009 +#define BASHDRICDT 0x0D03000A +#define BASHSTD 0x0D03000B +#define BASHSTDCDT 0x0D03000C +#define BASHTLK1 0x0D03000D +#define BASHTLK1CDT 0x0D03000E +#define CAN66 0x0D03000F +#define CAN66CDT 0x0D030010 +#define GEOLEA 0x0D030011 +#define GEOLEACDT 0x0D030012 +#define GEOOPN1 0x0D030013 +#define GEOOPN1CDT 0x0D030014 +#define GEOOUT66 0x0D030015 +#define GEOOUT66CDT 0x0D030016 +#define SLEEPY1 0x0D030017 +#define SLEEPY1CDT 0x0D030018 +#define SLEEPY1CDR 0x0D030019 +#define SLEEPY2 0x0D03001A +#define SLEEPY2CDT 0x0D03001B + // 28 entities in TXTs, 28 in datafiles. + // room67 +#define R67L0 0x0D040000 +#define R67L1 0x0D040001 +#define R67G1 0x0D040002 +#define R67PAL 0x0D040003 +#define R67FLR 0x0D040004 +#define DOOR67 0x0D040005 +#define DOOR67CDT 0x0D040006 +#define DOOR67CDR 0x0D040007 + // 8 entities in TXTs, 8 in datafiles. + // room69 +#define R69SPRPAL 0x0D050000 +#define R69L0 0x0D050001 +#define R69L1 0x0D050002 +#define R69G1 0x0D050003 +#define R69PAL 0x0D050004 +#define R69FLR 0x0D050005 +#define ASSDIE69 0x0D050006 +#define ASSDIE69CDT 0x0D050007 +#define ASSDWN69 0x0D050008 +#define ASSDWN69CDT 0x0D050009 +#define ASSLIFT 0x0D05000A +#define ASSLIFTCDT 0x0D05000B +#define ASSTLK69 0x0D05000C +#define ASSTLK69CDT 0x0D05000D +#define BOXES69 0x0D05000E +#define BOXES69CDT 0x0D05000F +#define EKLBOX69 0x0D050010 +#define EKLBOX69CDT 0x0D050011 +#define EKLGUN 0x0D050012 +#define EKLGUNCDT 0x0D050013 +#define EKLGUN69 0x0D050014 +#define EKLGUN69CDT 0x0D050015 +#define EKLTLK69 0x0D050016 +#define EKLTLK69CDT 0x0D050017 +#define EKLFIGHT 0x0D050018 +#define EKLFIGHTCDT 0x0D050019 +#define FIGHT69 0x0D05001A +#define FIGHT69CDT 0x0D05001B +#define GEODIE69 0x0D05001C +#define GEODIE69CDT 0x0D05001D +#define GEOENT69 0x0D05001E +#define GEOENT69CDT 0x0D05001F +#define GEOSTD69 0x0D050020 +#define GEOSTD69CDT 0x0D050021 +#define GEOSTP69 0x0D050022 +#define GEOSTP69CDT 0x0D050023 +#define GEOTLK69 0x0D050024 +#define GEOTLK69CDT 0x0D050025 +#define GEOUNTIE 0x0D050026 +#define GEOUNTIECDT 0x0D050027 +#define GEOXIT69 0x0D050028 +#define GEOXIT69CDT 0x0D050029 +#define NICTKB69 0x0D05002A +#define NICTKB69CDT 0x0D05002B +#define NICTLK69 0x0D05002C +#define NICTLK69CDT 0x0D05002D +#define NICTRN69 0x0D05002E +#define NICTRN69CDT 0x0D05002F +#define NICTRN69CDR 0x0D050030 +#define NICTUG69 0x0D050031 +#define NICTUG69CDT 0x0D050032 +#define NICWLK69 0x0D050033 +#define NICWLK69CDT 0x0D050034 +#define NICXIT69 0x0D050035 +#define NICXIT69CDT 0x0D050036 +#define RGTDOR69 0x0D050037 +#define RGTDOR69CDT 0x0D050038 + // 57 entities in TXTs, 57 in datafiles. +// scotland + // sound_fx +#define FX_WIND71 0x0E000000 +#define FX_GUST71 0x0E000001 +#define FX_OWL71A 0x0E000002 +#define FX_OWL71B 0x0E000003 +#define FX_COG72A 0x0E000004 +#define FX_PING 0x0E000005 +#define FX_RUMMAGE1 0x0E000006 +#define FX_RUMMAGE2 0x0E000007 +#define FX_SECDOR72 0x0E000008 +#define FX_CHANT 0x0E000009 +#define FX_DAGGER1 0x0E00000A +#define FX_GDROP73 0x0E00000B +#define FX_GUNPOWDR 0x0E00000C +#define FX_STAFF 0x0E00000D +#define FX_TORCH73 0x0E00000E +#define FX_BAPHAMB 0x0E00000F +#define FX_FIGHT1 0x0E000010 +#define FX_REFORGE2 0x0E000011 +#define FX_ROSSODIE 0x0E000012 +#define FX_GKSWORD 0x0E000013 +#define FX_REFORGE1 0x0E000014 +#define FX_REFORGE4 0x0E000015 +#define FX_CHOKE1 0x0E000016 +#define FX_CHOKE2 0x0E000017 +#define FX_EKDIES 0x0E000018 +#define FX_FIGHT2 0x0E000019 +#define FX_GUN79 0x0E00001A + // 27 entities in TXTs, 27 in datafiles. + // room71 +#define R71L0 0x0E010000 +#define R71L1 0x0E010001 +#define R71G1 0x0E010002 +#define R71PAL 0x0E010003 +#define R71FLR 0x0E010004 +#define R71PLX 0x0E010005 + // 6 entities in TXTs, 6 in datafiles. + // room72 +#define R72L0 0x0E020000 +#define R72L1 0x0E020001 +#define R72G1 0x0E020002 +#define R72PAL 0x0E020003 +#define R72FLR 0x0E020004 +#define COGL72 0x0E020005 +#define COGL72CDT 0x0E020006 +#define COGR72 0x0E020007 +#define COGR72CDT 0x0E020008 +#define GEOJMP72 0x0E020009 +#define GEOJMP72CDT 0x0E02000A +#define GEOPIPE 0x0E02000B +#define GEOPIPECDT 0x0E02000C +#define GEOPIPECDR 0x0E02000D +#define GEOPSH72 0x0E02000E +#define GEOPSH72CDT 0x0E02000F +#define GEOPUT72 0x0E020010 +#define GEOPUT72CDT 0x0E020011 +#define GEOTAK72 0x0E020012 +#define GEOTAK72CDT 0x0E020013 +#define GEOTAK72CDR 0x0E020014 +#define GEOTRY72 0x0E020015 +#define GEOTRY72CDT 0x0E020016 +#define GEOWIND2 0x0E020017 +#define GEOWIND2CDT 0x0E020018 +#define GEOWIND3 0x0E020019 +#define GEOWIND3CDT 0x0E02001A +#define GEOWIND4 0x0E02001B +#define GEOWIND4CDT 0x0E02001C +#define GEOWND72 0x0E02001D +#define GEOWND72CDT 0x0E02001E +#define HANDLE72 0x0E02001F +#define HANDLE72CDT 0x0E020020 +#define NICGEO72 0x0E020021 +#define NICGEO72CDT 0x0E020022 +#define NICJMP72 0x0E020023 +#define NICJMP72CDT 0x0E020024 +#define NICLNK72 0x0E020025 +#define NICLNK72CDT 0x0E020026 +#define NICLNK72CDR 0x0E020027 +#define NICOPY72 0x0E020028 +#define NICOPY72CDT 0x0E020029 +#define NICOPY72CDR 0x0E02002A +#define NICTLK72 0x0E02002B +#define NICTLK72CDT 0x0E02002C +#define NOSE72 0x0E02002D +#define NOSE72CDT 0x0E02002E +#define PANEL72 0x0E02002F +#define PANEL72CDT 0x0E020030 +#define PIPE72 0x0E020031 +#define PIPE72CDT 0x0E020032 +#define SPINDL72 0x0E020033 +#define SPINDL72CDT 0x0E020034 +#define WHEEL72 0x0E020035 +#define WHEEL72CDT 0x0E020036 + // 55 entities in TXTs, 55 in datafiles. + // room73 +#define R73SPRPAL 0x0E030000 +#define R73L0 0x0E030001 +#define R73L1 0x0E030002 +#define R73L2 0x0E030003 +#define R73G1 0x0E030004 +#define R73G2 0x0E030005 +#define R73PAL 0x0E030006 +#define R73FLR 0x0E030007 +#define DAGGER1 0x0E030008 +#define DAGGER1CDT 0x0E030009 +#define DAGGER2 0x0E03000A +#define DAGGER2CDT 0x0E03000B +#define DARKWALL 0x0E03000C +#define DARKWALLCDT 0x0E03000D +#define FLAME73 0x0E03000E +#define FLAME73CDT 0x0E03000F +#define GEOCRCH 0x0E030010 +#define GEOCRCHCDT 0x0E030011 +#define GEOCREEP 0x0E030012 +#define GEOCREEPCDT 0x0E030013 +#define GEODIE1 0x0E030014 +#define GEODIE1CDT 0x0E030015 +#define GEODIE2 0x0E030016 +#define GEODIE2CDT 0x0E030017 +#define GEOTHROW 0x0E030018 +#define GEOTHROWCDT 0x0E030019 +#define GEOTLK73 0x0E03001A +#define GEOTLK73CDT 0x0E03001B +#define GEOTN73 0x0E03001C +#define GEOTN73CDT 0x0E03001D +#define GEOTN73CDR 0x0E03001E +#define GMENTER 0x0E03001F +#define GMENTERCDT 0x0E030020 +#define GMSPEAK 0x0E030021 +#define GMSPEAKCDT 0x0E030022 +#define GUIDLE 0x0E030023 +#define GUIDLECDT 0x0E030024 +#define GUITALK 0x0E030025 +#define GUITALKCDT 0x0E030026 +#define GUITHROW 0x0E030027 +#define GUITHROWCDT 0x0E030028 +#define GUITURN7 0x0E030029 +#define GUITURN7CDT 0x0E03002A +#define GUITURN7CDR 0x0E03002B +#define NICENT73 0x0E03002C +#define NICENT73CDT 0x0E03002D +#define NICEX73 0x0E03002E +#define NICEX73CDT 0x0E03002F +#define NICOTHRO 0x0E030030 +#define NICOTHROCDT 0x0E030031 +#define NICPANIC 0x0E030032 +#define NICPANICCDT 0x0E030033 +#define NICTLK73 0x0E030034 +#define NICTLK73CDT 0x0E030035 +#define NICTRN73 0x0E030036 +#define NICTRN73CDT 0x0E030037 +#define NICTRN73CDR 0x0E030038 +#define NITALK73 0x0E030039 +#define NITALK73CDT 0x0E03003A +#define SPARKING 0x0E03003B +#define SPARKINGCDT 0x0E03003C +#define TORCH1 0x0E03003D +#define TORCH1CDT 0x0E03003E +#define TORCH2 0x0E03003F +#define TORCH2CDT 0x0E030040 +#define TORCH3 0x0E030041 +#define TORCH3CDT 0x0E030042 + // 67 entities in TXTs, 67 in datafiles. + // room74 +#define ENDSPRPAL 0x0E040000 +#define R74L0 0x0E040001 +#define R74L1 0x0E040002 +#define R74G1 0x0E040003 +#define R74PAL 0x0E040004 +#define R74APAL 0x0E040005 +#define R74BPAL 0x0E040006 +#define R74CPAL 0x0E040007 +#define R74DPAL 0x0E040008 +#define CHANT74 0x0E040009 +#define CHANT74CDT 0x0E04000A +#define EKFIGHT 0x0E04000B +#define EKFIGHTCDT 0x0E04000C +#define EKGUN74 0x0E04000D +#define EKGUN74CDT 0x0E04000E +#define GEOFIGHT 0x0E04000F +#define GEOFIGHTCDT 0x0E040010 +#define GEOLUK74 0x0E040011 +#define GEOLUK74CDT 0x0E040012 +#define GEOLUK74CDR 0x0E040013 +#define GEORCT74 0x0E040014 +#define GEORCT74CDT 0x0E040015 +#define GEORUN74 0x0E040016 +#define GEORUN74CDT 0x0E040017 +#define GEOSTND 0x0E040018 +#define GEOSTNDCDT 0x0E040019 +#define GEOTLK74 0x0E04001A +#define GEOTLK74CDT 0x0E04001B +#define GKKNEE 0x0E04001C +#define GKKNEECDT 0x0E04001D +#define GMGUN 0x0E04001E +#define GMGUNCDT 0x0E04001F +#define GMMOV1 0x0E040020 +#define GMMOV1CDT 0x0E040021 +#define GMMOV2 0x0E040022 +#define GMMOV2CDT 0x0E040023 +#define GMMOV3 0x0E040024 +#define GMMOV3CDT 0x0E040025 +#define GMMOV4 0x0E040026 +#define GMMOV4CDT 0x0E040027 +#define GMMOV5 0x0E040028 +#define GMMOV5CDT 0x0E040029 +#define GMMOV6 0x0E04002A +#define GMMOV6CDT 0x0E04002B +#define GMTLK1 0x0E04002C +#define GMTLK1CDT 0x0E04002D +#define GMTLK2 0x0E04002E +#define GMTLK2CDT 0x0E04002F +#define GMTLK3 0x0E040030 +#define GMTLK3CDT 0x0E040031 +#define GMTLK4 0x0E040032 +#define GMTLK4CDT 0x0E040033 +#define GMTLK5 0x0E040034 +#define GMTLK5CDT 0x0E040035 +#define GMTLK6 0x0E040036 +#define GMTLK6CDT 0x0E040037 +#define GMTLK7 0x0E040038 +#define GMTLK7CDT 0x0E040039 +#define GMTLK74 0x0E04003A +#define GMTLK74CDT 0x0E04003B +#define GMWLK 0x0E04003C +#define GMWLKCDT 0x0E04003D +#define GMWRIT74 0x0E04003E +#define GMWRIT74CDT 0x0E04003F +#define MONKFALL 0x0E040040 +#define MONKFALLCDT 0x0E040041 +#define MONKRISE 0x0E040042 +#define MONKRISECDT 0x0E040043 +#define MONKSTRS 0x0E040044 +#define MONKSTRSCDT 0x0E040045 +#define MONKTURN 0x0E040046 +#define MONKTURNCDT 0x0E040047 +#define NICFIGHT 0x0E040048 +#define NICFIGHTCDT 0x0E040049 +#define NICLUK74 0x0E04004A +#define NICLUK74CDT 0x0E04004B +#define NICLUK74CDR 0x0E04004C +#define NICRCVR 0x0E04004D +#define NICRCVRCDT 0x0E04004E +#define NICRUN74 0x0E04004F +#define NICRUN74CDT 0x0E040050 +#define NICSTND 0x0E040051 +#define NICSTNDCDT 0x0E040052 +#define NICTLK74 0x0E040053 +#define NICTLK74CDT 0x0E040054 +#define ROSSFALL 0x0E040055 +#define ROSSFALLCDT 0x0E040056 +#define ROSSTAIR 0x0E040057 +#define ROSSTAIRCDT 0x0E040058 +#define ROSSTND 0x0E040059 +#define ROSSTNDCDT 0x0E04005A +#define ROSSWLK 0x0E04005B +#define ROSSWLKCDT 0x0E04005C +#define RUBBLE 0x0E04005D +#define RUBBLECDT 0x0E04005E +#define STONLIT1 0x0E04005F +#define STONLIT1CDT 0x0E040060 +#define STONLIT2 0x0E040061 +#define STONLIT2CDT 0x0E040062 +#define STONWHT1 0x0E040063 +#define STONWHT1CDT 0x0E040064 +#define STONWHT2 0x0E040065 +#define STONWHT2CDT 0x0E040066 + // 103 entities in TXTs, 103 in datafiles. + // room75 +#define R75L0 0x0E050000 +#define R75PAL 0x0E050001 +#define R75APAL 0x0E050002 +#define R75BPAL 0x0E050003 +#define R75CPAL 0x0E050004 +#define R75DPAL 0x0E050005 +#define EKGUN 0x0E050006 +#define EKGUNCDT 0x0E050007 +#define EKGUN2 0x0E050008 +#define EKGUN2CDT 0x0E050009 +#define EKLITE 0x0E05000A +#define EKLITECDT 0x0E05000B +#define EKRELAX 0x0E05000C +#define EKRELAXCDT 0x0E05000D +#define EKTLK75 0x0E05000E +#define EKTLK75CDT 0x0E05000F +#define GEOLUK75 0x0E050010 +#define GEOLUK75CDT 0x0E050011 +#define GEOLUK75CDR 0x0E050012 +#define GTMP 0x0E050013 +#define GTMPCDT 0x0E050014 +#define NICLUK75 0x0E050015 +#define NICLUK75CDT 0x0E050016 +#define NICLUK75CDR 0x0E050017 +#define NTMP 0x0E050018 +#define NTMPCDT 0x0E050019 +#define TORCH75 0x0E05001A +#define TORCH75CDT 0x0E05001B + // 28 entities in TXTs, 28 in datafiles. + // room76 +#define R76L0 0x0E060000 +#define R76PAL 0x0E060001 +#define CHANT76 0x0E060002 +#define CHANT76CDT 0x0E060003 +#define EKGUN76 0x0E060004 +#define EKGUN76CDT 0x0E060005 +#define GKBAK 0x0E060006 +#define GKBAKCDT 0x0E060007 +#define GKKNEE76 0x0E060008 +#define GKKNEE76CDT 0x0E060009 +#define GKLOWER 0x0E06000A +#define GKLOWERCDT 0x0E06000B +#define GKSWORD 0x0E06000C +#define GKSWORDCDT 0x0E06000D +#define GKTLK 0x0E06000E +#define GKTLKCDT 0x0E06000F +#define GKTLK2 0x0E060010 +#define GKTLK2CDT 0x0E060011 +#define GMARMS 0x0E060012 +#define GMARMSCDT 0x0E060013 +#define GMSTONES 0x0E060014 +#define GMSTONESCDT 0x0E060015 +#define GMTLK76 0x0E060016 +#define GMTLK76CDT 0x0E060017 +#define GMTRN76 0x0E060018 +#define GMTRN76CDT 0x0E060019 +#define LSTONE76 0x0E06001A +#define LSTONE76CDT 0x0E06001B +#define MONKNEE 0x0E06001C +#define MONKNEECDT 0x0E06001D +#define ROSSTND76 0x0E06001E +#define ROSSTND76CDT 0x0E06001F +#define RSTONE76 0x0E060020 +#define RSTONE76CDT 0x0E060021 + // 34 entities in TXTs, 34 in datafiles. + // room77 +#define R77L0 0x0E070000 +#define R77PAL 0x0E070001 +#define CHANT77 0x0E070002 +#define CHANT77CDT 0x0E070003 +#define GEOPEER 0x0E070004 +#define GEOPEERCDT 0x0E070005 +#define GMHEAD 0x0E070006 +#define GMHEADCDT 0x0E070007 +#define NICPEER 0x0E070008 +#define NICPEERCDT 0x0E070009 +#define NICTLK77 0x0E07000A +#define NICTLK77CDT 0x0E07000B +#define ROSLUK77 0x0E07000C +#define ROSLUK77CDT 0x0E07000D + // 14 entities in TXTs, 14 in datafiles. + // room78 +#define R78L0 0x0E080000 +#define R78PAL 0x0E080001 +#define R78APAL 0x0E080002 +#define R78BPAL 0x0E080003 +#define R78CPAL 0x0E080004 +#define R78DPAL 0x0E080005 +#define R78EPAL 0x0E080006 +#define R78FPAL 0x0E080007 +#define LSTONE78 0x0E080008 +#define LSTONE78CDT 0x0E080009 +#define LSTONE78CDR 0x0E08000A +#define GMPOWER 0x0E08000B +#define GMPOWERCDT 0x0E08000C +#define GMWRITH 0x0E08000D +#define GMWRITHCDT 0x0E08000E +#define RSTONE78 0x0E08000F +#define RSTONE78CDT 0x0E080010 +#define RSTONE78CDR 0x0E080011 + // 18 entities in TXTs, 18 in datafiles. + // room79 +#define R79L0 0x0E090000 +#define R79PAL 0x0E090001 +#define EKSTD79 0x0E090002 +#define EKSTD79CDT 0x0E090003 +#define FIGHT79 0x0E090004 +#define FIGHT79CDT 0x0E090005 +#define GEOANG79 0x0E090006 +#define GEOANG79CDT 0x0E090007 +#define GEOTLK79 0x0E090008 +#define GEOTLK79CDT 0x0E090009 +#define NICSTD79 0x0E09000A +#define NICSTD79CDT 0x0E09000B +#define ROSENT79 0x0E09000C +#define ROSENT79CDT 0x0E09000D +#define ROSSHOT 0x0E09000E +#define ROSSHOTCDT 0x0E09000F +#define ROSTLK79 0x0E090010 +#define ROSTLK79CDT 0x0E090011 + // 18 entities in TXTs, 18 in datafiles. + +//} // End of namespace Sword1 + +#endif //SWORDRES_H diff --git a/backends/platform/PalmOS/Src/cd_aeroplayer.cpp b/backends/platform/PalmOS/Src/cd_aeroplayer.cpp new file mode 100644 index 0000000000..d70bf572c9 --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_aeroplayer.cpp @@ -0,0 +1,166 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/system.h" +#include "common/config-manager.h" + +#include "cd_aeroplayer.h" + +AeroCDPlayer::AeroCDPlayer(OSystem *sys) { + _sys = sys; + StrCopy(gameP, ConfMan.getActiveDomainName().c_str()); +} + +bool AeroCDPlayer::init() { + aeroplayer_Startup(); + _isInitialized = aeroplayer_PlayerIsActive(); + + if (_isInitialized) + _volumeLimit = aeroplayer_GetMaxVolumeIndex(); + + return _isInitialized; +} + +void AeroCDPlayer::release() { + aeroplayer_Shutdown(); + + // self delete + delete this; +} + +UInt32 AeroCDPlayer::getStatus() { + return aeroplayer_GetPlaybackStatus(); +} + +UInt32 AeroCDPlayer::getPosition() { + return aeroplayer_GetPosition_msec(); +} + +UInt32 AeroCDPlayer::getDuration() { + return aeroplayer_GetDuration_msec(); +} + +void AeroCDPlayer::setPosition(UInt32 value) { + aeroplayer_Seek_abs_msec(value); +} + +void AeroCDPlayer::setVolume(int volume) { + _volumeLevel = volume; + aeroplayer_SetVolumeIndex((_volumeLimit * volume) / 100); +} + +bool AeroCDPlayer::poll() { + return + ( _pckLoops != 0 && + ( getPosition() < _pckTrackEndFrame && + getStatus() == AEROPLAYER_STATUS_PLAY + ) + ); +} + +void AeroCDPlayer::update() { + + // stop replay upon request of stopCD() + if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) { + forceStop(); + _pckLoops = 0; + _pckStopTime = 0; + _pckTrackEndFrame = 0; + return; + } + + // not fully played + if (getPosition() < _pckTrackEndFrame && getStatus() == AEROPLAYER_STATUS_PLAY) + return; + + aeroplayer_Pause(); +// _pckStopTime = _sys->getMillis(); + + // loop again ? + if (_pckLoops > 0) + _pckLoops--; + + // loop if needed + if (_pckLoops == 0) + forceStop(); + else { + //_pckStopTime = 0; + + if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { + setPosition(0); + } else { + setPosition(_pckTrackStartFrame); + } + + aeroplayer_Play(); + _pckEndTime = _sys->getMillis() + _pckTrackDuration; + } +} + +void AeroCDPlayer::stop() { + _pckStopTime = _sys->getMillis(); + _pckLoops = 0; + return; +} + +void AeroCDPlayer::forceStop() { + if (getStatus() != AEROPLAYER_STATUS_STOP) + aeroplayer_PlayTrack(vfsInvalidVolRef, NULL); +} + +void AeroCDPlayer::play(int track, int num_loops, int start_frame, int duration) { + if (!num_loops && !start_frame) + return; + + Char fileP[100]; + static const Char *ext[] = { "mp3", "ogg" }; + +// if (duration > 0) +// duration += 5; + + _pckTrack = track; + _pckLoops = num_loops; + _pckTrackStartFrame = TO_MSECS(start_frame); + _pckTrackDuration = TO_MSECS(duration); + + StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]); + aeroplayer_Pause(); + aeroplayer_PlayTrack(gVars->VFS.volRefNum, fileP); + aeroplayer_Pause(); + + if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { + _pckTrackDuration = getDuration(); + } else { + setPosition(_pckTrackStartFrame); + if (_pckTrackDuration == 0) + _pckTrackDuration = getDuration() - _pckTrackStartFrame; + } + + aeroplayer_Play(); + + _pckStopTime = 0; + _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration; + _pckEndTime = _sys->getMillis() + _pckTrackDuration; +} diff --git a/backends/platform/PalmOS/Src/cd_aeroplayer.h b/backends/platform/PalmOS/Src/cd_aeroplayer.h new file mode 100644 index 0000000000..1ea48a4c9b --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_aeroplayer.h @@ -0,0 +1,64 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CD_AEROPLAYER_H +#define CD_AEROPLAYER_H + +#include "cdaudio.h" +#include "aeroplayer_public.h" + +class AeroCDPlayer : public CDAudio { +public: + AeroCDPlayer(OSystem *sys); + + bool init(); + void release(); + + bool poll(); + void update(); + void play(int track, int num_loops, int start_frame, int duration); + void stop(); + + void setVolume(int volume); + +private: + OSystem *_sys; + Char gameP[15]; + + UInt32 getStatus(); + void setPosition(UInt32 value); + UInt32 getDuration(); + UInt32 getPosition(); + void forceStop(); + + UInt16 _volumeLimit; + + Boolean _isPlaying; + // cdrom + UInt16 _pckLoops, _pckTrack; + UInt32 _pckTrackStartFrame, _pckTrackEndFrame; + UInt32 _pckStopTime, _pckEndTime, _pckTrackDuration; +}; + +#endif diff --git a/backends/platform/PalmOS/Src/cd_default.cpp b/backends/platform/PalmOS/Src/cd_default.cpp new file mode 100644 index 0000000000..4862600b0c --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_default.cpp @@ -0,0 +1,103 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ +#include "common/stdafx.h" +#include "common/system.h" +#include "cd_default.h" + +DefaultCDPlayer::DefaultCDPlayer(OSystem *sys) { + _sys = sys; +} + +bool DefaultCDPlayer::init() { + _isInitialized = true; + return _isInitialized; +} + +void DefaultCDPlayer::release() { + // self delete + delete this; +} + +bool DefaultCDPlayer::poll() { + return (_defLoops != 0 && _sys->getMillis() < _defTrackEndFrame); +} + +void DefaultCDPlayer::update() { + + // stop replay upon request of stopCD() + if (_defStopTime != 0 && _sys->getMillis() >= _defStopTime) { + _defLoops = 0; + _defStopTime = 0; + _defTrackEndFrame = 0; + return; + } + + // not fully played + if (_sys->getMillis() < _defTrackEndFrame) + return; + + if (_defLoops == 0) + return; + + // loop again ? + if (_defLoops > 0) + _defLoops--; + + // loop if needed + if (_defLoops != 0) { + _defTrackEndFrame = _sys->getMillis() + _defTrackLength; + } +} + +void DefaultCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ + _defStopTime = _sys->getMillis() + 100; + _defLoops = 0; + return; +} + +void DefaultCDPlayer::play(int track, int num_loops, int start_frame, int duration) { + if (!num_loops && !start_frame) + return; + + UInt32 fullLength; + + _defLoops = num_loops; + start_frame = TO_MSECS(start_frame); + duration = TO_MSECS(duration); + + // frame in milli-seconds + _defStopTime = 0; + fullLength = start_frame + gVars->CD.defaultTrackLength * 1000; + + if (duration > 0) { + _defTrackLength = duration; + } else if (start_frame > 0) { + _defTrackLength = fullLength; + _defTrackLength -= start_frame; + } else { + _defTrackLength = fullLength; + } + + // try to play the track + _defTrackEndFrame = _sys->getMillis() + _defTrackLength; +} diff --git a/backends/platform/PalmOS/Src/cd_default.h b/backends/platform/PalmOS/Src/cd_default.h new file mode 100644 index 0000000000..9dac0d7c16 --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_default.h @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + #ifndef CD_DEFAULT_H + #define CD_DEFAULT_H + + #include "cdaudio.h" + + class DefaultCDPlayer : public CDAudio { + public: + DefaultCDPlayer(OSystem *sys); + + bool init(); + void release(); + + bool poll(); + void update(); + void play(int track, int num_loops, int start_frame, int duration); + void stop(); + + private: + OSystem *_sys; + + // cdrom + UInt16 _defLoops; + UInt32 _defStopTime, _defTrackEndFrame, _defTrackLength; + }; + + #endif diff --git a/backends/platform/PalmOS/Src/cd_msa.cpp b/backends/platform/PalmOS/Src/cd_msa.cpp new file mode 100644 index 0000000000..553551ce7f --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_msa.cpp @@ -0,0 +1,260 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ +#include +#include "common/stdafx.h" +#include "common/system.h" +#include "cd_msa.h" +#include "start.h" // for appFileCreat + +static void doErr(Err e, const Char *msg) { + Char err[100]; + StrPrintF(err, "%ld : " , e); + StrCat(err,msg); + FrmCustomAlert(1000,err,0,0); +} + +MsaCDPlayer::MsaCDPlayer(OSystem *sys) { + _sys = sys; + _msaRefNum = sysInvalidRefNum; + + _msaLoops = 0; + _msaStopTime = 0; + _msaTrackEndSu = 0; +} + +bool MsaCDPlayer::init() { + SonySysFtrSysInfoP sonySysFtrSysInfoP; + Err error = errNone; + + if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { + // not found with audio adapter ?! + //if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrMsa) { + if ((error = SysLibFind(sonySysLibNameMsa, &_msaRefNum))) + if (error == sysErrLibNotFound) + error = SysLibLoad(sonySysFileTMsaLib, sonySysFileCMsaLib, &_msaRefNum); + + // FIXME : still don't understand how this lib works, it seems to be very unstable + // and with the very bad documentation provided by Sony it's difficult to find out why + // this doesn't work the same way on build-in MP3 device and external MP3 devices + if (!error) { + //MsaLibClose(_msaRefNum, msaLibOpenModeAlbum); // close the lib if we previously let it open (?) Need to add Notify for sonySysNotifyMsaEnforceOpenEvent just in case ... + error = MsaLibOpen(_msaRefNum, msaLibOpenModeAlbum); + + //if (error == msaErrAlreadyOpen) + // error = MsaLibEnforceOpen(_msaRefNum, msaLibOpenModeAlbum, appFileCreator); + + //error = (error != msaErrStillOpen) ? error : errNone; + } + //} + } + +// if (error) +// _msaRefNum = sysInvalidRefNum; + + _isInitialized = (_msaRefNum != sysInvalidRefNum); + initInternal(); + return _isInitialized; +} + +void MsaCDPlayer::initInternal() { + if (!_isInitialized) + return; + + Err e; + Char nameP[256]; + UInt32 dummy, albumIterater = albumIteratorStart; + + MemSet(&_msaAlbum, sizeof(_msaAlbum), 0); + _msaAlbum.maskflag = msa_INF_ALBUM; + _msaAlbum.code = msa_LANG_CODE_ASCII; + _msaAlbum.nameP = nameP; + _msaAlbum.fileNameLength = 256; + + e = MsaAlbumEnumerate(_msaRefNum, &albumIterater, &_msaAlbum); + e = MsaSetAlbum(_msaRefNum, _msaAlbum.albumRefNum, &dummy); + + // TODO : use RMC to control volume + MsaOutCapabilityType capability; + MsaOutGetCapability(_msaRefNum, &capability); + _volumeLLimit = capability.volumeLLimit; + _volumeRLimit = capability.volumeRLimit; +} + +void MsaCDPlayer::setVolume(int volume) { + _volumeLevel = volume; + MsaOutSetVolume(_msaRefNum, (_volumeLLimit * volume) / 100, (_volumeRLimit * volume) / 100); +} + +void MsaCDPlayer::release() { + if (_isInitialized) { + if (_msaRefNum != sysInvalidRefNum) { + // stop the current track if any (needed if we use enforce open to prevent the track to play after exit) + MsaStop(_msaRefNum, true); + MsaLibClose(_msaRefNum, msaLibOpenModeAlbum); + } + } + + // self delete + delete this; +} + +bool MsaCDPlayer::poll() { + if (!_isInitialized) + return false; + + MsaPBStatus pb; + MsaGetPBStatus(_msaRefNum, &pb); + return (_msaLoops != 0 && (pb.currentSU < _msaTrackEndSu || pb.status != msa_STOPSTATUS)); +} + +void MsaCDPlayer::update() { + if (!_isInitialized) + return; + + // get playback status + MsaPBStatus pb; + MsaGetPBStatus(_msaRefNum, &pb); + + // stop replay upon request of stopCD() + if (_msaStopTime != 0 && _sys->getMillis() >= _msaStopTime) { + MsaStop(_msaRefNum, true); + _msaLoops = 0; + _msaStopTime = 0; + _msaTrackEndSu = 0; + return; + } + + // not fully played nad still playing the correct track + // (when playing a full track the return SU is not correct + // and so we need to check if we are still playing the correct track) + if (pb.currentSU < _msaTrackEndSu) { + UInt16 trackNo; + MsaPBListIndexToTrackNo(_msaRefNum, pb.currentpblistindex, &trackNo); + if (trackNo == _msaTrack) + return; + } + + MsaStop(_msaRefNum, true); + + if (_msaLoops == 0) + return; + + // track ends and last play, force stop if still playing +/* if (_msaLoops != 1 && pb.status != msa_STOPSTATUS) { + MsaStop(_msaRefNum, true); + return; + } +*/ + // loop again ? + if (_msaLoops > 0) + _msaLoops--; + + // loop if needed + if (_msaLoops != 0) { + if (_msaStartFrame == 0 && _msaDuration == 0) + MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); + else + MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP); + } +} + +void MsaCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ + if (!_isInitialized) + return; + + _msaStopTime = _sys->getMillis() + 100; + _msaLoops = 0; + return; +} + +void MsaCDPlayer::play(int track, int num_loops, int start_frame, int duration) { + if (!_isInitialized) + return; + + if (!num_loops && !start_frame) + return; + + _msaTrack = track + gVars->CD.firstTrack - 1; // first track >= 1 ?, not 0 (0=album) + _msaLoops = num_loops; + _msaStartFrame = TO_MSECS(start_frame); + _msaDuration = TO_MSECS(duration); + + Err e; + MemHandle trackH; + + // stop current play if any + MsaStop(_msaRefNum, true); + _msaStopTime = 0; + + // retreive track infos + e = MsaGetTrackInfo(_msaRefNum, _msaTrack, 0, msa_LANG_CODE_ASCII, &trackH); + + // track exists + if (!e && trackH) { + MsaTime msaTime; + MsaTrackInfo *trackP; + UInt32 SU, fullLength; + + // FIXME (?) : this enable MsaSuToTime to return the right value in some cases + MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); + MsaStop(_msaRefNum, true); + + // get the msa time + trackP = (MsaTrackInfo *)MemHandleLock(trackH); + MsaSuToTime(_msaRefNum, trackP->totalsu, &msaTime); + SU = trackP->totalsu; + MemPtrUnlock(trackP); + MemHandleFree(trackH); + + // MSA frame in milli-seconds + fullLength = FROM_MIN(msaTime.minute); + fullLength += FROM_SEC(msaTime.second); + fullLength += msaTime.frame; + + if (_msaDuration > 0) { + _msaTrackLength = _msaDuration; + } else if (_msaStartFrame > 0) { + _msaTrackLength = fullLength; + _msaTrackLength -= _msaStartFrame; + } else { + _msaTrackLength = fullLength; + } + + // try to play the track + if (start_frame == 0 && duration == 0) { + MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP); + _msaTrackEndSu = SU; + } else { + // FIXME : MsaTimeToSu doesn't work ... (may work with previous FIXME) + _msaTrackStartSu = (UInt32) ((float)(_msaStartFrame) / ((float)fullLength / (float)SU)); + _msaTrackEndSu = (UInt32) ((float)(_msaTrackLength) / ((float)fullLength / (float)SU)); + _msaTrackEndSu += _msaTrackStartSu; + + if (_msaTrackEndSu > SU) + _msaTrackEndSu = SU; + + MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP); + } + } + // TODO : use default track length if track not found +} diff --git a/backends/platform/PalmOS/Src/cd_msa.h b/backends/platform/PalmOS/Src/cd_msa.h new file mode 100644 index 0000000000..44dbc6672b --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_msa.h @@ -0,0 +1,66 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CD_MSA_H +#define CD_MSA_H + +#include "cdaudio.h" + +class MsaCDPlayer : public CDAudio { +public: + MsaCDPlayer(OSystem *sys); + + bool init(); + void release(); + + bool poll(); + void update(); + void play(int track, int num_loops, int start_frame, int duration); + void stop(); + + void setVolume(int volume); + + private: + void initInternal(); + + OSystem *_sys; + UInt16 _msaRefNum; + + UInt32 _volumeLLimit; + UInt32 _volumeRLimit; + + // cdrom + AlbumInfoType _msaAlbum; + UInt16 _msaLoops; + + UInt32 _msaStopTime; + + UInt32 _msaStartFrame; + UInt32 _msaDuration; + + UInt16 _msaTrack; + UInt32 _msaTrackStartSu, _msaTrackEndSu; + UInt32 _msaTrackLength; +}; + +#endif diff --git a/backends/platform/PalmOS/Src/cd_pockettunes.cpp b/backends/platform/PalmOS/Src/cd_pockettunes.cpp new file mode 100644 index 0000000000..75574b9802 --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_pockettunes.cpp @@ -0,0 +1,237 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ +#include "common/stdafx.h" +#include "common/system.h" +#include "common/config-manager.h" + +#include "cd_pockettunes.h" + +PckTunesCDPlayer::PckTunesCDPlayer(OSystem *sys) { + _sys = sys; + StrCopy(gameP, ConfMan.getActiveDomainName().c_str()); +} + +bool PckTunesCDPlayer::init() { + PocketTunesStart(); + _isInitialized = PocketTunesIsRunning(); + _isPlaying = false; + _pAction = NULL; + + if (_isInitialized) { + _pAction = (PocketTunesAction*)MemPtrNew(sizeof(PocketTunesAction)); + _volumeLimit = getVolumeLimit(); + } + + _isInitialized = (_isInitialized && _pAction); + return _isInitialized; +} + +void PckTunesCDPlayer::release() { + PocketTunesStop(); + if (_pAction) + MemPtrFree(_pAction); + + // self delete + delete this; +} + +UInt32 PckTunesCDPlayer::getVolumeLimit() { + UInt32 value = 0; + + if (!_pAction) + return value; + + _pAction->action = kPocketTunesActionGetValue; + _pAction->data.getValueAction.which = kPtunesValueMaxVolume; + + EvtGetEvent(&_eAction, evtNoWait); + if (PocketTunesCallSynch(_pAction) == errNone) + value = _pAction->data.getValueAction.value; + + return value; +} + +UInt32 PckTunesCDPlayer::getStatus() { + UInt32 status = kPtunesStopped; + + if (!_isPlaying || !_pAction) + return status; + + _pAction->action = kPocketTunesActionGetStatus; + + EvtGetEvent(&_eAction, evtNoWait); + if (PocketTunesCallSynch(_pAction) == errNone) + status = _pAction->data.getStatusAction.status; + + return status; +} + +UInt32 PckTunesCDPlayer::getPosition(UInt32 deflt) { + UInt32 value = deflt; + + if (!_isPlaying || !_pAction) + return value; + + _pAction->action = kPocketTunesActionGetValue; + _pAction->data.getValueAction.which = kPtunesValueSongPosition; + + EvtGetEvent(&_eAction, evtNoWait); + if (PocketTunesCallSynch(_pAction) == errNone) + value = _pAction->data.getValueAction.value; + + return value; +} + +UInt32 PckTunesCDPlayer::getDuration() { + UInt32 value = gVars->CD.defaultTrackLength; + + if (!_isPlaying || !_pAction) + return value; + + _pAction->action = kPocketTunesActionGetValue; + _pAction->data.getValueAction.which = kPtunesValueSongDuration; + + EvtGetEvent(&_eAction, evtNoWait); + if (PocketTunesCallSynch(_pAction) == errNone) + value = _pAction->data.getValueAction.value; + + return value; +} + +void PckTunesCDPlayer::setPosition(UInt32 value) { + if (!_isPlaying) + return; + + PocketTunesAction *pAction = AllocateAsynchronousActionStruct(); + if (!pAction) + return; + + pAction->action = kPocketTunesActionSetValue; + pAction->data.getValueAction.which = kPtunesValueSongPosition; + pAction->data.getValueAction.value = value; + + EvtGetEvent(&_eAction, evtNoWait); + PocketTunesCall(pAction); +} + +void PckTunesCDPlayer::setVolume(int volume) { + _volumeLevel = volume; + + PocketTunesAction *pAction = AllocateAsynchronousActionStruct(); + if (!pAction) + return; + + pAction->action = kPocketTunesActionSetValue; + pAction->data.getValueAction.which = kPtunesValueVolume; + pAction->data.getValueAction.value = (_volumeLimit * volume) / 100; + + EvtGetEvent(&_eAction, evtNoWait); + PocketTunesCall(pAction); +} + +bool PckTunesCDPlayer::poll() { + return (_pckLoops != 0 && (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame || getStatus() != kPtunesStopped)); +} + +void PckTunesCDPlayer::update() { + + // stop replay upon request of stopCD() + if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) { + PocketTunesStop(); + _pckLoops = 0; + _pckStopTime = 0; + _pckTrackEndFrame = 0; + return; + } + + // not fully played + if (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame && getStatus() != kPtunesStopped) + return; + + PocketTunesStop(); + + if (_pckLoops == 0) + return; + + // loop again ? + if (_pckLoops > 0) + _pckLoops--; + + // loop if needed + if (_pckLoops != 0 && _isPlaying) { + if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { + setPosition(0); + } else { + setPosition(_pckTrackStartFrame); + } + + PocketTunesPlay(); + } +} + +void PckTunesCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */ + _pckStopTime = _sys->getMillis() + 100; + _pckLoops = 0; + return; +} + +void PckTunesCDPlayer::play(int track, int num_loops, int start_frame, int duration) { + if (!num_loops && !start_frame) + return; + + EventType e; + Char nameP[256], fileP[100]; + static const Char *ext[] = { "mp3", "ogg" }; + + _pckTrack = track; + _pckLoops = num_loops; + _pckTrackStartFrame = TO_MSECS(start_frame); + _pckTrackDuration = TO_MSECS(duration); + + VFSVolumeGetLabel(gVars->VFS.volRefNum, nameP, 256); + + StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]); + + if (PocketTunesOpenFile(nameP, fileP, 0) == errNone) { + EvtGetEvent(&e, evtNoWait); + PocketTunesPauseIfPlaying(); + _isPlaying = true; + + if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) { + _pckTrackDuration = getDuration(); + } else { + setPosition(_pckTrackStartFrame); + if (_pckTrackDuration == 0) + _pckTrackDuration = getDuration() - _pckTrackStartFrame; + } + + PocketTunesPlay(); + + } else { + _isPlaying = false; + _pckTrackDuration = gVars->CD.defaultTrackLength * 1000; + } + + _pckStopTime = 0; + _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration; +} diff --git a/backends/platform/PalmOS/Src/cd_pockettunes.h b/backends/platform/PalmOS/Src/cd_pockettunes.h new file mode 100644 index 0000000000..81493d87ad --- /dev/null +++ b/backends/platform/PalmOS/Src/cd_pockettunes.h @@ -0,0 +1,67 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + #ifndef CD_POCKETTUNES_H + #define CD_POCKETTUNES_H + + #include "cdaudio.h" + #include "pockettunes.h" + + class PckTunesCDPlayer : public CDAudio { + public: + PckTunesCDPlayer(OSystem *sys); + + bool init(); + void release(); + + bool poll(); + void update(); + void play(int track, int num_loops, int start_frame, int duration); + void stop(); + + void setVolume(int volume); + + private: + OSystem *_sys; + Char gameP[15]; + + PocketTunesAction *_pAction; // prevent memory fragmentation + EventType _eAction; + + UInt32 getStatus(); + void setPosition(UInt32 value); + UInt32 getDuration(); + UInt32 getPosition(UInt32 deft); + + UInt32 _volumeLimit; + UInt32 getVolumeLimit(); + + Boolean _isPlaying; + // cdrom + UInt16 _pckLoops, _pckTrack; + UInt32 _pckTrackStartFrame, _pckTrackEndFrame; + UInt32 _pckStopTime, _pckTrackDuration; + }; + + #endif + diff --git a/backends/platform/PalmOS/Src/cdaudio.h b/backends/platform/PalmOS/Src/cdaudio.h new file mode 100644 index 0000000000..1c1d42e7e9 --- /dev/null +++ b/backends/platform/PalmOS/Src/cdaudio.h @@ -0,0 +1,65 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CDAUDIO_H +#define CDAUDIO_H + +#include "common/system.h" + +// CD frames are 1/75 sec +#define CD_FPS 75 +#define TO_MSECS(frame) ((UInt32)((frame) * 1000 / CD_FPS)) + +// consider frame at 1/1000 sec +#define FROM_MIN(mins) ((UInt32)((mins) * 60 * 1000)) +#define FROM_SEC(secs) ((UInt32)((secs) * 1000)) + +class CDAudio { +public: + CDAudio() { + _isInitialized = false; + _volumeLevel = 100; + }; + + virtual bool init() = 0; + virtual void release() = 0; + + // OSystem functions + virtual bool poll() = 0; + virtual void play(int track, int num_loops, int start_frame, int duration) = 0; + virtual void stop() = 0; + virtual void update() = 0; + + // volume in percent + virtual void setVolume(int volume) { _volumeLevel = volume; } + virtual int getVolume() const { return _volumeLevel; } + + virtual void upVolume(int value) {}; + virtual void downVolume(int value) {}; + +protected: + int _volumeLevel; + bool _isInitialized; +}; + +#endif diff --git a/backends/platform/PalmOS/Src/extend.cpp b/backends/platform/PalmOS/Src/extend.cpp new file mode 100644 index 0000000000..297eb28c16 --- /dev/null +++ b/backends/platform/PalmOS/Src/extend.cpp @@ -0,0 +1,108 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include "globals.h" + +#include "modulesrsc.h" + +const Char *SCUMMVM_SAVEPATH = "/PALM/Programs/ScummVM/Saved"; + +void PalmFatalError(const Char *err) { + WinSetDrawWindow(WinGetDisplayWindow()); + WinPalette(winPaletteSetToDefault,0,0,0); + WinSetBackColor(0); + WinEraseWindow(); + FrmCustomAlert(FrmFatalErrorAlert, err, 0,0); +} + +void DrawStatus(Boolean show) { + if (OPTIONS_TST(kOptDisableOnScrDisp)) + return; + + UInt8 x,y; + UInt32 depth, d1; + Boolean d2; + WinScreenMode(winScreenModeGet, &d1, &d1, &depth, &d2); + Int16 color = (show ? gVars->indicator.on : gVars->indicator.off); + + if (depth == 8) { + UInt8 *src = (UInt8 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow())); + src += gVars->screenPitch + 1; + for(y=0; y < 4; y++) { + for(x=0; x < 4; x++) + src[x] = color; + + src += gVars->screenPitch; + } + + } else if (depth == 16) { + Int16 *src = (Int16 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow())); + src += gVars->screenPitch + 1; + for(y=0; y < 4; y++) { + for(x=0; x < 4; x++) + src[x] = color; + + src += gVars->screenPitch; + } + } +} + +#ifndef PALMOS_ARM + +// This is now required since some classes are now very big :) +#include "MemGlue.h" +void *operator new(UInt32 size) { + void *ptr = MemGluePtrNew(size); + MemSet(ptr, 0, size); + return ptr; +} + +void *operator new [] (UInt32 size) { + void *ptr = MemGluePtrNew(size); + MemSet(ptr, 0, size); + return ptr; +} +#elif defined(COMPILE_OS5) + +__inline void *operator new(UInt32 size) { + void *ptr = malloc(size); + MemSet(ptr, 0, size); + return ptr; +} + +__inline void *operator new [] (UInt32 size) { + void *ptr = malloc(size); + MemSet(ptr, 0, size); + return ptr; +} + +__inline void operator delete(void *ptr) throw() { + if (ptr) free(ptr); +} + +__inline void operator delete[](void *ptr) throw() { + if (ptr) free(ptr); +} +#endif diff --git a/backends/platform/PalmOS/Src/extend.h b/backends/platform/PalmOS/Src/extend.h new file mode 100644 index 0000000000..c5c74852a2 --- /dev/null +++ b/backends/platform/PalmOS/Src/extend.h @@ -0,0 +1,34 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef EXTEND_H +#define EXTEND_H + +extern const Char *SCUMMVM_SAVEPATH; + +int main(int argc, char **argv); +void PalmFatalError(const Char *err); +void DrawStatus(Boolean show); + +#endif diff --git a/backends/platform/PalmOS/Src/features.h b/backends/platform/PalmOS/Src/features.h new file mode 100644 index 0000000000..f82c7692fa --- /dev/null +++ b/backends/platform/PalmOS/Src/features.h @@ -0,0 +1,17 @@ +#ifndef __FEATURES_H__ +#define __FEATURES_H__ + +enum { + ftrBufferOverlay = 1000, + ftrBufferBackup, + ftrBufferHotSwap +}; + +#define FREE_FTR(num) \ + { \ + UInt32 ptr; \ + FtrGet(appFileCreator, num, &ptr); \ + if (ptr) FtrPtrFree(appFileCreator, num); \ + } + +#endif diff --git a/backends/platform/PalmOS/Src/globals.h b/backends/platform/PalmOS/Src/globals.h new file mode 100644 index 0000000000..07034aeb02 --- /dev/null +++ b/backends/platform/PalmOS/Src/globals.h @@ -0,0 +1,142 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef GLOBALS_H +#define GLOBALS_H + +#include +#include "stuffs.h" + +#ifdef PALMOS_68K + +#include "scumm_globals.h" + +enum { + kMemScummOldCostGames = 0, + kMemScummNewCostGames, + kMemSimon1Games, + kMemSimon2Games, + + kMemGamesCount +}; + +#endif + +enum { + INIT_VIBRATOR = 1 << 0x00, + INIT_PA1LIB = 1 << 0x01, + INIT_ARM = 1 << 0x02, + INIT_AUTOOFF = 1 << 0x03, + INIT_GOLCD = 1 << 0x04 +}; + +enum { + FM_QUALITY_LOW = 0, + FM_QUALITY_MED, + FM_QUALITY_HI, + FM_QUALITY_INI +}; + +typedef struct { + // common parts + UInt32 _4B, _2B; + + // 4 bytes part + UInt32 startupMemory; + UInt32 slkVersion; + UInt32 options; + UInt32 screenPitch; + + struct { + FileRef logFile; + UInt32 cacheSize; + UInt16 volRefNum; + UInt16 dummy; + } VFS; + + // 2 bytes part + UInt16 HRrefNum; + UInt16 slkRefNum; + Coord screenWidth, screenHeight; // silkarea shown + Coord screenFullWidth, screenFullHeight; // silkarea hidden + Int16 autoSave; + struct { + Int16 on; + Int16 off; + Int16 showLED; + } indicator; + + // 1 byte part + Boolean vibrator; + Boolean stdPalette; + Boolean filter; + Boolean stylusClick; + Boolean arrowKeys; + UInt8 init; + UInt8 palmVolume; + UInt8 fmQuality; + UInt8 advancedMode; + +#ifdef PALMOS_68K + // 68k only part + struct { + Boolean enable; + UInt8 driver, format; + UInt16 defaultTrackLength; + UInt16 firstTrack; + UInt8 volume; + } CD; + + DmOpenRef globals[GBVARS_COUNT]; + UInt32 memory[kMemGamesCount]; +#endif + +} GlobalsDataType, *GlobalsDataPtr; + +extern GlobalsDataPtr gVars; + +#define VARS_EXPORT() gVars->_4B = 6; \ + gVars->_2B = 12; + +#define DO_VARS(z, t, o) \ + { Int8 *tmp = (Int8 *)gVars + o + 8; \ + for (Int8 cnt = 0; cnt < gVars->z; cnt++) \ + { UInt##t val = *((UInt##t *)tmp); \ + val = ByteSwap##t(val); \ + *((UInt##t *)tmp) = val; \ + tmp += (t / 8); \ + } \ + } + +#define OPTIONS_DEF() gVars->options + +#define HWR_INIT(x) (gVars->init & (x)) +#define HWR_SET(x) gVars->init |= (x) +#define HWR_RST(x) gVars->init &= ~(x) +#define HWR_RSTALL() gVars->init = 0 +#define HWR_GET() (gVars->init) + +#define ARM(x) gVars->arm[x] + +#endif diff --git a/backends/platform/PalmOS/Src/i_zodiac.cpp b/backends/platform/PalmOS/Src/i_zodiac.cpp new file mode 100644 index 0000000000..20b06aa61f --- /dev/null +++ b/backends/platform/PalmOS/Src/i_zodiac.cpp @@ -0,0 +1,41 @@ +#include +#include "extend.h" + +#ifndef DISABLE_TAPWAVE + +#include "tapwave.h" +#include "i_zodiac.h" + +// _twBmpV3 = offscreen bitmap, must be set before this call +Err ZodiacInit(void **ptrP, Int32 w, Int32 h) { + Err e; + + TwGfxSurfaceInfoType surface = { + sizeof(TwGfxSurfaceInfoType), + w, h, w * 2, + twGfxLocationAcceleratorMemory, + twGfxPixelFormatRGB565_LE + }; + + e = SysSetOrientation(sysOrientationLandscape); + e = TwGfxOpen((TwGfxType **)&_twGfxLib, NULL); + e = TwGfxAllocSurface( (TwGfxType *)_twGfxLib, + (TwGfxSurfaceType **)&_twSrc, + &surface); + + e = TwGfxGetPalmDisplaySurface( (TwGfxType *)_twGfxLib, + (TwGfxSurfaceType **)&_twDst); + + return e; +} + +Err ZodiacRelease(void **ptrP) { + Err e = errNone; + + TwGfxFreeSurface((TwGfxSurfaceType *)_twSrc); + TwGfxClose((TwGfxType *)_twGfxLib); + + return e; +} + +#endif diff --git a/backends/platform/PalmOS/Src/i_zodiac.h b/backends/platform/PalmOS/Src/i_zodiac.h new file mode 100644 index 0000000000..96a373a22e --- /dev/null +++ b/backends/platform/PalmOS/Src/i_zodiac.h @@ -0,0 +1,12 @@ +#ifndef _I_ZODIAC_H_ +#define _I_ZODIAC_H_ + +#define _twGfxLib ptrP[0] +#define _twSrc ptrP[1] +#define _twDst ptrP[2] +#define _twBmpV3 ptrP[3] + +Err ZodiacInit(void **ptrP, Int32 w, Int32 h); +Err ZodiacRelease(void **ptrP); + +#endif diff --git a/backends/platform/PalmOS/Src/init_golcd.cpp b/backends/platform/PalmOS/Src/init_golcd.cpp new file mode 100644 index 0000000000..63cc98e0ab --- /dev/null +++ b/backends/platform/PalmOS/Src/init_golcd.cpp @@ -0,0 +1,121 @@ +#include +#include + +#include "init_golcd.h" + +// you can use this handle directly +MemHandle gGoLcdH; + +Err GoLCDInit(MemHandle *goLcdH) { + if (!goLcdH) + return sysErrParamErr; + + Err e; + UInt16 refNum; + Boolean loaded = false; + *goLcdH = NULL; + + if (e = SysLibFind(goLcdLibName, &refNum)) + loaded = !(e = SysLibLoad(goLcdLibType, goLcdLibCreator, &refNum)); + + if (!e) + if ((e = GoLcdLibOpen(refNum))) + SysLibRemove(refNum); + + if (!e) { + MemHandle lcdH = MemHandleNew(sizeof(GoLCDType)); + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(lcdH); + MemSet(lcdP, MemHandleSize(lcdH), 0); + lcdP->refNum = refNum; + lcdP->timeout = GoLcdGetTimeout(refNum, goLcdPenTapMode); + MemPtrUnlock(lcdP); + *goLcdH = lcdH; + } + + return e; +} + +Err GoLCDRelease(MemHandle goLcdH) { + if (!goLcdH) + return sysErrParamErr; + + Err e; + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + if (lcdP->refNum != sysInvalidRefNum) + if (!(e = GoLcdLibClose(lcdP->refNum))) + e = SysLibRemove(lcdP->refNum); + + MemPtrUnlock(lcdP); + MemHandleFree(goLcdH); + + return e; +} + +Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y) { + Boolean inBounds = false; + + if (!goLcdH) + return inBounds; + + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + inBounds = (lcdP->active && RctPtInRectangle(x, y, &(lcdP->bounds))); + MemPtrUnlock(lcdP); + + return inBounds; +} + +void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP) { + if (!goLcdH) + return; + + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + MemMove(&(lcdP->ink), inkP, sizeof(RGBColorType)); + MemPtrUnlock(lcdP); +} + +void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP) { + if (!goLcdH) + return; + + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + MemMove(&(lcdP->bounds), boundsP, sizeof(RectangleType)); + MemPtrUnlock(lcdP); +} + +void GoLCDActivate(MemHandle goLcdH, Boolean active) { + if (!goLcdH) + return; + + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + + if (active) { + if (!lcdP->active) { + lcdP->active = true; + GoLcdSetInkState(lcdP->refNum, goLcdInkEnabled, goLcdColorOverride, &(lcdP->ink)); + GoLcdSetBounds(lcdP->refNum, &(lcdP->bounds)); + GoLcdSetGsiState(lcdP->refNum, goLcdGsiNormal, goLcdColorDefault, 0); + GoLcdSetTimeout(lcdP->refNum, goLcdPenTapMode, lcdP->timeout); + GoLcdSetStatus(lcdP->refNum, goLcdEnabled); + } + + } else { + lcdP->active = false; + GoLcdSetInkState(lcdP->refNum, goLcdInkDisabled, goLcdColorDefault, 0); + GoLcdSetStatus(lcdP->refNum, goLcdDisabled); + } + + MemPtrUnlock(lcdP); +} + +Boolean GoLCDToggle(MemHandle goLcdH) { + if (!goLcdH) + return; + + Boolean active; + GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH); + active = lcdP->active; + MemPtrUnlock(lcdP); + + GoLCDActivate(goLcdH, !active); + return (!active); +} diff --git a/backends/platform/PalmOS/Src/init_golcd.h b/backends/platform/PalmOS/Src/init_golcd.h new file mode 100644 index 0000000000..7750a13a52 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_golcd.h @@ -0,0 +1,22 @@ +#ifndef INIT_GOLCD_H +#define INIT_GOLCD_H + +typedef struct { + Boolean active; + UInt16 refNum; + RectangleType bounds; + RGBColorType ink; + UInt32 timeout; +} GoLCDType; + +extern MemHandle gGoLcdH; + +Err GoLCDInit(MemHandle *goLcdH); +Err GoLCDRelease(MemHandle goLcdH); +void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP); +void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP); +void GoLCDActivate(MemHandle goLcdH, Boolean active); +Boolean GoLCDToggle(MemHandle goLcdH); +Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y); + +#endif diff --git a/backends/platform/PalmOS/Src/init_mathlib.cpp b/backends/platform/PalmOS/Src/init_mathlib.cpp new file mode 100644 index 0000000000..88cf8a21f2 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_mathlib.cpp @@ -0,0 +1,29 @@ +#include + +#include "globals.h" +#include "init_mathlib.h" +#include "mathlib.h" + +Err MathlibInit() { + Err e; + + if ((e = SysLibFind(MathLibName, &MathLibRef))) + if (e == sysErrLibNotFound) // couldn't find lib + e = SysLibLoad(LibType, MathLibCreator, &MathLibRef); + + if (e) return sysErrLibNotFound; + + e = MathLibOpen(MathLibRef, MathLibVersion); + return e; +} + +void MathlibRelease() { + UInt16 useCount; + + if (MathLibRef != sysInvalidRefNum) { + MathLibClose(MathLibRef, &useCount); + + if (!useCount) + SysLibRemove(MathLibRef); + } +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/init_mathlib.h b/backends/platform/PalmOS/Src/init_mathlib.h new file mode 100644 index 0000000000..1901e1330d --- /dev/null +++ b/backends/platform/PalmOS/Src/init_mathlib.h @@ -0,0 +1,7 @@ +#ifndef INIT_MATHLIB_H +#define INIT_MATHLIB_H + +Err MathlibInit(); +void MathlibRelease(); + +#endif diff --git a/backends/platform/PalmOS/Src/init_pa1lib.cpp b/backends/platform/PalmOS/Src/init_pa1lib.cpp new file mode 100644 index 0000000000..d5b0340cae --- /dev/null +++ b/backends/platform/PalmOS/Src/init_pa1lib.cpp @@ -0,0 +1,32 @@ +#include +#include + +#include "pa1lib.h" +#include "init_pa1lib.h" + +void *sndStateOnFuncP = NULL; +void *sndStateOffFuncP = NULL; + +#define SndStateOn(a,b,c) if (sndStateOnFuncP)((sndStateOnType)(sndStateOnFuncP))(a, b, c); +#define SndStateOff(a) if (sndStateOffFuncP)((sndStateOffType)(sndStateOffFuncP))(a); + +void Pa1libInit(UInt16 vol) { + Pa1Lib_Open(); + + // Doesn't work on T4xx and T6xx series ? + FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOnHandlerP, (UInt32*) &sndStateOnFuncP); + FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOffHandlerP, (UInt32*) &sndStateOffFuncP); + + SndStateOn(aOutSndKindSp, vol, vol); + SndStateOn(aOutSndKindHp, vol, vol); + + Pa1Lib_devHpVolume(vol, vol); + Pa1Lib_devSpVolume(vol); +} + +void Pa1libRelease() { + SndStateOff(aOutSndKindSp); + SndStateOff(aOutSndKindHp); + + Pa1Lib_Close(); +} diff --git a/backends/platform/PalmOS/Src/init_pa1lib.h b/backends/platform/PalmOS/Src/init_pa1lib.h new file mode 100644 index 0000000000..d5be11d278 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_pa1lib.h @@ -0,0 +1,22 @@ +#ifndef INIT_PA1LIB_H +#define INIT_PA1LIB_H + +// need to move this on a .h file +#define sonySysFileCSystem 'SsYs' /* Sony overall System */ +#define sonySysFtrCreatorSystem sonySysFileCSystem + +#define sonySysFtrNumSystemBase 10000 +#define sonySysFtrNumSystemAOutSndStateOnHandlerP (sonySysFtrNumSystemBase + 4) +#define sonySysFtrNumSystemAOutSndStateOffHandlerP (sonySysFtrNumSystemBase + 5) + +typedef void (*sndStateOnType) (UInt8 /* kind */, UInt8 /* L volume 0-31 */, UInt8 /* R volume 0-31 */); +typedef void (*sndStateOffType) (UInt8 /* kind */); + +/* kind */ +#define aOutSndKindSp (0) /* Speaker volume */ +#define aOutSndKindHp (2) /* HeadPhone volume */ + +void Pa1libInit(UInt16 vol); +void Pa1libRelease(); + +#endif diff --git a/backends/platform/PalmOS/Src/init_palmos.cpp b/backends/platform/PalmOS/Src/init_palmos.cpp new file mode 100644 index 0000000000..d789580e7a --- /dev/null +++ b/backends/platform/PalmOS/Src/init_palmos.cpp @@ -0,0 +1,171 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#include "globals.h" +#include "init_palmos.h" + +static UInt16 autoOffDelay; + +void PalmInit(UInt8 init) { + // set screen depth + UInt32 depth = 8; + WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); + + if (init & INIT_AUTOOFF) { + autoOffDelay = SysSetAutoOffTime(0); + EvtResetAutoOffTimer(); + } + +} + +void PalmRelease(UInt8 init) { + if (init & INIT_AUTOOFF) { + SysSetAutoOffTime(autoOffDelay); + EvtResetAutoOffTimer(); + } +} + +Err PalmHRInit(UInt32 depth) { + Err e; + UInt32 width = 320; + UInt32 height = 320; + Boolean color = true; + + e = WinScreenMode (winScreenModeSet, &width, &height, &depth, &color); + + if (!e) { + UInt32 attr; + WinScreenGetAttribute(winScreenDensity, &attr); + e = (attr != kDensityDouble); + } + + return e; +} + +void PalmHRRelease() { + // should i do something here ? +} + +UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) { + UInt32 ftr; + UInt8 mode = 0; + + Coord sw = 160; + Coord sh = 160; + + // Hi-Density present ? + if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &ftr)) { + if (ftr >= 4) { + sw = 320; + sh = 320; + } + } + + Coord fw = sw; + Coord fh = sh; + + // if feature set, not set on Garmin iQue3600 ??? + if (!(FtrGet(sysFtrCreator, sysFtrNumInputAreaFlags, &ftr))) { + if (ftr & grfFtrInputAreaFlagCollapsible) { + UInt16 curOrientation = SysGetOrientation(); + + if (curOrientation == sysOrientationLandscape || + curOrientation == sysOrientationReverseLandscape + ) + mode = PALM_LANDSCAPE; + else + mode = PALM_PORTRAIT; + + PINSetInputTriggerState(pinInputTriggerEnabled); + PINSetInputAreaState(pinInputAreaClosed); + StatHide(); + + WinGetDisplayExtent(&fw, &fh); + fw *= 2; + fh *= 2; + + StatShow(); + PINSetInputAreaState(pinInputAreaOpen); + PINSetInputTriggerState(pinInputTriggerDisabled); + } + } + + if (stdw) *stdw = sw; + if (stdh) *stdh = sh; + if (fullw) *fullw = fw; + if (fullh) *fullh = fh; + + return mode; +} + +void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP) { + UInt32 free, max; + + Int16 i; + Int16 nCards; + UInt16 cardNo; + UInt16 heapID; + + UInt32 storageMemory = 0; + UInt32 dynamicMemory = 0; + UInt32 storageFree = 0; + UInt32 dynamicFree = 0; + + // Iterate through each card to support devices with multiple cards. + nCards = MemNumCards(); + + for (cardNo = 0; cardNo < nCards; cardNo++) { + // Iterate through the RAM heaps on a card (excludes ROM). + for (i=0; i< MemNumRAMHeaps(cardNo); i++) { + // Obtain the ID of the heap. + heapID = MemHeapID(cardNo, i); + // Calculate the total memory and free memory of the heap. + MemHeapFreeBytes(heapID, &free, &max); + + // If the heap is dynamic, increment the dynamic memory total. + if (MemHeapDynamic(heapID)) { + dynamicMemory += MemHeapSize(heapID); + dynamicFree += free; + + // The heap is nondynamic (storage ?). + } else { + storageMemory += MemHeapSize(heapID); + storageFree += free; + } + } + } + // Reduce the stats to KB. Round the results. + dynamicMemory = dynamicMemory / 1024L; + storageMemory = storageMemory / 1024L; + + dynamicFree = dynamicFree / 1024L; + storageFree = storageFree / 1024L; + + if (dynamicMemoryP) *dynamicMemoryP = dynamicMemory; + if (storageMemoryP) *storageMemoryP = storageMemory; + if (dynamicFreeP) *dynamicFreeP = dynamicFree; + if (storageFreeP) *storageFreeP = storageFree; +} diff --git a/backends/platform/PalmOS/Src/init_palmos.h b/backends/platform/PalmOS/Src/init_palmos.h new file mode 100644 index 0000000000..a979f02cd3 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_palmos.h @@ -0,0 +1,41 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef INIT_PALMOS_H +#define INIT_PALMOS_H + +#define PALM_PORTRAIT 1 +#define PALM_LANDSCAPE 2 + +void PalmInit(UInt8 init); +void PalmRelease(UInt8 init); + +Err PalmHRInit(UInt32 depth); +void PalmHRRelease(); + + +UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh); +void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP); + +#endif \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/init_sony.cpp b/backends/platform/PalmOS/Src/init_sony.cpp new file mode 100644 index 0000000000..3ba4e8b8d0 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_sony.cpp @@ -0,0 +1,162 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include "init_sony.h" + +UInt16 SilkInit(UInt32 *retVersion) { + SonySysFtrSysInfoP sonySysFtrSysInfoP; + UInt32 version; + UInt16 slkRefNum; + Err e; + + // Sony HiRes+ + if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { + if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrSilk) { + + if ((e = SysLibFind(sonySysLibNameSilk, &slkRefNum))) + if (e == sysErrLibNotFound) + e = SysLibLoad(sonySysFileTSilkLib, sonySysFileCSilkLib, &slkRefNum); + + if (!e) { + e = FtrGet(sonySysFtrCreator, sonySysFtrNumVskVersion, &version); + if (e) { + // v1 = NR + e = SilkLibOpen(slkRefNum); + if(!e) version = vskVersionNum1; + + } else { + // v2 = NX/NZ + // v3 = UX... + e = VskOpen(slkRefNum); + } + } + } else + e = sysErrLibNotFound; + } + + if (e) { + version = 0; + slkRefNum = sysInvalidRefNum; + } + + *retVersion = version; + return slkRefNum; +} + +void SilkRelease(UInt16 slkRefNum) { + if (slkRefNum != sysInvalidRefNum) + SilkLibClose(slkRefNum); +} + +UInt16 SonyHRInit(UInt32 depth) { + SonySysFtrSysInfoP sonySysFtrSysInfoP; + Err e; + UInt16 HRrefNum; + + // test if sonyHR is present + if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) { + if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrHR) { // HR available + + if ((e = SysLibFind(sonySysLibNameHR, &HRrefNum))) + if (e == sysErrLibNotFound) // can't find lib + e = SysLibLoad( 'libr', sonySysFileCHRLib, &HRrefNum); + + // Now we can use HR lib. Executes Open library. + if (!e) e = HROpen(HRrefNum); + } + } + + if (e) HRrefNum = sysInvalidRefNum; + + if (HRrefNum != sysInvalidRefNum) { + UInt32 width = hrWidth; + UInt32 height = hrHeight; + Boolean color = true; + + e = HRWinScreenMode(HRrefNum, winScreenModeSet, &width, &height, &depth, &color); + // error ? release and return an invalid reference number + if (e) { + SonyHRRelease(HRrefNum); + HRrefNum = sysInvalidRefNum; + } + } + + return HRrefNum; +} + +void SonyHRRelease(UInt16 HRrefNum) { + if (HRrefNum != sysInvalidRefNum) { + HRClose(HRrefNum); + //SysLibRemove(HRrefNum); // never call this !! + } +} + +UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) { + UInt32 version; + UInt16 slkRefNum; + UInt8 mode = 0; + + Coord sw = 160; + Coord sh = 160; + Coord fw = sw; + Coord fh = sh; + + if (HRrefNum != sysInvalidRefNum) { + sw = hrWidth; + sh = hrHeight; + fw = sw; + fh = sh; + + slkRefNum = SilkInit(&version); + + if (slkRefNum != sysInvalidRefNum) { + if (version == vskVersionNum1) { + SilkLibEnableResize(slkRefNum); + SilkLibResizeDispWin(slkRefNum, silkResizeMax); + HRWinGetWindowExtent(HRrefNum, &fw, &fh); + SilkLibResizeDispWin(slkRefNum, silkResizeNormal); + SilkLibDisableResize(slkRefNum); + mode = SONY_PORTRAIT; + + } else { + VskSetState(slkRefNum, vskStateEnable, (version == vskVersionNum2 ? vskResizeVertically : vskResizeHorizontally)); + VskSetState(slkRefNum, vskStateResize, vskResizeNone); + HRWinGetWindowExtent(HRrefNum, &fw, &fh); + VskSetState(slkRefNum, vskStateResize, vskResizeMax); + VskSetState(slkRefNum, vskStateEnable, vskResizeDisable); + mode = (version == vskVersionNum3 ? SONY_LANDSCAPE : SONY_PORTRAIT); + } + SilkRelease(slkRefNum); + } + } + + *stdw = sw; + *stdh = sh; + *fullw = fw; + *fullh = fh; + + return mode; +} diff --git a/backends/platform/PalmOS/Src/init_sony.h b/backends/platform/PalmOS/Src/init_sony.h new file mode 100644 index 0000000000..ed783cc9ff --- /dev/null +++ b/backends/platform/PalmOS/Src/init_sony.h @@ -0,0 +1,39 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef INIT_SONY_H +#define INIT_SONY_H + +#define SONY_PORTRAIT 1 +#define SONY_LANDSCAPE 2 + +UInt16 SilkInit(UInt32 *retVersion); +void SilkRelease(UInt16 slkRefNum); + +UInt16 SonyHRInit(UInt32 depth); +void SonyHRRelease(UInt16 HRrefNum); + +UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh); + +#endif \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/init_stuffs.cpp b/backends/platform/PalmOS/Src/init_stuffs.cpp new file mode 100644 index 0000000000..3b2ab9c869 --- /dev/null +++ b/backends/platform/PalmOS/Src/init_stuffs.cpp @@ -0,0 +1,130 @@ +#include +#include +#include +#include +#include +#include + +#include "globals.h" // for OPTIONS_DEF() +#include "init_stuffs.h" +#include "stuffs.h" + +#ifndef DISABLE_TAPWAVE +#define __TWKEYS_H__ // bad hack +#include "tapwave.h" +#endif + +#ifndef DISABLE_PA1LIB +#include "Pa1Lib.h" +#endif + +#ifndef DISABLE_LIGHTSPEED +#include "lightspeed_public.h" +#endif + +// TODO : check the depth to set correct value +// works only for 8bit for now +UInt32 StuffsGetPitch(Coord fullw) { + UInt32 pitch = 0; + + if (OPTIONS_TST(kOptModeHiDensity)) { + WinScreenGetAttribute(winScreenRowBytes, &pitch); + + // FIXME : hack for TT3 simulator (and real ?) return 28 on landscape mode + if (pitch < fullw) + pitch = fullw; + + } else { + pitch = fullw; + } + + return pitch; +} + +void *StuffsForceVG() { + // create an empty form to force the VG to be shown + FormType *frmP = FrmNewForm(4567, NULL, 0,0,0,0, false, 0, 0, 0); + FrmDrawForm(frmP); + return frmP; +} + +void StuffsReleaseVG(void *vg) { + FrmDeleteForm((FormPtr)vg); +} + +void StuffsGetFeatures() { + UInt32 ulProcessorType, manufacturer, version, depth; + Boolean color; + +#ifndef DISABLE_TAPWAVE + // Tapwave Zodiac libs ? + if (!FtrGet(sysFileCSystem, sysFtrNumOEMCompanyID, &manufacturer)) + if (manufacturer == twCreatorID) { + OPTIONS_SET(kOptDeviceZodiac); + OPTIONS_SET(kOpt5WayNavigatorV2); + } +#endif + + // Hi-Density present ? + if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version)) + if (version >= 4) + OPTIONS_SET(kOptModeHiDensity); + + // OS5 ? + if (!FtrGet(sysFtrCreator, sysFtrNumROMVersion, &version)) + if (version >= kOS5Version) + OPTIONS_SET(kOptDeviceOS5); + + // ARM ? + if (!FtrGet(sysFileCSystem, sysFtrNumProcessorID, &ulProcessorType)) + if (sysFtrNumProcessorIsARM(ulProcessorType)) + OPTIONS_SET(kOptDeviceARM); + else if (ulProcessorType == sysFtrNumProcessorx86) + OPTIONS_SET(kOptDeviceProcX86); + + // 5Way Navigator + if (!FtrGet(hsFtrCreator, hsFtrIDNavigationSupported, &version)) { + if (version >= 2) + OPTIONS_SET(kOpt5WayNavigatorV2); + + } else if (!FtrGet(sysFtrCreator, sysFtrNumFiveWayNavVersion, &version)) { + if (version >= 2) + OPTIONS_SET(kOpt5WayNavigatorV2); + else + OPTIONS_SET(kOpt5WayNavigatorV1); + + } else if (!FtrGet(navFtrCreator, navFtrVersion, &version)) { + if (version >= 2) + OPTIONS_SET(kOpt5WayNavigatorV2); + else + OPTIONS_SET(kOpt5WayNavigatorV1); + } + + // Palm Sound API ? + if (!FtrGet(sysFileCSoundMgr, sndFtrIDVersion, &version)) + if (version >= 1) + OPTIONS_SET(kOptPalmSoundAPI); + +#ifndef DISABLE_PA1LIB + // Sony Pa1 Sound API + if (Pa1Lib_Open()) { + OPTIONS_SET(kOptSonyPa1LibAPI); + Pa1Lib_Close(); + } +#endif + + // GoLCD + if (!FtrGet(goLcdLibCreator, goLcdLibFtrNum, &version)) + OPTIONS_SET(kOptGoLcdAPI); + +#ifndef DISABLE_LIGHTSPEED + // Lightspeed + if (LS_Installed()) + OPTIONS_SET(kOptLightspeedAPI); +#endif + + // check for 16bit mode + if (!WinScreenMode(winScreenModeGetSupportedDepths, NULL, NULL, &depth, &color)) + OPTIONS_SET(((depth & 0x8000) ? kOptMode16Bit : kOptNone)); + +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/init_stuffs.h b/backends/platform/PalmOS/Src/init_stuffs.h new file mode 100644 index 0000000000..124510eeac --- /dev/null +++ b/backends/platform/PalmOS/Src/init_stuffs.h @@ -0,0 +1,11 @@ +#ifndef INIT_STUFFS_H +#define INIT_STUFFS_H + +#define kOS5Version sysMakeROMVersion(5,0,0,sysROMStageRelease,0) + +void StuffsGetFeatures(); +UInt32 StuffsGetPitch(Coord fullw); +void *StuffsForceVG(); +void StuffsReleaseVG(void *vg); + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/app.cpp b/backends/platform/PalmOS/Src/launcher/app.cpp new file mode 100644 index 0000000000..784ad935c2 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/app.cpp @@ -0,0 +1,374 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include + +#include "StarterRsc.h" +#include "palmdefs.h" +#include "start.h" +#include "globals.h" +#include "rumble.h" + +#include "mathlib.h" +#include "formCards.h" +#include "games.h" +#include "extend.h" + +#include "modules.h" +#include "init_mathlib.h" +#include "init_sony.h" +#include "init_palmos.h" +#include "init_stuffs.h" + +/*********************************************************************** + * + * FUNCTION: AppStart + * + * DESCRIPTION: Get the current application's preferences. + * + * PARAMETERS: nothing + * + * RETURNED: Err value 0 if nothing went wrong + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStartCheckHRmode() +{ + Err e = errNone; + UInt32 depth = (OPTIONS_TST(kOptMode16Bit) && OPTIONS_TST(kOptDeviceOS5)) ? 16 : 8; + + // try to init Sony HR mode then Palm HR mode + gVars->HRrefNum = SonyHRInit(depth); + + if (gVars->HRrefNum == sysInvalidRefNum) { + if (e = PalmHRInit(depth)) + FrmCustomAlert(FrmErrorAlert,"Your device doesn't seem to support Hi-Res or 256color mode.",0,0); + } else { + OPTIONS_SET(kOptDeviceClie); + } + + return e; +} + +static void AppStopHRMode() { + if (gVars->HRrefNum != sysInvalidRefNum) + SonyHRRelease(gVars->HRrefNum); + else + PalmHRRelease(); +} + +static Err AppStartCheckNotify() { + UInt32 romVersion; + Err err; + + err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion); + if (!err) { + UInt16 cardNo; + LocalID dbID; + + err = SysCurAppDatabase(&cardNo, &dbID); + if (!err) { + SysNotifyRegister(cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL); + SysNotifyRegister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL); + SysNotifyRegister(cardNo, dbID, sonySysNotifyMsaEnforceOpenEvent, NULL, sysNotifyNormalPriority, NULL); + SysNotifyRegister(cardNo, dbID, sysNotifyDisplayResizedEvent, NULL, sysNotifyNormalPriority, NULL); + } + } + + return err; +} + +static Err AppStartLoadSkin() { + Err err = errNone; + + // if skin defined, check if the db still exists + if (gPrefs->skin.dbID) { + UInt32 type, creator; + + // check if the DB still exists + DmSearchStateType state; + UInt16 cardNo; + LocalID dbID; + Boolean found = false; + err = DmGetNextDatabaseByTypeCreator(true, &state, 'skin', appFileCreator, false, &cardNo, &dbID); + while (!err && dbID && !found) { + found = (cardNo == gPrefs->skin.cardNo && dbID == gPrefs->skin.dbID); + err = DmGetNextDatabaseByTypeCreator(false, &state, 'skin', appFileCreator, false, &cardNo, &dbID); + } + + if (found) { + // remember to check version for next revision of the skin + err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0,0, &type, &creator); + if (!err) + if (type != 'skin' || creator != appFileCreator) + err = dmErrInvalidParam; + } + + if (!found || err) + MemSet(&(gPrefs->skin),sizeof(SkinInfoType),0); + } + + // No skin ? try to get the first one + if (!gPrefs->skin.dbID) { + DmSearchStateType stateInfo; + + err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &gPrefs->skin.cardNo, &gPrefs->skin.dbID); + if (!err) + err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } + + return err; +} + +static Err AppStartCheckMathLib() { + Err e = MathlibInit(); + + switch (e) { + case errNone: + break; + case sysErrLibNotFound: + FrmCustomAlert(FrmErrorAlert,"Can't find MathLib !",0,0); + break; + default: + FrmCustomAlert(FrmErrorAlert,"Can't open MathLib !",0,0); + break; + } + + return e; +} + +static void AppStopMathLib() { + MathlibRelease(); +} + +static void AppStartCheckScreenSize() { + Coord sw, sh, fw, fh; + UInt8 mode; + + OPTIONS_RST(kOptCollapsible); + OPTIONS_RST(kOptModeWide); + OPTIONS_RST(kOptModeLandscape); + + // we are on a sony device + if (OPTIONS_TST(kOptDeviceClie)) { + mode = SonyScreenSize(gVars->HRrefNum, &sw, &sh, &fw, &fh); + if (mode) { + OPTIONS_SET(kOptModeWide); + OPTIONS_SET((mode == SONY_LANDSCAPE) ? kOptModeLandscape : kOptNone); + } + } else { + mode = PalmScreenSize(&sw, &sh, &fw, &fh); + if (mode) { + OPTIONS_SET(kOptCollapsible); + OPTIONS_SET(kOptModeWide); + OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone); + } + } + + gVars->screenWidth = sw; + gVars->screenHeight = sh; + + gVars->screenFullWidth = fw; + gVars->screenFullHeight = fh; +} + +#define max(id,value) gVars->memory[id] = (gVars->memory[id] < value ? value : gVars->memory[id]) +#define min(id,value) gVars->memory[id] = (gVars->memory[id] > value ? value : gVars->memory[id]) +#define threshold 700 + +static void AppStartSetMemory() { + UInt32 mem, def; + PalmGetMemory(0,0,0,&mem); + def = (mem > threshold) ? (mem - threshold) * 1024 : 0; + gVars->startupMemory = mem; + + // default values + gVars->memory[kMemScummOldCostGames] = (mem >= 550 + threshold) ? 550000 : def; + gVars->memory[kMemScummNewCostGames] = (mem >= 2500 + threshold) ? 2500000 : def; + gVars->memory[kMemSimon1Games] = (mem >= 1000 + threshold) ? 1000000 : def; + gVars->memory[kMemSimon2Games] = (mem >= 2000 + threshold) ? 2000000 : def; + + // set min required values + max(kMemScummOldCostGames, 450000); + max(kMemScummNewCostGames, 450000); + max(kMemSimon1Games, 500000); + max(kMemSimon2Games, 500000); + + // set max required values + min(kMemScummOldCostGames, 550000); + min(kMemScummNewCostGames, 2500000); + min(kMemSimon1Games, 1000000); + min(kMemSimon2Games, 2000000); + +} + +#undef threshold +#undef min +#undef max + +Err AppStart(void) { + UInt16 dataSize, checkSize = 0; + Err error; + +#ifndef _DEBUG_ENGINE + // delete old databases + ModDelete(); +#endif + + // allocate global variables space + dataSize = sizeof(GlobalsDataType); + gVars = (GlobalsDataType *)MemPtrNew(dataSize); + MemSet(gVars, dataSize, 0); + + gVars->indicator.on = 255; + gVars->indicator.off = 0; + gVars->HRrefNum = sysInvalidRefNum; + gVars->VFS.volRefNum = vfsInvalidVolRef; + gVars->slkRefNum = sysInvalidRefNum; + gVars->options = kOptNone; + + // set memory required by the differents engines + AppStartSetMemory(); + StuffsGetFeatures(); + + // allocate prefs space + dataSize = sizeof(GlobalsPreferenceType); + gPrefs = (GlobalsPreferenceType *)MemPtrNew(dataSize); + MemSet(gPrefs, dataSize, 0); + + // Read the saved preferences / saved-state information. + if (PrefGetAppPreferences(appFileCreator, appPrefID, NULL, &checkSize, true) == noPreferenceFound || checkSize != dataSize) { + // reset all elements + MemSet(gPrefs, dataSize, 0); + + gPrefs->card.volRefNum = vfsInvalidVolRef; + gPrefs->card.cacheSize = 4096; + gPrefs->card.useCache = true; + gPrefs->card.showLED = true; + + gPrefs->autoOff = true; + gPrefs->vibrator = RumbleExists(); + gPrefs->debug = false; + gPrefs->exitLauncher = true; + gPrefs->stdPalette = OPTIONS_TST(kOptDeviceOS5); + gPrefs->stylusClick = true; + + } else { + PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true); + } + + if (!OPTIONS_TST(kOptDeviceARM)) { + error = AppStartCheckMathLib(); + if (error) return (error); + } + + error = AppStartCheckHRmode(); + if (error) return (error); + + bDirectMode = (AppStartLoadSkin() != errNone); + + // if volref previously defined, check if it's a valid one + if (gPrefs->card.volRefNum != vfsInvalidVolRef) { + VolumeInfoType volInfo; + Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo); + if (err) + gPrefs->card.volRefNum = parseCards(); + } + else + gPrefs->card.volRefNum = parseCards(); + if (gPrefs->card.volRefNum != vfsInvalidVolRef) + CardSlotCreateDirs(); + + // open games database + error = GamOpenDatabase(); + if (error) return (error); + GamImportDatabase(); + + AppStartCheckScreenSize(); + AppStartCheckNotify(); // not fatal error if not avalaible + + return error; +} + +/*********************************************************************** + * + * FUNCTION: AppStop + * + * DESCRIPTION: Save the current state of the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err AppStopCheckNotify() +{ + UInt32 romVersion; + Err err; + + err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion); + if (!err) { + UInt16 cardNo; + LocalID dbID; + + err = SysCurAppDatabase(&cardNo, &dbID); + if (!err) { + SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority); + SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority); + // sonySysNotifyMsaEnforceOpenEvent + SysNotifyUnregister(cardNo, dbID, sysNotifyDisplayResizedEvent, sysNotifyNormalPriority); + } + } + + return err; +} + +void AppStop(void) { + // Close all the open forms. + FrmCloseAllForms(); + WinEraseWindow(); + WinPalette(winPaletteSetToDefault, 0, 256, NULL); + + // Close and move Game list database + GamCloseDatabase(false); + + // Write the saved preferences / saved-state information. This data + // will saved during a HotSync backup. + SavePrefs(); + + // stop all + AppStopCheckNotify(); + if (!OPTIONS_TST(kOptDeviceARM)) + AppStopMathLib(); + AppStopHRMode(); + + if (!bLaunched) + MemPtrFree(gVars); +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp b/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp new file mode 100644 index 0000000000..1c22ea647a --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp @@ -0,0 +1,378 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include + +#include "start.h" +#include "formTabs.h" +#include "forms.h" +#include "globals.h" + +typedef struct { + UInt16 volRefNum; + Char nameP[expCardInfoStringMaxLen+1]; + +} CardInfoType; + +static TabType *myTabP; +static UInt16 lastTab = 0; + +static void CardSlotFormExit(Boolean bSave); + +static void CardSlotFreeList() { + MemHandle cards = NULL; + MemHandle items = NULL; + + if (itemsText && itemsList) { + cards = MemPtrRecoverHandle(itemsList); + items = MemPtrRecoverHandle(itemsText); + + itemsText = NULL; + itemsList = NULL; + } + itemsType = ITEM_TYPE_UNKNOWN; + + if (items && cards) { + MemHandleUnlock(items); + MemHandleUnlock(cards); + MemHandleFree(items); + MemHandleFree(cards); + } +} + +static UInt16 CardSlotFillList(Boolean getRefNum = false) { + Err err; + UInt16 index; + UInt16 volRefNum; + UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes; + UInt8 counter = 0; + UInt32 other = 1; + + MemHandle items = NULL; + MemHandle cards = NULL; + CardInfoType *cardsInfo; + + // retreive card infos + while (volIterator != vfsIteratorStop) { + err = VFSVolumeEnumerate(&volRefNum, &volIterator); + + if (!err) { + Char labelP[expCardInfoStringMaxLen+1]; + MemSet(labelP, expCardInfoStringMaxLen+1, 0); + err = VFSVolumeGetLabel(volRefNum, labelP, expCardInfoStringMaxLen+1); + + if (err || StrLen(labelP) == 0) { // if no label try to retreive card type + VolumeInfoType volInfo; + err = VFSVolumeInfo(volRefNum, &volInfo); + + if (!err) { + ExpCardInfoType info; + err = ExpCardInfo(volInfo.slotRefNum, &info); + StrCopy(labelP, info.deviceClassStr); + } + + if (err) // if err default name + StrPrintF(labelP,"Other Card %ld", other++); + } + + if (!cards) + cards = MemHandleNew(sizeof(CardInfoType)); + else + MemHandleResize(cards, MemHandleSize(cards) + sizeof(CardInfoType)); + + cardsInfo = (CardInfoType *)MemHandleLock(cards); + cardsInfo[counter].volRefNum = volRefNum; + StrCopy(cardsInfo[counter].nameP, labelP); + MemHandleUnlock(cards); + counter++; + } + } + + if (counter > 0) { + // set the list items ... + if (!getRefNum) { + for (index = 0; index < counter; index++) { + if (!items) + items = MemHandleNew(sizeof(Char *)); + else + MemHandleResize(items, MemHandleSize(items) + sizeof(Char *)); + + itemsText = (Char **)MemHandleLock(items); + itemsText[index] = cardsInfo[index].nameP; + MemHandleUnlock(items); + } + + // save globals + itemsText = (Char **)MemHandleLock(items); + itemsList = (void *)MemHandleLock(cards); + itemsType = ITEM_TYPE_CARD; + + // ... or just return a default volRefNum + } else { + UInt16 volRefNum; + + cardsInfo = (CardInfoType *)MemHandleLock(cards); + volRefNum = cardsInfo[0].volRefNum; // return the first volref + MemHandleUnlock(cards); + MemHandleFree(cards); + + return volRefNum; + } + + // no card found ? free old list in any or return invalid volref + } else { + if (!getRefNum) + CardSlotFreeList(); + else + return vfsInvalidVolRef; + } + + return counter; +} + +static void ConfigTabInit(Boolean update = false) { + ListPtr listP; + + UInt16 index; + Int16 selected = -1; + + UInt16 counter = CardSlotFillList(); + listP = (ListType *)GetObjectPtr(TabCardConfigSlotList); + + // itemsText can be NULL if counter = 0 + LstSetListChoices (listP, itemsText, counter); + if (counter > 0) { + CardInfoType *cardsInfo = (CardInfoType *)itemsList; + + for (index = 0; index < counter; index++) { + if (cardsInfo[index].volRefNum == gPrefs->card.volRefNum) { + selected = index; + break; + } + } + + LstSetSelection(listP, selected); + } + + if (!update) { + FieldType *fld1P; + Char *cacheP; + MemHandle cacheH; + + fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField); + cacheH = MemHandleNew(FldGetMaxChars(fld1P)+1); + cacheP = (Char *)MemHandleLock(cacheH); + StrIToA(cacheP, gPrefs->card.cacheSize / 1024); + MemHandleUnlock(cacheH); + + FldSetTextHandle(fld1P, cacheH); + CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox), gPrefs->card.useCache); + CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigLedCheckbox), gPrefs->card.showLED); + // update ? redraw the list + } else { + WinScreenLock(winLockCopy); + LstDrawList(listP); + WinScreenUnlock(); + } +} + +static UInt16 ConfigTabSave() { + ControlType *cckP[2]; + FieldType *fld1P; + ListPtr listP; + FormPtr frmP; + UInt16 updateCode = frmRedrawUpdateMS; + + cckP[0] = (ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox); + cckP[1] = (ControlType *)GetObjectPtr(TabCardConfigLedCheckbox); + + gPrefs->card.useCache = CtlGetValue(cckP[0]); + gPrefs->card.showLED = CtlGetValue(cckP[1]); + + fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField); + frmP = FrmGetActiveForm(); + if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[0]) == 1) { + TabSetActive(frmP, myTabP, 0); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabCardConfigCacheSizeField)); + FrmCustomAlert(FrmWarnAlert,"You must specified a cache size.",0,0); + return 0; + } + gPrefs->card.cacheSize = StrAToI(FldGetTextPtr(fld1P)) * 1024; + + Int16 selected; + CardInfoType *cardsInfo = (CardInfoType *)itemsList; + + listP = (ListType *)GetObjectPtr(TabCardConfigSlotList); + selected = LstGetSelection(listP); + if (selected == -1) { + gPrefs->card.volRefNum = vfsInvalidVolRef; + } else if (gPrefs->card.volRefNum != cardsInfo[selected].volRefNum) { + updateCode = frmRedrawUpdateMSImport; + gPrefs->card.volRefNum = cardsInfo[selected].volRefNum; + } + + CardSlotCreateDirs(); + CardSlotFreeList(); + + return updateCode; +} + +static void GameListTabInit() { + CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox), gPrefs->card.moveDB); + CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox), gPrefs->card.deleteDB); + CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox), gPrefs->card.confirmMoveDB); +} + +static void GameListTabSave() { + ControlType *cckP[3]; + + cckP[0] = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox); + cckP[1] = (ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox); + cckP[2] = (ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox); + + gPrefs->card.moveDB = CtlGetValue(cckP[0]); + gPrefs->card.deleteDB = CtlGetValue(cckP[1]); + gPrefs->card.confirmMoveDB = CtlGetValue(cckP[2]); +} + +static void GameListTabDraw() { + ControlType *cck1P; + FormPtr frmP = FrmGetActiveForm(); + + cck1P = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox); + if (CtlGetValue(cck1P)) { + FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox)); + FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox)); + } else { + FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox)); + FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox)); + } +} + +static void CardSlotFormInit() { + TabType *tabP; + FormType *frmP = FrmGetActiveForm(); + + tabP = TabNewTabs(2); + TabAddContent(&frmP, tabP, "Cards", TabCardConfigForm); + TabAddContent(&frmP, tabP, "Game List", TabCardGameListForm, GameListTabDraw); + + ConfigTabInit(); + GameListTabInit(); + + FrmDrawForm(frmP); + TabSetActive(frmP, tabP, lastTab); + + myTabP = tabP; +} + +static void CardSlotFormSave() { + UInt16 updateCode; + updateCode = ConfigTabSave(); + if (!updateCode) return; + GameListTabSave(); + CardSlotCreateDirs(); + + TabDeleteTabs(myTabP); + FrmReturnToMain(updateCode); +} + +static void CardSlotFormCancel() { + CardSlotFreeList(); + TabDeleteTabs(myTabP); + FrmReturnToMain(); +} + +Boolean CardSlotFormHandleEvent(EventPtr eventP) { + FormPtr frmP = FrmGetActiveForm(); + Boolean handled = false; + + switch (eventP->eType) { + case frmOpenEvent: + CardSlotFormInit(); + handled = true; + break; + + case frmCloseEvent: + CardSlotFormCancel(); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case (CardSlotForm + 1) : + case (CardSlotForm + 2) : + lastTab = (eventP->data.ctlSelect.controlID - CardSlotForm - 1); + TabSetActive(frmP, myTabP, lastTab); + break; + + case CardSlotOkButton: + CardSlotFormSave(); + break; + + case CardSlotCancelButton: + CardSlotFormCancel(); + break; + + case TabCardGameListMoveCheckbox: + GameListTabDraw(); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} + +void CardSlotCreateDirs() { + if (gPrefs->card.volRefNum != vfsInvalidVolRef) { + VFSDirCreate(gPrefs->card.volRefNum, "/PALM"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Games"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Saved"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Audio"); + VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Mods"); + } +} + +void CardSlotFormUpdate() { + if (itemsType == ITEM_TYPE_CARD) { + CardSlotFreeList(); + ConfigTabInit(true); + } +} + +UInt16 parseCards() { + UInt16 volRefNum = CardSlotFillList(true); + CardSlotFreeList(); + return volRefNum; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formCards.h b/backends/platform/PalmOS/Src/launcher/forms/formCards.h new file mode 100644 index 0000000000..956ef86340 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formCards.h @@ -0,0 +1,32 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __FORMCARDS_H__ +#define __FORMCARDS_H__ + +UInt16 parseCards(); +void CardSlotFormUpdate(); +void CardSlotCreateDirs(); + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp new file mode 100644 index 0000000000..42953ad15e --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp @@ -0,0 +1,611 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include + +#include "formTabs.h" +#include "forms.h" + +#include "start.h" +#include "games.h" +#include "skin.h" + +#define errBadParam 0x1000 + +static TabType *myTabP; +static UInt16 lastTab = 0; + +UInt8 gFormEditMode; + +static void GameTabInit(GameInfoType *gameInfoP) { + FieldType *fld1P, *fld2P, *fld3P; + Char *nameP, *pathP, *gameP; + MemHandle nameH, pathH, gameH; + ListType *list1P; + + list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList); + + itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *)); + for (int i = 0; i < ENGINE_COUNT; i++) + itemsText[i] = (Char *)engines[i].nameP; + LstSetListChoices(list1P, itemsText, ENGINE_COUNT); + + fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); + fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); + fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField); + + nameH = MemHandleNew(FldGetMaxChars(fld1P)+1); + pathH = MemHandleNew(FldGetMaxChars(fld2P)+1); + gameH = MemHandleNew(FldGetMaxChars(fld3P)+1); + + nameP = (Char *)MemHandleLock(nameH); + pathP = (Char *)MemHandleLock(pathH); + gameP = (Char *)MemHandleLock(gameH); + + if (gameInfoP) { + LstSetSelection(list1P, gameInfoP->engine); + LstSetTopItem(list1P, gameInfoP->engine); + StrCopy(nameP, gameInfoP->nameP); + StrCopy(pathP, gameInfoP->pathP); + StrCopy(gameP, gameInfoP->gameP); + } else { + LstSetSelection(list1P, 0); + MemSet(nameP,MemHandleSize(nameH),0); + MemSet(pathP,MemHandleSize(pathH),0); + MemSet(gameP,MemHandleSize(gameH),0); + } + + CtlSetLabel((ControlType *)GetObjectPtr(TabGameInfoEnginePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + + MemHandleUnlock(nameH); + MemHandleUnlock(pathH); + MemHandleUnlock(gameH); + + FldSetTextHandle(fld1P, nameH); + FldSetTextHandle(fld2P, pathH); + FldSetTextHandle(fld3P, gameH); +} + +static Err GameTabSave(GameInfoType *gameInfoP) { + FieldType *fld1P, *fld2P, *fld3P; + ListType *list1P; + + FormType *frmP = FrmGetActiveForm(); + list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList); + + fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); + fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); + fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField); + + FldTrimText(fld1P); + FldTrimText(fld2P); + FldTrimText(fld3P); + + // test case + if (!gameInfoP) { + if (FldGetTextLength(fld1P) == 0) { + FrmCustomAlert(FrmWarnAlert,"You must specify an entry name.",0,0); + TabSetActive(frmP, myTabP, 0); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField)); + return errBadParam; + + } else if (FldGetTextLength(fld2P) == 0) { + FrmCustomAlert(FrmWarnAlert,"You must specify a path.",0,0); + TabSetActive(frmP, myTabP, 0); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoPathField)); + return errBadParam; + + } else if (FldGetTextLength(fld3P) == 0) { + FrmCustomAlert(FrmWarnAlert,"You must specify a game.",0,0); + TabSetActive(frmP, myTabP, 0); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoGameField)); + return errBadParam; + } + + } else { + gameInfoP->engine = LstGetSelection(list1P); + StrCopy(gameInfoP->nameP, FldGetTextPtr(fld1P)); + StrCopy(gameInfoP->pathP, FldGetTextPtr(fld2P)); + StrCopy(gameInfoP->gameP, FldGetTextPtr(fld3P)); + + if (gameInfoP->pathP[StrLen(gameInfoP->pathP)-1] != '/') + StrCat(gameInfoP->pathP, "/"); + + MemPtrFree(itemsText); + itemsText = NULL; + } + + return errNone; +} + +static void DisplayInit(GameInfoType *gameInfoP) { + ListType *list1P, *list2P; + + list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList); + list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList); + + if (gameInfoP) { + LstSetSelection(list1P, gameInfoP->gfxMode); + LstSetSelection(list2P, gameInfoP->renderMode); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), gameInfoP->filter); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), gameInfoP->fullscreen); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), gameInfoP->aspectRatio); + + } else { + LstSetSelection(list1P, 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), 0); + } + + CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayRenderPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); +} + +static Err DisplaySave(GameInfoType *gameInfoP) { + ListType *list1P, *list2P; + ControlType *cck6P, *cck7P, *cck8P; + + FormType *frmP = FrmGetActiveForm(); + + list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList); + list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList); + cck6P = (ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox); + cck7P = (ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox); + cck8P = (ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox); + + if (!gameInfoP) { + } else { + gameInfoP->gfxMode = LstGetSelection(list1P); + gameInfoP->renderMode = LstGetSelection(list2P); + gameInfoP->filter = CtlGetValue(cck6P); + gameInfoP->fullscreen = CtlGetValue(cck7P); + gameInfoP->aspectRatio = CtlGetValue(cck8P); + } + + return errNone; +} + +static void OptionsInit(GameInfoType *gameInfoP) { + ListType *list2P, *list3P; + FieldType *fld4P, *fld5P, *fld6P; + Char *loadP, *roomP, *talkP; + MemHandle loadH, roomH, talkH; + + list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList); + list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList); + + fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField); + fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField); + fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField); + + loadH = MemHandleNew(FldGetMaxChars(fld4P)+1); + roomH = MemHandleNew(FldGetMaxChars(fld5P)+1); + talkH = MemHandleNew(FldGetMaxChars(fld6P)+1); + + loadP = (Char *)MemHandleLock(loadH); + roomP = (Char *)MemHandleLock(roomH); + talkP = (Char *)MemHandleLock(talkH); + + if (gameInfoP) { + LstSetSelection(list2P, gameInfoP->language); + LstSetTopItem(list2P, gameInfoP->language); + LstSetSelection(list3P, gameInfoP->platform); + LstSetTopItem(list3P, gameInfoP->platform); + + StrIToA(loadP, gameInfoP->loadSlot); + StrIToA(roomP, gameInfoP->bootValue); + StrIToA(talkP, gameInfoP->talkValue); + + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), gameInfoP->autoLoad); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), gameInfoP->bootParam); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), gameInfoP->setPlatform); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), gameInfoP->subtitles); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), gameInfoP->talkSpeed); + + } else { + LstSetSelection(list2P, 0); + LstSetSelection(list3P, 0); + + StrIToA(loadP, 0); + StrIToA(roomP, 0); + StrIToA(talkP, 60); + + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), 0); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), 1); + CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), 0); + } + + MemHandleUnlock(loadH); + MemHandleUnlock(roomH); + MemHandleUnlock(talkH); + + FldSetTextHandle(fld4P, loadH); + FldSetTextHandle(fld5P, roomH); + FldSetTextHandle(fld6P, talkH); + + CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); + CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsPlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P))); +} + +static Err OptionsSave(GameInfoType *gameInfoP) { + FieldType *fld4P, *fld5P, *fld6P; + ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P; + ListType *list2P, *list3P; + + FormType *frmP = FrmGetActiveForm(); + + list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList); + list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList); + + fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField); + fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField); + fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField); + + cck1P = (ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox); + cck2P = (ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox); + cck3P = (ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox); + cck4P = (ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox); + cck5P = (ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox); + + if (!gameInfoP) { + if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) { + FrmCustomAlert(FrmWarnAlert,"You must specify a room number.",0,0); + TabSetActive(frmP, myTabP, 2); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsStartRoomField)); + return errBadParam; + + } else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) { + FrmCustomAlert(FrmWarnAlert,"You must specify a talk speed.",0,0); + TabSetActive(frmP, myTabP, 2); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsTalkSpeedField)); + return errBadParam; + } + } else { + gameInfoP->language = LstGetSelection(list2P); + gameInfoP->platform = LstGetSelection(list3P); + + gameInfoP->autoLoad = CtlGetValue(cck1P); + gameInfoP->bootParam = CtlGetValue(cck2P); + gameInfoP->setPlatform = CtlGetValue(cck3P); + gameInfoP->subtitles = (CtlGetValue(cck4P)); + gameInfoP->talkSpeed = CtlGetValue(cck5P); + + gameInfoP->loadSlot = StrAToI(FldGetTextPtr(fld4P)); + gameInfoP->bootValue = StrAToI(FldGetTextPtr(fld5P)); + gameInfoP->talkValue = StrAToI(FldGetTextPtr(fld6P)); + } + + return errNone; +} + +static void GameManInit(UInt16 index) { + TabType *tabP; + FormType *frmP = FrmGetActiveForm(); + UInt16 active = lastTab; + + tabP = TabNewTabs(3); + TabAddContent(&frmP, tabP, "Game", TabGameInfoForm); + TabAddContent(&frmP, tabP, "Display", TabGameDisplayForm); + TabAddContent(&frmP, tabP, "Options", TabGameOptionsForm); + + UInt16 refNum; + if (SysLibFind(kFileBrowserLibName, &refNum)) + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabGameInfoBrowsePushButton)); + + if (index != dmMaxRecordIndex) { + MemHandle recordH = NULL; + GameInfoType *gameInfoP; + + recordH = DmQueryRecord(gameDB, index); + gameInfoP = (GameInfoType *)MemHandleLock(recordH); + + GameTabInit(gameInfoP); + DisplayInit(gameInfoP); + OptionsInit(gameInfoP); + + MemHandleUnlock(recordH); + CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),true); + } else { + active = 0; // new game ? start with first tab + GameTabInit(0); + DisplayInit(0); + OptionsInit(0); + CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),false); + } + + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField)); + FrmDrawForm(frmP); + TabSetActive(frmP, tabP, active); + + myTabP = tabP; +} + +static void GameManSave(UInt16 index) { + MemHandle recordH; + GameInfoType *gameInfoP, newGameInfo; + + if (GameTabSave(0) == errBadParam) return; + if (DisplaySave(0) == errBadParam) return; + if (OptionsSave(0) == errBadParam) return; + + if (index != dmMaxRecordIndex) { + recordH = DmGetRecord(gameDB, index); + gameInfoP = (GameInfoType *)MemHandleLock(recordH); + MemMove(&newGameInfo, gameInfoP, sizeof(GameInfoType)); + + } else { + index = dmMaxRecordIndex; + GamUnselect(); + recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType)); + gameInfoP = (GameInfoType *)MemHandleLock(recordH); + + MemSet(&newGameInfo, sizeof(GameInfoType), 0); + newGameInfo.version = curItemVersion; + newGameInfo.icnID = 0xFFFF; + newGameInfo.selected = true; + + // default sound data + newGameInfo.musicInfo.volume.palm = 50; + newGameInfo.musicInfo.volume.music = 192; + newGameInfo.musicInfo.volume.sfx = 192; + newGameInfo.musicInfo.volume.speech = 192; + newGameInfo.musicInfo.volume.audiocd = 50; + + newGameInfo.musicInfo.sound.tempo = 100; + newGameInfo.musicInfo.sound.defaultTrackLength = 10; + newGameInfo.musicInfo.sound.firstTrack = 1; + } + + GameTabSave(&newGameInfo); + DisplaySave(&newGameInfo); + OptionsSave(&newGameInfo); + + DmWrite(gameInfoP, 0, &newGameInfo, sizeof(GameInfoType)); + + MemHandleUnlock(recordH); + DmReleaseRecord (gameDB, index, 0); + GamSortList(); + // update list position + { + RectangleType rArea; + UInt16 posIndex, maxView; + + // get the sorted index + index = GamGetSelected(); + // if new item is out of the list bounds, change current list pos + SknGetListBounds(&rArea, NULL); + maxView = rArea.extent.y / sknInfoListItemSize; + posIndex = gPrefs->listPosition; + + // if out of the current list position + if (!(index >= posIndex && index < (posIndex + maxView))) + gPrefs->listPosition = index; // this value is corrected in SknUpdateList if needed + } + + TabDeleteTabs(myTabP); + FrmReturnToMain(); + SknUpdateList(); +} + +/*********************************************************************** + * + * FUNCTION: EditGameFormSave + * FUNCTION: EditGameFormInit + * FUNCTION: EditGameFormHandleEvent + * + * DESCRIPTION: + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +void EditGameFormDelete(Boolean direct) { + UInt16 index = GamGetSelected(); + + if (index == dmMaxRecordIndex) { + FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); + return; + + } else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) { + DmRemoveRecord(gameDB, index); + if (!direct) { + TabDeleteTabs(myTabP); + FrmReturnToMain(); + } + GamSortList(); + SknUpdateList(); + } +} + +static void EditGameCancel() { + if (itemsText) { + MemPtrFree(itemsText); + itemsText = NULL; + } + TabDeleteTabs(myTabP); + FrmReturnToMain(); +} + +static void EditGameBowser() { + UInt16 refNum; + Err e; + + ControlPtr butP = (ControlType *)GetObjectPtr(TabGameInfoBrowsePushButton); + CtlSetValue(butP, 0); + + e = SysLibFind (kFileBrowserLibName, &refNum); + if (!e) { + e = FileBrowserLibOpen (refNum); + if (!e) { + UInt16 volRefNum = gPrefs->card.volRefNum; + Char *textP, *pathP = (Char *)MemPtrNew(kFileBrowserLibPathBufferSize); + pathP[0] = chrNull; + + if (FileBrowserLibShowOpenDialog(refNum, &volRefNum, pathP, 0, 0, 0, "Game Data Path", kFileBrowserLibFlagNoFiles)) { + FieldPtr fldP; + MemHandle textH; + Int16 offset, copySize, maxSize; + + fldP = (FieldType *)GetObjectPtr(TabGameInfoPathField); + maxSize = FldGetMaxChars(fldP); + textH = FldGetTextHandle(fldP); + + FldSetTextHandle(fldP, NULL); + textP = (Char *)MemHandleLock(textH); + offset = 0; + copySize = StrLen(pathP); + + if (StrNCaselessCompare(pathP, "/Palm/Programs/ScummVM/Games/", 29) == 0) { + if (StrLen(pathP) == 29) { + copySize = 1; + pathP[0] = '.'; + } else { + copySize -= 29; + offset = 29; + } + } + + if (copySize > maxSize) + copySize = maxSize; + StrNCopy(textP, pathP + offset, copySize); + + MemHandleUnlock(textH); + FldSetTextHandle(fldP, textH); + FldDrawField(fldP); + FldGrabFocus(fldP); + } + + MemPtrFree(pathP); + FileBrowserLibClose(refNum); + } + } +} + +Boolean EditGameFormHandleEvent(EventPtr eventP) { + FormPtr frmP = FrmGetActiveForm(); + Boolean handled = false; + + switch (eventP->eType) { + case frmCloseEvent: + EditGameCancel(); + handled = true; + break; + + case frmOpenEvent: + switch (gFormEditMode) { + case edtModeAdd: + GameManInit(dmMaxRecordIndex); + break; + case edtModeEdit: + case edtModeParams: + default : + GameManInit(GamGetSelected()); + break; + } + handled = true; + break; + + case keyDownEvent: + switch (eventP->data.keyDown.chr) { + case chrLineFeed: + case chrCarriageReturn: + return true; + } + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case (GameEditForm + 1) : + case (GameEditForm + 2) : + case (GameEditForm + 3) : + lastTab = (eventP->data.ctlSelect.controlID - GameEditForm - 1); + TabSetActive(frmP, myTabP, lastTab); + break; + + case GameEditOKButton: + switch (gFormEditMode) { + case edtModeAdd: + GameManSave(dmMaxRecordIndex); + break; + case edtModeEdit: + case edtModeParams: + default : + GameManSave(GamGetSelected()); + break; + } + break; + + case GameEditCancelButton: + EditGameCancel(); + break; + + case GameEditDeleteButton: + EditGameFormDelete(false); + break; + + case TabGameInfoBrowsePushButton: + EditGameBowser(); + break; + + case TabGameInfoEnginePopTrigger: + FrmList(eventP, TabGameInfoEngineList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameInfoEngineList)); + break; + + case TabGameDisplayGfxPopupPopTrigger: + FrmList(eventP, TabGameDisplayGfxListList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayGfxListList)); + break; + + case TabGameDisplayRenderPopTrigger: + FrmList(eventP, TabGameDisplayRenderList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayRenderList)); + break; + + case TabGameOptionsLanguagePopTrigger: + FrmList(eventP, TabGameOptionsLanguageList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsLanguageList)); + break; + + case TabGameOptionsPlatformPopTrigger: + FrmList(eventP, TabGameOptionsPlatformList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsPlatformList)); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h new file mode 100644 index 0000000000..2e76e7ebb5 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h @@ -0,0 +1,38 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __FORMEDITGAME_H__ +#define __FORMEDITGAME_H__ + +// edit game mode +enum { + edtModeAdd, + edtModeEdit, + edtModeParams +}; + +extern UInt8 gFormEditMode; +void EditGameFormDelete(Boolean direct); + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp b/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp new file mode 100644 index 0000000000..9b4009294c --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp @@ -0,0 +1,272 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#include "start.h" +#include "formTabs.h" +#include "forms.h" +#include "globals.h" + +static TabType *myTabP; +static UInt16 lastTab = 0; + +static Boolean ScummVMTabSave() { + FieldType *fld1P, *fld2P; + ControlType *cckP[11]; + FormPtr frmP; + + fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField); + fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField); + + cckP[0] = (ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox); + cckP[3] = (ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox); + cckP[6] = (ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox); + cckP[9] = (ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox); + cckP[10]= (ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox); + + frmP = FrmGetActiveForm(); + if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[3]) == 1) { + TabSetActive(frmP, myTabP, 1); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMDebugLevelField)); + FrmCustomAlert(FrmWarnAlert,"You must specify a debug level.",0,0); + return false; + + } else if (FldGetTextLength(fld2P) == 0 && CtlGetValue(cckP[0]) == 1) { + TabSetActive(frmP, myTabP, 1); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMAutosaveField)); + FrmCustomAlert(FrmWarnAlert,"You must specify a period.",0,0); + return false; + } + + gPrefs->autoSave = CtlGetValue(cckP[0]); + gPrefs->debug = CtlGetValue(cckP[3]); + gPrefs->demoMode = CtlGetValue(cckP[6]); + gPrefs->copyProtection = CtlGetValue(cckP[9]); + gPrefs->altIntro = CtlGetValue(cckP[10]); + + gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P)); + gPrefs->autoSavePeriod = StrAToI(FldGetTextPtr(fld2P)); + + return true; +} + +static void PalmOSTabSave() { + ControlType *cckP[11]; + + if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac)) { + cckP[3]= (ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox); + gPrefs->advancedMode = CtlGetValue(cckP[3]); + } + + if (!OPTIONS_TST(kOptDeviceARM)) { + cckP[2] = (ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox); + gPrefs->stdPalette = CtlGetValue(cckP[2]); + } + + cckP[0] = (ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox); + cckP[1] = (ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox); + cckP[4] = (ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox); + cckP[5] = (ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox); + cckP[6] = (ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox); + cckP[7] = (ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox); + + gPrefs->vibrator = CtlGetValue(cckP[0]); + gPrefs->autoOff = !CtlGetValue(cckP[1]); + gPrefs->setStack = CtlGetValue(cckP[4]); + gPrefs->exitLauncher = CtlGetValue(cckP[5]); + gPrefs->stylusClick = !CtlGetValue(cckP[6]); + gPrefs->arrowKeys = CtlGetValue(cckP[7]); +} + +static void ExtsTabSave() { + ControlType *cckP[2]; + + if (OPTIONS_TST(kOptLightspeedAPI)) { + ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList); + cckP[0] = (ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox); + + gPrefs->lightspeed.enable = CtlGetValue(cckP[0]); + gPrefs->lightspeed.mode = LstGetSelection(list1P); + } + if (OPTIONS_TST(kOptGoLcdAPI)) { + cckP[1] = (ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox); + gPrefs->goLCD = CtlGetValue(cckP[1]); + } +} + +static void ScummVMTabInit() { + FieldType *fld1P, *fld2P; + Char *levelP, *periodP; + MemHandle levelH, periodH; + + CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox), gPrefs->autoSave); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox), gPrefs->debug); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox), gPrefs->demoMode); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox), gPrefs->copyProtection); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox), gPrefs->altIntro); + + fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField); + fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField); + + levelH = MemHandleNew(FldGetMaxChars(fld1P)+1); + levelP = (Char *)MemHandleLock(levelH); + StrIToA(levelP, gPrefs->debugLevel); + MemHandleUnlock(levelH); + + periodH = MemHandleNew(FldGetMaxChars(fld2P)+1); + periodP = (Char *)MemHandleLock(periodH); + StrIToA(periodP, gPrefs->autoSavePeriod); + MemHandleUnlock(periodH); + + FldSetTextHandle(fld1P, levelH); + FldSetTextHandle(fld2P, periodH); +} + +static void PalmOSTabInit() { + if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac)) + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox), gPrefs->advancedMode); + + if (!OPTIONS_TST(kOptDeviceARM)) + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox), gPrefs->stdPalette); + + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox), gPrefs->exitLauncher); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox), gPrefs->setStack); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox), gPrefs->vibrator); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox), !gPrefs->autoOff); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox), !gPrefs->stylusClick); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox), gPrefs->arrowKeys); +} + +static void ExtsTabInit() { + if (OPTIONS_TST(kOptLightspeedAPI)) { + ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList); + LstSetSelection(list1P, gPrefs->lightspeed.mode); + CtlSetLabel((ControlType *)GetObjectPtr(TabMiscExtsLightspeedPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox), gPrefs->lightspeed.enable); + } + + if (OPTIONS_TST(kOptGoLcdAPI)) + CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox), gPrefs->goLCD); +} + +static void MiscFormSave() { + if (!ScummVMTabSave()) return; + PalmOSTabSave(); + ExtsTabSave(); + + TabDeleteTabs(myTabP); + FrmReturnToMain(); +} + +static void MiscFormInit() { + TabType *tabP; + FormType *frmP = FrmGetActiveForm(); + UInt8 extsCnt = 2; + + tabP = TabNewTabs(3); + TabAddContent(&frmP, tabP, "PalmOS", TabMiscPalmOSForm); + TabAddContent(&frmP, tabP, "ScummVM", TabMiscScummVMForm); + TabAddContent(&frmP, tabP, "More ...", TabMiscExtsForm); + + if (!OPTIONS_TST(kOptDeviceARM) || OPTIONS_TST(kOptDeviceZodiac)) + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSAdvancedCheckbox)); + + if (OPTIONS_TST(kOptDeviceARM)) + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSStdPaletteCheckbox)); + + if (!OPTIONS_TST(kOptGoLcdAPI)) { + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsGolcdCheckbox)); + // move lightspeed + TabMoveUpObject(frmP, TabMiscExtsLightspeedCheckbox, 12); + TabMoveUpObject(frmP, TabMiscExtsLightspeedPopTrigger, 12); + TabMoveUpObject(frmP, TabMiscExtsLightspeedList, 12); + TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12); + extsCnt--; + } + + if (!OPTIONS_TST(kOptLightspeedAPI)) { + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedCheckbox)); +// FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList)); // cannot remove this ? + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedPopTrigger)); + TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12); + extsCnt--; + } + + if (extsCnt) + FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsNothingLabel)); + + PalmOSTabInit(); + ScummVMTabInit(); + ExtsTabInit(); + + FrmDrawForm(frmP); + TabSetActive(frmP, tabP, lastTab); + + myTabP = tabP; +} + +Boolean MiscFormHandleEvent(EventPtr eventP) { + FormPtr frmP = FrmGetActiveForm(); + Boolean handled = false; + + switch (eventP->eType) { + case frmOpenEvent: + MiscFormInit(); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case (MiscForm + 1) : + case (MiscForm + 2) : + case (MiscForm + 3) : + lastTab = (eventP->data.ctlSelect.controlID - MiscForm - 1); + TabSetActive(frmP, myTabP, lastTab); + break; + + case TabMiscExtsLightspeedPopTrigger: + FrmList(eventP, TabMiscExtsLightspeedList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList)); + break; + + case MiscOKButton: + MiscFormSave(); + break; + + case MiscCancelButton: + TabDeleteTabs(myTabP); + FrmReturnToMain(); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp b/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp new file mode 100644 index 0000000000..b4c1e222d0 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp @@ -0,0 +1,267 @@ +#include + +#include "palmdefs.h" +#include "start.h" +#include "forms.h" +#include "skin.h" +#include "globals.h" + +static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) { + return StrCompare(a->nameP, b->nameP); +} + +static void SkinsFormInit(Boolean bDraw) { + MemHandle skins = NULL; + SkinInfoType *skinsInfo; + UInt16 numSkins = 0; + + FormPtr frmP; + ListType *listP; + MemHandle items = NULL; + ControlType *cck1P; + DmSearchStateType stateInfo; + UInt16 cardNo; + LocalID dbID; + + Err errInfo; + Char nameP[32]; + + itemsText = NULL; + + // parse and save skins + Err err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID); + while (!err && dbID) { + errInfo = DmDatabaseInfo (cardNo, dbID, nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + if (!errInfo) + { + if (!skins) + skins = MemHandleNew(sizeof(SkinInfoType)); + else + MemHandleResize(skins, MemHandleSize(skins) + sizeof(SkinInfoType)); + + skinsInfo = (SkinInfoType *)MemHandleLock(skins); + StrCopy(skinsInfo[numSkins].nameP, nameP); + skinsInfo[numSkins].cardNo = cardNo; + skinsInfo[numSkins].dbID = dbID; + MemHandleUnlock(skins); + numSkins++; + } + err = DmGetNextDatabaseByTypeCreator(false, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID); + } + + Int16 selected = -1; + + cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox); + CtlSetValue(cck1P, gPrefs->soundClick); + + listP = (ListType *)GetObjectPtr(SkinsSkinList); + skinsInfo = (SkinInfoType *)MemHandleLock(skins); + SysQSort(skinsInfo, numSkins, sizeof(SkinInfoType), (CmpFuncPtr)SkinsFormCompare, 0); + + // create itemsText (TODO: create a custom draw function) + for (UInt16 index=0; index < numSkins; index++) + { + if (!items) + items = MemHandleNew(sizeof(Char *)); + else + MemHandleResize(items, MemHandleSize(items) + sizeof(Char *)); + + itemsText = (Char **)MemHandleLock(items); + itemsText[index] = skinsInfo[index].nameP; + MemHandleUnlock(items); + + if ( gPrefs->skin.cardNo == skinsInfo[index].cardNo && + gPrefs->skin.dbID == skinsInfo[index].dbID && + StrCompare(gPrefs->skin.nameP, skinsInfo[index].nameP) == 0) + selected = index; + } + // save globals and set list + itemsText = (Char **)MemHandleLock(items); + itemsList = (void *)skinsInfo; + itemsType = ITEM_TYPE_SKIN; + + LstSetListChoices (listP, itemsText, numSkins); + LstSetSelection(listP, selected); + + // bDraw = true -> draw whole from + // bDraw = false -> redraw list + if (bDraw) { + frmP = FrmGetActiveForm(); + FrmDrawForm(frmP); + } else { + WinScreenLock(winLockCopy); + LstDrawList(listP); + WinScreenUnlock(); +// LstSetSelection(listP, 0); + } +} + +static void SkinsFormExit(Boolean bSave) { + MemHandle skins; + MemHandle items; + SkinInfoType *skinsInfo; + + ListType *listP; + Int16 selected; + + listP = (ListType *)GetObjectPtr(SkinsSkinList); + selected = LstGetSelection(listP); + + if (bSave && selected == -1) { // may never occured... + FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0); + return; + } + + skinsInfo = (SkinInfoType *)itemsList; + skins = MemPtrRecoverHandle(skinsInfo); + items = MemPtrRecoverHandle(itemsText); + + itemsText = NULL; + itemsList = NULL; + itemsType = ITEM_TYPE_UNKNOWN; + + if (bSave) { + ControlType *cck1P; + + StrCopy(gPrefs->skin.nameP, skinsInfo[selected].nameP); + gPrefs->skin.cardNo = skinsInfo[selected].cardNo; + gPrefs->skin.dbID = skinsInfo[selected].dbID; + +/* DmOpenRef skinDB = SknOpenSkin(); + UInt32 depth = SknGetDepth(skinDB); + SknCloseSkin(skinDB); + + if (depth != 8 && depth != 16) depth = 8; + + if (depth == 16 && !OPTIONS_TST(kOptMode16Bit)) { + FrmCustomAlert(FrmInfoAlert, "You can only use 8bit skin on your device.", 0, 0); + gPrefs->skin.cardNo = cardNo; + gPrefs->skin.dbID = dbID; + } +*/ + cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox); + gPrefs->soundClick = CtlGetValue(cck1P); + } + + FrmReturnToMain(); + + MemHandleUnlock(items); + MemHandleUnlock(skins); + MemHandleFree(items); + MemHandleFree(skins); + + if (bSave) + SknApplySkin(); +} + +static void SkinsFormBeam() { + SkinInfoType *skinsInfo; + + ListType *listP; + Int16 selected; + Err err; + + listP = (ListType *)GetObjectPtr(SkinsSkinList); + selected = LstGetSelection(listP); + + if (selected == -1) { // may never occured... + FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0); + return; + } + + skinsInfo = (SkinInfoType *)itemsList; + err = SendDatabase(0, skinsInfo[selected].dbID, "skin.pdb", "\nScummVM Skin"); + +// if (err) +// FrmCustomAlert(FrmErrorAlert, "Unable to beam this skin.",0,0); +} + +static void SkinsFormDelete() { + MemHandle skins; + MemHandle items; + SkinInfoType *skinsInfo; + + ListType *listP; + Int16 selected; + + listP = (ListType *)GetObjectPtr(SkinsSkinList); + selected = LstGetSelection(listP); + + if (selected == -1) { // may never occured... + FrmCustomAlert(FrmInfoAlert, "You didn't select a skin.", 0, 0); + return; + } + + skinsInfo = (SkinInfoType *)itemsList; + skins = MemPtrRecoverHandle(skinsInfo); + items = MemPtrRecoverHandle(itemsText); + + if ( gPrefs->skin.cardNo == skinsInfo[selected].cardNo && + gPrefs->skin.dbID == skinsInfo[selected].dbID && + StrCompare(gPrefs->skin.nameP, skinsInfo[selected].nameP) == 0) { + FrmCustomAlert(FrmInfoAlert, "You cannot delete the active skin.",0,0); + return; + + } else { + Err err = DmDeleteDatabase(0, skinsInfo[selected].dbID); + if (!err) { + + itemsText = NULL; + itemsList = NULL; + itemsType = ITEM_TYPE_UNKNOWN; + + MemHandleUnlock(items); + MemHandleUnlock(skins); + MemHandleFree(items); + MemHandleFree(skins); + + SkinsFormInit(false); + } else { + FrmCustomAlert(FrmErrorAlert, "Skin deletion failed.",0,0); + } + } + +} +Boolean SkinsFormHandleEvent(EventPtr eventP) { + Boolean handled = false; + + switch (eventP->eType) { + + case frmOpenEvent: + SkinsFormInit(true); + handled = true; + break; + + case frmCloseEvent: + SkinsFormExit(false); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case SkinsOKButton: + SkinsFormExit(true); + break; + + case SkinsCancelButton: + SkinsFormExit(false); + break; + + case SkinsBeamButton: + SkinsFormBeam(); + break; + + case SkinsDeleteButton: + SkinsFormDelete(); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp b/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp new file mode 100644 index 0000000000..6d1d55e6e2 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp @@ -0,0 +1,60 @@ +#include +#include + +#include "forms.h" + +Char **itemsText = NULL; +void *itemsList = NULL; +Char itemsType = ITEM_TYPE_UNKNOWN; + +void FrmReturnToMain(UInt16 updateCode) { + // if there is a form loaded, prevent crash on OS5 + if (FrmGetFirstForm()) { + FrmUpdateForm(MainForm, updateCode); + FrmReturnToForm(MainForm); + } +} + +void FldTrimText(FieldPtr fldP) { + MemHandle tmpH; + Char *tmpP; + + tmpH = FldGetTextHandle(fldP); + FldSetTextHandle(fldP, NULL); + tmpP = (Char *)MemHandleLock(tmpH); + TxtGlueStripSpaces(tmpP, true, true); + MemHandleUnlock(tmpH); + FldSetTextHandle(fldP, tmpH); +} + +/*********************************************************************** + * + * FUNCTION: GetObjectPtr + * + * DESCRIPTION: This routine returns a pointer to an object in the current + * form. + * + * PARAMETERS: formId - id of the form to display + * + * RETURNED: void * + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +void * GetObjectPtr(UInt16 objectID) { + FormPtr frmP; + + frmP = FrmGetActiveForm(); + return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)); +} + +void FrmList(EventPtr eventP, UInt16 objectID) { + ListType *listP; + UInt16 listItem; + + listP = (ListType *)GetObjectPtr(objectID); + listItem = LstPopupList(listP); + CtlSetLabel(eventP->data.ctlSelect.pControl, LstGetSelectionText(listP, LstGetSelection(listP))); +} + diff --git a/backends/platform/PalmOS/Src/launcher/forms/formUtil.h b/backends/platform/PalmOS/Src/launcher/forms/formUtil.h new file mode 100644 index 0000000000..90cf1ff37a --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formUtil.h @@ -0,0 +1,21 @@ +#ifndef __FORMUTIL_H__ +#define __FORMUTIL_H__ + +#define frmRedrawUpdateMS (frmRedrawUpdateCode + 1) +#define frmRedrawUpdateMSImport (frmRedrawUpdateCode + 2) + +// form list draw +#define ITEM_TYPE_UNKNOWN 'U' +#define ITEM_TYPE_CARD 'C' +#define ITEM_TYPE_SKIN 'S' + +extern Char **itemsText; +extern void *itemsList; +extern Char itemsType; + +void FrmReturnToMain(UInt16 updateCode = frmRedrawUpdateMS); +void * GetObjectPtr(UInt16 objectID); +void FldTrimText(FieldPtr fldP); +void FrmList(EventPtr eventP, UInt16 objectID); + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp b/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp new file mode 100644 index 0000000000..74622d8f14 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp @@ -0,0 +1,146 @@ +#include + +#include "start.h" +#include "formTabs.h" +#include "forms.h" + +#include "base/version.h" +#include "globals.h" +#include "init_palmos.h" + +/*********************************************************************** + * + * FUNCTION: MiscOptionsFormSave + * FUNCTION: MiscOptionsFormInit + * FUNCTION: MiscOptionsFormHandleEvent + * + * DESCRIPTION: Misc. Options form functions + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static TabType *myTabP; +static UInt16 lastTab = 0; + +static UInt32 GetStackSize() { + MemPtr startPP, endPP; + SysGetStackInfo(&startPP, &endPP); + + return ((Char *)endPP - (Char *)startPP) / 1024L; +} + +static void VersionTabDraw() { + WinDrawChars(gScummVMVersion, StrLen(gScummVMVersion), 47, 12 + 30); + WinDrawChars(gScummVMBuildDate, StrLen(gScummVMBuildDate), 47, 24 + 30); +} + +static void SystemTabDraw() { + Coord x; + UInt32 dm, sm, df, sf, stack; + Char num[10]; + + PalmGetMemory(&sm, &dm, &sf, 0); + stack = GetStackSize(); + df = gVars->startupMemory; + + WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground)); + FntSetFont(stdFont); + + StrIToA(num, dm); + x = 147 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 12 + 30); + + StrIToA(num, sm); + x = 147 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 24 + 30); + + StrIToA(num, stack); + x = 147 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 36 + 30); + + StrIToA(num, df); + x = 107 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 12 + 30); + + StrIToA(num, sf); + x = 107 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 24 + 30); + + StrCopy(num,"-"); + x = 107 - FntCharsWidth(num, StrLen(num)) + 5; + WinDrawChars(num, StrLen(num), x, 36 + 30); +} + +static void InfoFormSave() { + TabDeleteTabs(myTabP); + FrmReturnToMain(); +} + +static void AboutTabDraw() { + MemHandle hTemp; + BitmapPtr bmpTemp; + + hTemp = DmGetResource (bitmapRsc, 1200); + if (hTemp) { + bmpTemp = (BitmapType *)MemHandleLock(hTemp); + WinDrawBitmap(bmpTemp,3,44); + MemPtrUnlock(bmpTemp); + DmReleaseResource(hTemp); + } +} + +static void InfoFormInit() { + TabType *tabP; + FormType *frmP = FrmGetActiveForm(); + + tabP = TabNewTabs(3); + TabAddContent(&frmP, tabP, "About", TabInfoAboutForm, AboutTabDraw); + TabAddContent(&frmP, tabP, "Version", TabInfoVersionForm, VersionTabDraw); + TabAddContent(&frmP, tabP, "Memory", TabInfoSystemForm, SystemTabDraw); + + lastTab = 0; + FrmDrawForm(frmP); + TabSetActive(frmP, tabP, lastTab); + + myTabP = tabP; +} + +Boolean InfoFormHandleEvent(EventPtr eventP) { + FormPtr frmP = FrmGetActiveForm(); + Boolean handled = false; + + switch (eventP->eType) { + case frmOpenEvent: + InfoFormInit(); + handled = true; + break; + + case frmCloseEvent: + InfoFormSave(); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case (InfoForm + 1) : + case (InfoForm + 2) : + case (InfoForm + 3) : + lastTab = (eventP->data.ctlSelect.controlID - InfoForm - 1); + TabSetActive(frmP, myTabP, lastTab); + break; + + case InfoOKButton: + InfoFormSave(); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp b/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp new file mode 100644 index 0000000000..1709b4c7a2 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp @@ -0,0 +1,363 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#include "StarterRsc.h" +#include "start.h" +#include "skin.h" +#include "games.h" +#include "scumm_globals.h" +#include "globals.h" + +#include "common/stdafx.h" +#include "base/version.h" + +#include "formEditGame.h" +#include "formUtil.h" + +static UInt16 sknLastOn = skinButtonNone; + +static Err BeamMe() { + UInt16 cardNo; + LocalID dbID; + Err err; + + err = SysCurAppDatabase(&cardNo, &dbID); + if (dbID) + err = SendDatabase(0, dbID, "ScummVM.prc", "\nPlay your favorite LucasArts games"); + else + err = DmGetLastErr(); + + return err; +} + +/*********************************************************************** + * + * FUNCTION: MainFormInit + * + * DESCRIPTION: This routine initializes the MainForm form. + * + * PARAMETERS: frm - pointer to the MainForm form. + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void MainFormInit() +{ + SknApplySkin(); +} + +/*********************************************************************** + * + * FUNCTION: MainFormDoCommand + * + * DESCRIPTION: This routine performs the menu command specified. + * + * PARAMETERS: command - menu item id + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ + +static Boolean MainFormDoCommand(UInt16 command) +{ + Boolean handled = false; + + switch (command) { + case MainGamesMemoryCard: + FrmPopupForm(CardSlotForm); + handled = true; + break; + + case MainGamesNew: + gFormEditMode = edtModeAdd; + FrmPopupForm(GameEditForm); + handled = true; + break; + + case MainGamesEdit: + gFormEditMode = edtModeEdit; + FrmPopupForm(GameEditForm); + handled = true; + break; + + case MainGamesDelete: + EditGameFormDelete(true); + handled = true; + break; + + case MainOptionsBeam: + BeamMe(); + //if (BeamMe()) + //FrmCustomAlert(FrmErrorAlert,"Unable to beam ScummVM for PalmOS.",0,0); + handled = true; + break; + + case MainOptionsAbout: + FrmPopupForm(InfoForm); + handled = true; + break; + + case MainGamesMusicSound: + FrmPopupForm(MusicForm); + handled = true; + break; + + case MainOptionsSkins: + FrmPopupForm(SkinsForm); + handled = true; + break; + + case MainOptionsMisc: + FrmPopupForm(MiscForm); + handled = true; + break; + } + + MenuEraseStatus(0); + return handled; +} + +/*********************************************************************** + * + * FUNCTION: MainFormHandleEvent + * + * DESCRIPTION: This routine is the event handler for the + * "MainForm" of this application. + * + * PARAMETERS: eventP - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ + +static Boolean PenDownRepeat() { + Coord x,y; + Boolean penDown, handled = false; + EvtGetPen(&x, &y, &penDown); + + if (penDown && sknLastOn) { + RectangleType r; + DmOpenRef skinDBP; + + skinDBP = SknOpenSkin(); + SknGetObjectBounds(skinDBP, sknLastOn, &r); + + if (RctPtInRectangle(x*2, y*2, &r)) { + if (SknGetState(skinDBP, sknLastOn) != sknStateSelected) { + SknSetState(skinDBP, sknLastOn, sknStateSelected); + SknShowObject(skinDBP, sknLastOn); + } + + switch (sknLastOn) { + case skinSliderUpArrow: + case skinSliderDownArrow: + handled = SknProcessArrowAction(sknLastOn); + break; + } + + } else { + if (SknGetState(skinDBP, sknLastOn) != sknStateNormal) { + SknSetState(skinDBP, sknLastOn, sknStateNormal); + SknShowObject(skinDBP, sknLastOn); + } + } + + SknCloseSkin(skinDBP); + } + + return handled; +} + + +Boolean MainFormHandleEvent(EventPtr eventP) +{ + Boolean handled = false; + FormPtr frmP; + Coord x,y; + DmOpenRef skinDBP; + + switch (eventP->eType) { + case frmUpdateEvent: + { + RectangleType r; + UInt16 idx; + IndexedColorType bgColor = UIColorGetTableEntryIndex(UIFormFill); + frmP = FrmGetFormPtr(MainForm); + + if (gPrefs->card.volRefNum != vfsInvalidVolRef) + idx = FrmGetObjectIndex (frmP, MainMSBitMap); + else + idx = FrmGetObjectIndex (frmP, MainMSNoneBitMap); + + WinSetDrawMode(winPaint); + WinSetBackColor(bgColor); + FrmGetObjectBounds(frmP, idx, &r); + WinEraseRectangle(&r, 0); + FrmShowObject(frmP, idx); + + if (eventP->data.frmUpdate.updateCode == frmRedrawUpdateMSImport) { + GamImportDatabase(); + SknUpdateList(); + } + handled = true; + break; + } + case menuEvent: + handled = MainFormDoCommand(eventP->data.menu.itemID); + break; + + case frmOpenEvent: + MainFormInit(); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case MainCardsButton: + //gPrefs->card.volRefNum = parseCards(true); + FrmPopupForm(CardSlotForm); + break; + + case MainAboutButton: + FrmPopupForm(InfoForm); + break; + +// case MainListTypeSelTrigger: +// FrmList(eventP, MainListTypeList); +// break; + } + handled = true; + break; + + case penUpEvent: + x = eventP->screenX; + y = eventP->screenY; + lastIndex = dmMaxRecordIndex; // enable select/unselect list item + + if (sknLastOn != skinButtonNone) { + RectangleType r; + skinDBP = SknOpenSkin(); + SknGetObjectBounds(skinDBP, sknLastOn, &r); + SknSetState(skinDBP, sknLastOn, sknStateNormal); + SknShowObject(skinDBP, sknLastOn); + SknCloseSkin(skinDBP); + + if (RctPtInRectangle(x*2, y*2, &r)) { + switch (sknLastOn) { + case skinButtonGameAdd: + gFormEditMode = edtModeAdd; + FrmPopupForm(GameEditForm); + handled = true; + break; + + case skinButtonGameAudio: + FrmPopupForm(MusicForm); + handled = true; + break; + + case skinButtonGameEdit: + case skinButtonGameParams: + gFormEditMode = edtModeParams; + FrmPopupForm(GameEditForm); + handled = true; + break; + + case skinButtonGameStart: + if (gPrefs->card.volRefNum == vfsInvalidVolRef) + FrmCustomAlert(FrmWarnAlert,"Please select/insert a memory card.", 0, 0); + else + bStartScumm = true; + handled = true; + break; + + case skinButtonGameDelete: + EditGameFormDelete(true); + break; + } + } + sknLastOn = skinButtonNone; + } + break; + + case penDownEvent: + case penMoveEvent: + if (sknLastOn == skinButtonNone) { + x = eventP->screenX; + y = eventP->screenY; + skinDBP = SknOpenSkin(); + + switch (sknLastOn = SknCheckClick(skinDBP, x,y)) { + case skinButtonNone: + break; + case skinSliderUpArrow: + case skinSliderDownArrow: + case skinButtonGameAdd: + case skinButtonGameEdit: + case skinButtonGameParams: + case skinButtonGameStart: + case skinButtonGameDelete: + case skinButtonGameAudio: + SknSetState(skinDBP, sknLastOn, sknStateSelected); + SknShowObject(skinDBP, sknLastOn); + if (gPrefs->soundClick) + SndPlaySystemSound(sndClick); + handled = true; + break; + default: + FrmCustomAlert(FrmWarnAlert,"Unknown button !",0,0); + } + SknCloseSkin(skinDBP); + SknSelect(x, y); + } + break; + + case keyDownEvent: + if ( (eventP->data.keyDown.chr >= 'a' && eventP->data.keyDown.chr <= 'z') || + (eventP->data.keyDown.chr >= 'A' && eventP->data.keyDown.chr <= 'Z')) { + if (GamJumpTo(eventP->data.keyDown.chr)) { + SknUpdateList(); + handled = true; + } + } + break; + + default: + handled = PenDownRepeat(); + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp new file mode 100644 index 0000000000..9b4b5355a7 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp @@ -0,0 +1,387 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#include "start.h" +#include "formTabs.h" +#include "forms.h" +#include "games.h" + +#include "globals.h" + +static TabType *myTabP; +static UInt16 lastTab = 0; + +static GameInfoType *gameInfoP = NULL; + +// Music +static Boolean MusicTabSave() { + ControlType *cck1P, *cck2P; + ListType *list1P, *list2P, *list3P; + FieldType *fld1P; + UInt16 tempo; + FormPtr frmP; + + frmP = FrmGetActiveForm(); + + cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox); + cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox); + + list1P = (ListType *)GetObjectPtr(TabMusicDriverList); + list2P = (ListType *)GetObjectPtr(TabMusicRateList); + list3P = (ListType *)GetObjectPtr(TabMusicQualityList); + + fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField); + + tempo = StrAToI(FldGetTextPtr(fld1P)); + if (tempo < 50 || tempo > 200) { + TabSetActive(frmP, myTabP, 0); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMusicTempoField)); + FrmCustomAlert(FrmErrorAlert, "Invalid tempo value (50...200)", 0, 0); + return false; + } + + gameInfoP->musicInfo.sound.music = CtlGetValue(cck1P); + gameInfoP->musicInfo.sound.multiMidi = CtlGetValue(cck2P); + + gameInfoP->musicInfo.sound.drvMusic = LstGetSelection(list1P); + gameInfoP->musicInfo.sound.rate = LstGetSelection(list2P); + gameInfoP->fmQuality = LstGetSelection(list3P); + gameInfoP->musicInfo.sound.tempo = tempo; + + return true; +} + +static void MusicTabInit() { + ControlType *cck1P, *cck2P; + ListType *list1P, *list2P, *list3P; + FieldType *fld1P; + MemHandle tempoH; + Char *tempoP; + + cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox); + cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox); + + list1P = (ListType *)GetObjectPtr(TabMusicDriverList); + list2P = (ListType *)GetObjectPtr(TabMusicRateList); + list3P = (ListType *)GetObjectPtr(TabMusicQualityList); + + fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField); + + CtlSetValue(cck1P, gameInfoP->musicInfo.sound.music); + CtlSetValue(cck2P, gameInfoP->musicInfo.sound.multiMidi); + + if (gameInfoP->musicInfo.sound.drvMusic > 5) + gameInfoP->musicInfo.sound.drvMusic = 0; + + + LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvMusic); + LstSetTopItem(list1P, gameInfoP->musicInfo.sound.drvMusic); + CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + + LstSetSelection(list2P, gameInfoP->musicInfo.sound.rate); + LstSetTopItem(list2P, gameInfoP->musicInfo.sound.rate); + CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); + + LstSetSelection(list3P, gameInfoP->fmQuality); + CtlSetLabel((ControlType *)GetObjectPtr(TabMusicQualityPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P))); + + tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1); + tempoP = (Char *)MemHandleLock(tempoH); + StrIToA(tempoP, gameInfoP->musicInfo.sound.tempo); + MemHandleUnlock(tempoH); + FldSetTextHandle(fld1P, tempoH); +} + +// Audio CD +static Boolean AudioCDTabSave() { + ControlType *cck3P; + FieldType *fld2P, *fld3P; + ListType *list1P, *list2P; + UInt16 firstTrack; + FormPtr frmP; + + frmP = FrmGetActiveForm(); + + cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox); + fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField); + fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField); + list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList); + list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList); + + firstTrack = StrAToI(FldGetTextPtr(fld3P)); + if (firstTrack < 1 || firstTrack > 999) { + TabSetActive(frmP, myTabP, 2); + FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabAudioCDFirstTrackField)); + FrmCustomAlert(FrmErrorAlert, "Invalid track value (1...999)", 0, 0); + return false; + } + + gameInfoP->musicInfo.sound.CD = CtlGetValue(cck3P); + + gameInfoP->musicInfo.sound.drvCD = LstGetSelection(list1P); + gameInfoP->musicInfo.sound.frtCD = LstGetSelection(list2P); + + gameInfoP->musicInfo.sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P)); + gameInfoP->musicInfo.sound.firstTrack = firstTrack; + + return true; +} + +static void AudioCDTabInit() { + ControlType *cck3P; + FieldType *fld2P, *fld3P; + ListType *list1P, *list2P; + MemHandle lengthH, firstTrackH; + Char *lengthP, *firstTrackP; + + cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox); + fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField); + fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField); + list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList); + list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList); + + LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvCD); + CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + + LstSetSelection(list2P, gameInfoP->musicInfo.sound.frtCD); + CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P))); + + CtlSetValue(cck3P, gameInfoP->musicInfo.sound.CD); + + lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1); + lengthP = (Char *)MemHandleLock(lengthH); + StrIToA(lengthP, gameInfoP->musicInfo.sound.defaultTrackLength); + MemHandleUnlock(lengthH); + FldSetTextHandle(fld2P, lengthH); + + firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1); + firstTrackP = (Char *)MemHandleLock(firstTrackH); + StrIToA(firstTrackP, gameInfoP->musicInfo.sound.firstTrack); + MemHandleUnlock(firstTrackH); + FldSetTextHandle(fld3P, firstTrackH); +} + +// Volume +static void VolumeTabSave() { + SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P; + + slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl); + slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl); + slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl); + slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl); + slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl); + + CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &gameInfoP->musicInfo.volume.palm); + CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &gameInfoP->musicInfo.volume.music); + CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &gameInfoP->musicInfo.volume.sfx); + CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gameInfoP->musicInfo.volume.speech); + CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gameInfoP->musicInfo.volume.audiocd); +} + +static void VolumeTabInit() { + SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P; + UInt16 value; + + slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl); + slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl); + slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl); + slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl); + slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl); + + value = gameInfoP->musicInfo.volume.palm; + CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value); + value = gameInfoP->musicInfo.volume.music; + CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value); + value = gameInfoP->musicInfo.volume.sfx; + CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value); + value = gameInfoP->musicInfo.volume.speech; + CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value); + value = gameInfoP->musicInfo.volume.audiocd; + CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value); +} + +static void MusicFormSave(UInt16 index) { + if (index != dmMaxRecordIndex) { + MemHandle recordH; + GameInfoType *ogameInfoP; + + if (!MusicTabSave()) return; + if (!AudioCDTabSave()) return; + VolumeTabSave(); + + recordH = DmGetRecord(gameDB, index); + ogameInfoP = (GameInfoType *)MemHandleLock(recordH); + DmWrite(ogameInfoP, 0, gameInfoP, sizeof(GameInfoType)); + MemHandleUnlock(recordH); + DmReleaseRecord (gameDB, index, 0); + } + + MemPtrFree(gameInfoP); + gameInfoP = NULL; + + TabDeleteTabs(myTabP); + FrmReturnToMain(); +} +static void MusicFormInit(UInt16 index) { + TabType *tabP; + FormType *frmP = FrmGetActiveForm(); + + if (index != dmMaxRecordIndex) { + MemHandle recordH = NULL; + GameInfoType *ogameInfoP; + + recordH = DmQueryRecord(gameDB, index); + ogameInfoP = (GameInfoType *)MemHandleLock(recordH); + + if (!ogameInfoP) { + FrmCustomAlert(FrmErrorAlert, "An error occured.",0,0); + return; + } + + gameInfoP = (GameInfoType *)MemPtrNew(sizeof(GameInfoType)); + MemMove(gameInfoP, ogameInfoP, sizeof(GameInfoType)); + MemHandleUnlock(recordH); + + } else { + FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); + FrmReturnToMain(); + return; + } + + tabP = TabNewTabs(3); + TabAddContent(&frmP, tabP, "Sound", TabMusicForm); + TabAddContent(&frmP, tabP, "Volume", TabVolumeForm); + TabAddContent(&frmP, tabP, "Audio CD", TabAudioCDForm); + + MusicTabInit(); + AudioCDTabInit(); + VolumeTabInit(); + + FrmDrawForm(frmP); + TabSetActive(frmP, tabP, lastTab); + + myTabP = tabP; +} + +Boolean MusicFormHandleEvent(EventPtr eventP) { + FormPtr frmP = FrmGetActiveForm(); + Boolean handled = false; + + switch (eventP->eType) { + case frmOpenEvent: + MusicFormInit(GamGetSelected()); + handled = true; + break; + + case frmCloseEvent: + MusicFormSave(dmMaxRecordIndex); + handled = true; + break; + + case ctlSelectEvent: + switch (eventP->data.ctlSelect.controlID) + { + case (MusicForm + 1) : + case (MusicForm + 2) : + case (MusicForm + 3) : + lastTab = (eventP->data.ctlSelect.controlID - MusicForm - 1); + TabSetActive(frmP, myTabP, lastTab); + break; + + case TabMusicDriverPopTrigger: + FrmList(eventP, TabMusicDriverList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicDriverList)); + + if (!OPTIONS_TST(kOptDeviceZodiac) && !OPTIONS_TST(kOptSonyPa1LibAPI)) { + ListType *list1P = (ListType *)GetObjectPtr(TabMusicDriverList); + + if (LstGetSelection(list1P) == 4) { + FrmCustomAlert(FrmInfoAlert, "There is no built-in MIDI support on your device.", 0, 0); + LstSetSelection(list1P, 0); + CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + } + } + break; + + case TabMusicQualityPopTrigger: + FrmList(eventP, TabMusicQualityList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicQualityList)); + break; + + case TabMusicRatePopTrigger: + FrmList(eventP, TabMusicRateList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicRateList)); + + if (!OPTIONS_TST(kOptPalmSoundAPI)) { + ListType *list1P = (ListType *)GetObjectPtr(TabMusicRateList); + + if (LstGetSelection(list1P) != 0) { + FrmCustomAlert(FrmInfoAlert, "You cannot use this rate on your device.", 0, 0); + LstSetSelection(list1P, 0); + CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + } + } + break; + + case TabAudioCDFormatPopTrigger: + FrmList(eventP, TabAudioCDFormatList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDFormatList)); + + if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) { + ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList); + LstSetSelection(list1P, 0); + CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + } + break; + + case TabAudioCDDriverPopTrigger: + FrmList(eventP, TabAudioCDDriverList); + FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDDriverList)); + + if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) { + ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList); + LstSetSelection(list1P, 0); + CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P))); + } + break; + + case MusicOKButton: + MusicFormSave(GamGetSelected()); + break; + + case MusicCancelButton: + MusicFormSave(dmMaxRecordIndex); + break; + } + handled = true; + break; + + default: + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/forms.h b/backends/platform/PalmOS/Src/launcher/forms/forms.h new file mode 100644 index 0000000000..0bdfd356c7 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/forms.h @@ -0,0 +1,22 @@ +#ifndef __FORMS_H__ +#define __FORMS_H__ + +#include "StarterRsc.h" +#include "formUtil.h" + +#include "formEditGame.h" +#include "formCards.h" + + +#define HANDLER(x) Boolean x##FormHandleEvent(EventPtr eventP); + +HANDLER(Main) +HANDLER(EditGame) +HANDLER(SystemInfo) +HANDLER(Misc) +HANDLER(CardSlot) +HANDLER(Skins) +HANDLER(Music) +HANDLER(Info) + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp b/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp new file mode 100644 index 0000000000..0dd3427c1a --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp @@ -0,0 +1,242 @@ +#include +#include +#include +#include + +#include "globals.h" +#include "formTabs.h" + +TabType *TabNewTabs(UInt16 cnt) { + TabType *newP = new TabType; + + newP->count = 0; + newP->width = 0; + newP->tabs = new TabDataType[cnt]; + + return newP; +} + +void TabMoveUpObject(FormType *frmP, UInt16 objID, Coord amount) { + Coord x, y; + FrmGetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), &x, &y); + FrmSetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), x, y - amount); +} + +void TabDeleteTabs(TabType *tabP) { + UInt16 cnt, num; + num = MemPtrSize(tabP->tabs) / sizeof(TabDataType); + + for (cnt = 0; cnt < num; cnt++) + FrmDeleteForm(tabP->tabs[cnt].srcP); + + delete tabP->tabs; + delete tabP; +} + +Err TabAddContent(FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc) { + FormType *srcP; + UInt16 cnt; + void *objP, **dstP; + UInt16 objNum; + Coord x, y, w, h; + UInt16 id; + RectangleType r; + + dstP = (void **)frmP; + srcP = FrmInitForm(rscID); + + objNum = FrmGetNumberOfObjects(srcP); + + // save tab data + + // it's required to keep to source forms active + // while the tab form is not close for list data ptr (items text) + // TODO : fix this ! + tabP->tabs[tabP->count].srcP = srcP; + tabP->tabs[tabP->count].first = FrmGetObjectId(srcP, 0); + tabP->tabs[tabP->count].last = FrmGetObjectId(srcP, objNum - 1); + tabP->tabs[tabP->count].drawFunc= drawFunc; + tabP->count++; + tabP->active = tabP->count; + + // create tab + FntSetFont(stdFont); + x = 4 + tabP->width; + y = 16; + w = FntCharsWidth(nameP, StrLen(nameP)) + 6; + h = 12; + ControlType *addP = CtlNewControl(dstP, (FrmGetFormId(*frmP) + tabP->count), buttonCtl, nameP, x, y, w, h, stdFont, 0, true); + CtlGlueSetFrameStyle(addP, noButtonFrame); + tabP->width += w + 3; + + // create tab content + for (cnt = 0; cnt < objNum; cnt++) { + objP = FrmGetObjectPtr(srcP, cnt); + id = FrmGetObjectId(srcP, cnt); + FrmGetObjectBounds(srcP, cnt, &r); + x = r.topLeft.x - 2; + y = r.topLeft.y + 30; + w = r.extent.x; + h = r.extent.y; + + FrmSetObjectPosition(srcP, cnt, x, y); + + switch (FrmGetObjectType(srcP, cnt)) { + case frmListObj: { + // HOWTO : to auto link the list to a popup trigger the listID must be popupID + 1 if popup id + // desn't exist the triggerID will be 0 and the list will be shown, but take care to not define + // ListID - 1 object if you want to show the list. + ListType *newP; + Char **itemsP = LstGlueGetItemsText((ListType *)objP); + FontID font = LstGlueGetFont((ListType *)objP); + UInt16 visible = LstGetVisibleItems((ListType *)objP); + UInt16 items = LstGetNumberOfItems((ListType *)objP); + UInt16 trigger = id - 1; + trigger = (FrmGetObjectIndex((FormType *)*dstP, trigger) != frmInvalidObjectId) ? trigger : 0; + + LstNewList(dstP, id, x, y, w, h, font, visible, trigger); + newP = (ListType *)FrmGetObjectPtr((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); + LstSetListChoices(newP, itemsP, items); + FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); + break; + } + case frmFieldObj: { + FieldAttrType attr; + FontID font = FldGetFont((FieldType *)objP); + UInt16 maxChars = FldGetMaxChars((FieldType *)objP); + FldGetAttributes((FieldType *)objP, &attr); + FldNewField(dstP, id, x, y, w, h, font, maxChars, attr.editable, attr.underlined, attr.singleLine, attr.dynamicSize, (JustificationType)attr.justification, attr.autoShift, attr.hasScrollBar, attr.numeric); + FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); + break; + } + case frmControlObj: { + const Char *textP = CtlGetLabel((ControlType *)objP); + ControlStyleType style = CtlGlueGetControlStyle((ControlType *)objP); + FontID font = CtlGlueGetFont((ControlType *)objP); + ControlType *newP = CtlNewControl(dstP, id, style, textP, x, y, w, h, font, 0, true); + FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); + switch (style) { + case sliderCtl: + { + UInt16 min, max, page, val; + CtlGetSliderValues((ControlType *)objP, &min, &max, &page, &val); + CtlSetSliderValues(newP, &min, &max, &page, &val); + break; + } + } + break; + } + case frmLabelObj: { + const Char *textP = FrmGetLabel(srcP, id); + FontID font = FrmGlueGetLabelFont(srcP, id); + FrmNewLabel((FormType **)dstP, id, textP, x, y, font); + FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); + break; + } + + case frmBitmapObj: { +/* UInt16 family = id + 1; + FrmNewBitmap((FormType **)dstP, id, id, x, y); + //FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +*/ break; + } + } + } + + frmP = (FormType **)dstP; // save new form ptr + return errNone; +} + +void TabSetActive(FormType *frmP, TabType *tabP, UInt16 num) { + UInt16 cnt, idx; + RectangleType r; + TabDataPtr dataP; + + if (tabP->active == num) + return; + + dataP = &tabP->tabs[tabP->active]; + + // hide active tab objects + if (tabP->active != tabP->count) { + for (cnt = dataP->first; cnt <= dataP->last; cnt++) { + if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) + FrmHideObject(frmP, idx); + } + } + + // save active tab + tabP->active = num; + dataP = &tabP->tabs[num]; + + // draw tab limit + WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill)); + WinDrawLine(1, 14, 154,14); + WinDrawLine(1, 15, 154,15); + RctSetRectangle(&r, 1, 30, 154, 100); + WinDrawRectangle(&r, 0); + WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); + WinDrawLine(1, 28, 154,28); + + // set tabs size + for (cnt = 0; cnt < tabP->count; cnt++) { + idx = FrmGetObjectIndex (frmP, (FrmGetFormId(frmP) + cnt + 1)); + + if (idx != frmInvalidObjectId) { + FrmGetObjectBounds(frmP, idx, &r); + r.topLeft.y = (num == cnt) ? 17 : 17; + r.extent.y = (num == cnt) ? 12 : 11; + FrmSetObjectBounds(frmP, idx, &r); + + if (num == cnt) { + RGBColorType yellow = {0,255,192,0}; + + UInt8 line = /*(UIColorGetTableEntryIndex(UIFormFill) == UIColorGetTableEntryIndex(UIFieldTextHighlightBackground)) ? + WinRGBToIndex(&yellow) :*/ + UIColorGetTableEntryIndex(UIFieldTextHighlightBackground); + + r.topLeft.y -= 1; + WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); + WinDrawRectangleFrame(simpleFrame, &r); + WinSetForeColor(line); + WinDrawLine(r.topLeft.x, r.topLeft.y, r.topLeft.x + r.extent.x - 1, r.topLeft.y); + FrmShowObject(frmP, idx); + + } else { + UInt8 frame = UIColorGetTableEntryIndex(UIObjectFrame); + RGBColorType light; + WinIndexToRGB(frame, &light); + light.r = (255 - light.r) > 72 ? light.r + 72 : 255; + light.g = (255 - light.g) > 72 ? light.g + 72 : 255; + light.b = (255 - light.b) > 72 ? light.b + 72 : 255; + + WinSetForeColor(WinRGBToIndex(&light)); + WinDrawRectangleFrame(simpleFrame, &r); + WinSetForeColor(frame); + WinDrawLine(r.topLeft.x - 1, r.topLeft.y + r.extent.y, r.topLeft.x + r.extent.x, r.topLeft.y + r.extent.y); + } + + // round corner + WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill)); + if (OPTIONS_TST(kOptModeHiDensity)) { + WinSetCoordinateSystem(kCoordinatesNative); + WinDrawPixel((r.topLeft.x - 1) * 2, (r.topLeft.y - 1) * 2); + WinDrawPixel((r.topLeft.x + r.extent.x) * 2 + 1, (r.topLeft.y - 1) * 2); + WinSetCoordinateSystem(kCoordinatesStandard); + + } else { + // TODO + } + } + } + + // show objects + for (cnt = dataP->first; cnt <= dataP->last; cnt++) { + if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) + FrmShowObject(frmP, idx); + } + + // post draw function + if (dataP->drawFunc) + (dataP->drawFunc)(); +} diff --git a/backends/platform/PalmOS/Src/launcher/forms/formtabs.h b/backends/platform/PalmOS/Src/launcher/forms/formtabs.h new file mode 100644 index 0000000000..5371485bf1 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/forms/formtabs.h @@ -0,0 +1,24 @@ +#ifndef __FORMTABS_H__ +#define __FORMTABS_H__ + +typedef void (TabProc)(); + +typedef struct { + FormPtr srcP; + UInt16 first; + UInt16 last; + TabProc *drawFunc; +} TabDataType, *TabDataPtr; + +typedef struct { + UInt16 count, active; + Coord width; + TabDataPtr tabs; +} TabType, *TabPtr; + +TabType *TabNewTabs (UInt16 cnt); +void TabDeleteTabs (TabType *tabP); +Err TabAddContent (FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc = 0); +void TabSetActive (FormType *frmP, TabType *tabP, UInt16 num); +void TabMoveUpObject (FormType *frmP, UInt16 objID, Coord amount); +#endif diff --git a/backends/platform/PalmOS/Src/launcher/games.cpp b/backends/platform/PalmOS/Src/launcher/games.cpp new file mode 100644 index 0000000000..166aae6aa4 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/games.cpp @@ -0,0 +1,530 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include + +#include "globals.h" +#include "palmdefs.h" +#include "start.h" +#include "games.h" +#include "skin.h" + +#include "extend.h" +#include "StarterRsc.h" + +DmOpenRef gameDB = NULL; + +static Err GamUpdateList() { + if (gameDB) { + UInt16 numRecs = DmNumRecords(gameDB); + + if (numRecs > 0) { + MemHandle tmpH; + UInt32 version, size; + UInt32 *versionP; + + // get record size and version + tmpH = DmQueryRecord(gameDB, 0); + size = MemHandleSize(tmpH); + versionP = (UInt32 *)MemHandleLock(tmpH); + version = *versionP; + MemHandleUnlock(tmpH); + + // check record + if (version != curItemVersion || size != sizeof(GameInfoType)) { + UInt16 index; + GameInfoType gitCur; + void *tmpP; + FormPtr ofmP, frmP; + + // show dialog + ofmP = FrmGetActiveForm(); + frmP = FrmInitForm(ConvertForm); + FrmSetActiveForm(frmP); + FrmDrawForm(frmP); + SysTaskDelay(1 * SysTicksPerSecond()); + + MemSet(&gitCur, sizeof(GameInfoType), 0); + + if (version == itemVersion_354 || + version == itemVersion_353 || + version == itemVersion_352 || + version == itemVersion_351 || + version == itemVersion_350 || + version == itemVersion_340 || + version == itemVersion_330 || + version == itemVersion_320 || + version == itemVersion_310 || + version == itemVersion_300 || + version == itemVersion_270 || + version == itemVersion_260 || + version == itemVersion_250) { + for (index = 0; index < numRecs; index++) { + // get old data + tmpH = DmQueryRecord(gameDB, index); + tmpP = MemHandleLock(tmpH); + MemMove(&gitCur, tmpP, MemHandleSize(tmpH)); + MemHandleUnlock(tmpH); + + // new format + gitCur.version = curItemVersion; + + if (version < itemVersion_300) { + gitCur.musicInfo.volume.palm = 50; + gitCur.musicInfo.volume.music = 192; + gitCur.musicInfo.volume.sfx = 192; + gitCur.musicInfo.volume.speech = 192; + gitCur.musicInfo.volume.audiocd = 50; + + gitCur.musicInfo.sound.tempo = 100; + gitCur.musicInfo.sound.defaultTrackLength = 10; + gitCur.musicInfo.sound.firstTrack = 1; + } + + if (version < itemVersion_310) + gitCur.engine = 0; + + if (version < itemVersion_320) + gitCur.renderMode = 0; + + if (version <= itemVersion_330) { + gitCur.fmQuality = 0; + gitCur.gfxMode = (gitCur.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes + + if (gitCur.engine == 0) gitCur.engine = 8; + else if (gitCur.engine == 1) gitCur.engine = 7; + else if (gitCur.engine == 2) gitCur.engine = 3; + else if (gitCur.engine == 3) gitCur.engine = 1; + else if (gitCur.engine == 4) gitCur.engine = 0; + else if (gitCur.engine == 5) gitCur.engine = 6; + else if (gitCur.engine == 6) gitCur.engine = 4; + else if (gitCur.engine == 7) gitCur.engine = 5; + else if (gitCur.engine == 8) gitCur.engine = 2; + + if (gitCur.renderMode == 1) gitCur.renderMode = 4; + else if (gitCur.renderMode == 2) gitCur.renderMode = 5; + else if (gitCur.renderMode == 3) gitCur.renderMode = 2; + else if (gitCur.renderMode == 4) gitCur.renderMode = 3; + else if (gitCur.renderMode == 5) gitCur.renderMode = 1; + + if (gitCur.platform == 2) gitCur.platform = 6; + else if (gitCur.platform == 5) gitCur.platform = 8; + else if (gitCur.platform == 6) gitCur.platform = 2; + + if (gitCur.language == 1) gitCur.language = 4; + else if (gitCur.language == 2) gitCur.language = 6; + else if (gitCur.language == 3) gitCur.language = 5; + else if (gitCur.language == 4) gitCur.language = 8; + else if (gitCur.language == 5) gitCur.language = 11; + else if (gitCur.language == 6) gitCur.language = 13; + else if (gitCur.language == 7) gitCur.language = 9; + else if (gitCur.language == 8) gitCur.language = 1; + else if (gitCur.language == 9) gitCur.language = 10; + else if (gitCur.language == 10) gitCur.language = 7; + else if (gitCur.language == 11) gitCur.language = 12; + else if (gitCur.language == 12) gitCur.language = 2; + else if (gitCur.language == 13) gitCur.language = 3; + + if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4; + else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5; + else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2; + else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1; + } + + if (version <= itemVersion_340) { + gitCur.platform++; + + if (gitCur.language == 3) + gitCur.language = 0; + else if (gitCur.language >= 11) + gitCur.language++; + } + + if (version <= itemVersion_350) + if (gitCur.platform >= 9) + gitCur.platform++; + + if (version <= itemVersion_351) { + if (gitCur.engine >= ENGINE_LURE) // newly added engine + gitCur.engine++; + + if (gitCur.engine == ENGINE_SCUMM) // reorder + gitCur.engine = ENGINE_SIMON; + else if (gitCur.engine == ENGINE_SIMON) + gitCur.engine = ENGINE_SCUMM; + } + + if (version <= itemVersion_352) { + if (gitCur.engine >= ENGINE_CINE) // newly added engine + gitCur.engine++; + + gitCur.platform++; + } + + if (version <= itemVersion_353) + gitCur.musicInfo.sound.drvMusic++; + + if (version <= itemVersion_354) + if (gitCur.engine >= ENGINE_AGI) // newly added engine + gitCur.engine++; + + if (gitCur.musicInfo.volume.palm > 100) + gitCur.musicInfo.volume.palm = 50; + + // simply resize the old record + tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL + tmpP = MemHandleLock(tmpH); + DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); + MemPtrUnlock(tmpP); + } + + } else if (version == itemVersion_200) { + // need conversion from V2 -> V3.5.2 + GameInfoTypeV2 git0; + + for (index = 0; index < numRecs; index++) { + + // get old data + tmpH = DmQueryRecord(gameDB, index); + tmpP = MemHandleLock(tmpH); + MemMove(&git0, tmpP, sizeof(GameInfoTypeV2)); + MemHandleUnlock(tmpH); + + // convert to new format + gitCur.version = curItemVersion; + gitCur.icnID = 0xFFFF; + gitCur.selected = git0.selected; + StrCopy(gitCur.nameP, git0.nameP); + StrCopy(gitCur.pathP, git0.pathP); + StrCopy(gitCur.gameP, git0.gameP); + gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes + + gitCur.autoLoad = git0.autoLoad; + gitCur.bootParam = git0.bootParam; + gitCur.setPlatform = git0.setPlatform; + gitCur.subtitles = git0.subtitles; + gitCur.talkSpeed = git0.talkSpeed; + + gitCur.loadSlot = git0.loadSlot; + gitCur.bootValue = git0.bootValue; + gitCur.talkValue = git0.talkValue; + gitCur.platform = git0.platform; + gitCur.language = git0.language; + + gitCur.musicInfo.volume.palm = 50; + gitCur.musicInfo.volume.music = 192; + gitCur.musicInfo.volume.sfx = 192; + gitCur.musicInfo.volume.speech = 192; + gitCur.musicInfo.volume.audiocd = 50; + + gitCur.musicInfo.sound.tempo = 100; + gitCur.musicInfo.sound.defaultTrackLength = 10; + gitCur.musicInfo.sound.firstTrack = 1; + + // to V3.4 + if (gitCur.platform == 2) gitCur.platform = 6; + else if (gitCur.platform == 5) gitCur.platform = 8; + else if (gitCur.platform == 6) gitCur.platform = 2; + + if (gitCur.language == 1) gitCur.language = 4; + else if (gitCur.language == 2) gitCur.language = 6; + else if (gitCur.language == 3) gitCur.language = 5; + else if (gitCur.language == 4) gitCur.language = 8; + else if (gitCur.language == 5) gitCur.language = 11; + else if (gitCur.language == 6) gitCur.language = 13; + else if (gitCur.language == 7) gitCur.language = 9; + else if (gitCur.language == 8) gitCur.language = 1; + else if (gitCur.language == 9) gitCur.language = 10; + else if (gitCur.language == 10) gitCur.language = 7; + else if (gitCur.language == 11) gitCur.language = 12; + else if (gitCur.language == 12) gitCur.language = 2; + else if (gitCur.language == 13) gitCur.language = 3; + + if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4; + else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5; + else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2; + else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1; + + // to V3.5 + gitCur.platform++; + + if (gitCur.language == 3) + gitCur.language = 0; + else if (gitCur.language >= 11) + gitCur.language++; + + // to V3.5.1 + if (gitCur.platform >= 9) + gitCur.platform++; + + //to V3.5.3 + gitCur.musicInfo.sound.drvMusic++; + + // ----- + gitCur.engine = ENGINE_SCUMM; + + tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL + tmpP = MemHandleLock(tmpH); + DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); + MemPtrUnlock(tmpP); + } + } else { + // need conversion from V0 -> V3.5.2 + GameInfoTypeV0 git0; + + for (index = 0; index < numRecs; index++) { + + // get old data + tmpH = DmQueryRecord(gameDB, index); + tmpP = MemHandleLock(tmpH); + MemMove(&git0, tmpP, sizeof(GameInfoTypeV0)); + MemHandleUnlock(tmpH); + + // convert to new format + gitCur.version = curItemVersion; + gitCur.icnID = 0xFFFF; + gitCur.selected = git0.selected; + StrCopy(gitCur.nameP, git0.nameP); + StrCopy(gitCur.pathP, git0.pathP); + StrCopy(gitCur.gameP, git0.gameP); + gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes + + gitCur.autoLoad = git0.autoLoad; + gitCur.bootParam = git0.bootParam; + gitCur.setPlatform = git0.amiga; // amiga become platform amiga/atari-st/machintosh + gitCur.platform = 1; + gitCur.subtitles = git0.subtitles; + gitCur.talkSpeed = git0.talkSpeed; + + gitCur.loadSlot = git0.loadSlot; + gitCur.bootValue = git0.bootValue; + gitCur.talkValue = git0.talkValue; + gitCur.platform = 2; // default to amiga + gitCur.language = git0.language; + + gitCur.musicInfo.volume.palm = 50; + gitCur.musicInfo.volume.music = 192; + gitCur.musicInfo.volume.sfx = 192; + gitCur.musicInfo.volume.speech = 192; + gitCur.musicInfo.volume.audiocd = 50; + + gitCur.musicInfo.sound.tempo = 100; + gitCur.musicInfo.sound.defaultTrackLength = 10; + gitCur.musicInfo.sound.firstTrack = 1; + + gitCur.engine = ENGINE_SCUMM; + + tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL + tmpP = MemHandleLock(tmpH); + DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType)); + MemPtrUnlock(tmpP); + } + } + + FrmEraseForm(frmP); + FrmDeleteForm(frmP); + if (ofmP) + FrmSetActiveForm(ofmP); + } + } + } + + return errNone; +} + +Err GamOpenDatabase() { + Err err = errNone; + + gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite); + + if (!gameDB) { + err = DmCreateDatabase(0, "ScummVM-Data", appFileCreator, 'DATA', false); + if (!err) { + gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite); + + if (!gameDB) + err = DmGetLastErr(); + } + } + + if (err) + FrmCustomAlert(FrmErrorAlert,"Cannot open/create games list DB !",0,0); + else + err = GamUpdateList(); + + return err; +} + +void GamImportDatabase() { + if (gPrefs->card.volRefNum != vfsInvalidVolRef && gPrefs->card.moveDB) { + FileRef file; + Err e; + + e = VFSFileOpen(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", vfsModeRead, &file); + if (!e) { + UInt16 oCardNo, nCardNo; + LocalID oDbID, nDbID; + + VFSFileClose(file); + if (gPrefs->card.confirmMoveDB) + if (FrmCustomAlert(FrmConfirmAlert, "Do you want to import games database from memory card ?", 0, 0) == FrmConfirmNo) { + // prevent to replace the file on memory card + gPrefs->card.moveDB = false; + return; + } + + // get current db info and rename it + DmOpenDatabaseInfo(gameDB, &oDbID, 0, 0, &oCardNo, 0); + GamCloseDatabase(true); + e = DmDeleteDatabase(oCardNo, oDbID); + + if (!e) + if (e = VFSImportDatabaseFromFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", &nCardNo, &nDbID)) + FrmCustomAlert(FrmErrorAlert, "Failed to import games database from memory card.", 0, 0); + + GamOpenDatabase(); + } + } +} + +void GamCloseDatabase(Boolean ignoreCardParams) { + if (gameDB) { + LocalID dbID; + UInt16 cardNo; + + DmOpenDatabaseInfo(gameDB, &dbID, 0, 0, &cardNo, 0); + DmCloseDatabase(gameDB); + + if (!ignoreCardParams) { + if (gPrefs->card.moveDB && gPrefs->card.volRefNum != vfsInvalidVolRef) { + VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", "listdata-old.pdb"); + Err e = VFSExportDatabaseToFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", cardNo, dbID); + if (!e) { + VFSFileDelete(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb"); + if (gPrefs->card.deleteDB) + DmDeleteDatabase(cardNo, dbID); + } else { + VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb", "listdata.pdb"); + } + } + } + } + gameDB = NULL; +} + +static Int16 GamCompare(GameInfoType *a, GameInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) { + return StrCaselessCompare(a->nameP, b->nameP); +} + +Err GamSortList() { + return DmQuickSort (gameDB, (DmComparF *)GamCompare, 0); +} + +void GamUnselect() { + GameInfoType *game; + + MemHandle recordH; + UInt16 index; + + index = GamGetSelected(); + + if (index != dmMaxRecordIndex) { + Boolean newValue; + + recordH = DmGetRecord(gameDB, index); + game = (GameInfoType *)MemHandleLock(recordH); + + newValue = false; + DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); + + MemHandleUnlock(recordH); + DmReleaseRecord (gameDB, index, 0); + } +} + +UInt16 GamGetSelected() { + MemHandle record; + GameInfoType *game; + Boolean selected; + UInt16 index = DmNumRecords(gameDB)-1; + + while (index != (UInt16)-1) { + record = DmQueryRecord(gameDB, index); + game = (GameInfoType *)MemHandleLock(record); + selected = game->selected; + MemHandleUnlock(record); + + if (selected) + return index; + + index--; + } + + return dmMaxRecordIndex; +} + +Boolean GamJumpTo(Char letter) { + MemHandle record; + GameInfoType *game; + Boolean found = false; + UInt16 index = 0; + UInt16 maxIndex = DmNumRecords(gameDB); + UInt16 active = GamGetSelected(); + + while (index < maxIndex) { + record = DmGetRecord(gameDB, index); + game = (GameInfoType *)MemHandleLock(record); + + if (tolower(game->nameP[0]) == tolower(letter)) { + found = true; + + if (index != active) { + RectangleType rArea; + UInt16 maxView; + Boolean newValue = true; + + SknGetListBounds(&rArea, NULL); + maxView = rArea.extent.y / sknInfoListItemSize; + + GamUnselect(); + DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); + + if (index < gPrefs->listPosition || index >= (gPrefs->listPosition + maxView)) + gPrefs->listPosition = index; + } + } + + MemHandleUnlock(record); + DmReleaseRecord (gameDB, index, 0); + + index++; + + if (found) + return found; + } + + return found; +} diff --git a/backends/platform/PalmOS/Src/launcher/games.h b/backends/platform/PalmOS/Src/launcher/games.h new file mode 100644 index 0000000000..bb005e66fb --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/games.h @@ -0,0 +1,201 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GAMES_H__ +#define __GAMES_H__ + +#define curItemVersion sysMakeROMVersion(3,5,5,0,0) // Added : AGI engine + + +#define itemVersion_354 sysMakeROMVersion(3,5,4,0,0) // Added : Default/Auto music driver +#define itemVersion_353 sysMakeROMVersion(3,5,3,0,0) // Added : CinE engine and 3DO platform +#define itemVersion_352 sysMakeROMVersion(3,5,2,0,0) // Added : Lure engine +#define itemVersion_351 sysMakeROMVersion(3,5,1,0,0) // Added : Sega CD platform +#define itemVersion_350 sysMakeROMVersion(3,5,0,0,0) +#define itemVersion_340 sysMakeROMVersion(3,4,0,0,0) +#define itemVersion_330 sysMakeROMVersion(3,3,0,0,0) +#define itemVersion_320 sysMakeROMVersion(3,2,0,0,0) +#define itemVersion_310 sysMakeROMVersion(3,1,0,0,0) +#define itemVersion_300 sysMakeROMVersion(3,0,0,0,0) +#define itemVersion_270 sysMakeROMVersion(2,7,0,0,0) +#define itemVersion_260 sysMakeROMVersion(2,6,0,0,0) +#define itemVersion_250 sysMakeROMVersion(2,5,0,0,0) +#define itemVersion_200 sysMakeROMVersion(2,0,0,0,0) + +// old config structs +typedef struct { + UInt32 version; + UInt16 icnID; // icon to display on the list + Boolean selected; + + Char nameP[50]; // game name to display in list + Char pathP[150]; // path to the game files + Char gameP[10]; // scumm name of the game + UInt16 gfxMode; + + Boolean autoLoad; + UInt16 loadSlot; + Boolean bootParam; + UInt16 bootValue; + Boolean amiga; + Boolean subtitles; + Boolean talkSpeed; + UInt16 talkValue; + UInt8 language; + +} GameInfoTypeV0; + +typedef struct { + UInt32 version; + UInt16 icnID; // icon to display on the list + Boolean selected; + + Char nameP[50]; // game name to display in list + Char pathP[150]; // path to the game files + Char gameP[10]; // scumm name of the game + UInt16 gfxMode; + + Boolean autoLoad; + Boolean bootParam; + Boolean setPlatform; + Boolean subtitles; + Boolean talkSpeed; + + UInt16 loadSlot; + UInt16 bootValue; + UInt16 talkValue; + UInt8 platform; + UInt8 language; + +} GameInfoTypeV2; + + +// Current config +typedef struct { + struct { + UInt16 palm; + UInt16 music; + UInt16 sfx; // TODO : remove + UInt16 speech; + UInt16 audiocd; + } volume; + + struct { + // midi + Boolean multiMidi; + Boolean music; // TODO : rename this, it is enable audio option + UInt8 drvMusic; + UInt8 tempo; + // sound FX + Boolean sfx; // TODO : remove this + UInt8 rate; + // CD audio + Boolean CD; + UInt8 drvCD, frtCD; + UInt16 defaultTrackLength; + UInt16 firstTrack; + } sound; +} MusicInfoType; + +typedef struct { + UInt32 version; + UInt16 icnID; // icon to display on the list + Boolean selected; + + Char nameP[50]; // game name to display in list + Char pathP[150]; // path to the game files + Char gameP[15]; // scumm name of the game + UInt16 gfxMode; + + Boolean autoLoad; + Boolean bootParam; + Boolean setPlatform; + Boolean subtitles; + Boolean talkSpeed; + + UInt16 loadSlot; + UInt16 bootValue; + UInt16 talkValue; + UInt8 platform; + UInt8 language; // |- v2.5 + + Boolean filter; // v2.6 + Boolean fullscreen; // | + Boolean aspectRatio; // |- v2.7 + + MusicInfoType musicInfo;// v3.0 + + UInt8 engine; // |- v3.1 + UInt8 renderMode; // |- v3.2 +// Boolean use16Bit; // |- v3.3 // removed + UInt8 fmQuality; // |- v3.4 // replace use16Bit +} GameInfoType; + +enum { + ENGINE_SKY = 0, + ENGINE_SWORD1, + ENGINE_SWORD2, + ENGINE_CINE, + ENGINE_QUEEN, + ENGINE_LURE, + ENGINE_GOB, + ENGINE_KYRA, + ENGINE_SAGA, + ENGINE_SCUMM, + ENGINE_AGI, + ENGINE_SIMON, + ENGINE_COUNT +}; + +static const struct { + const char *fileP; + const char *nameP; +} engines[] = { + { "sky", "Beneath a Steel Sky" }, + { "sword1", "Broken Sword 1" }, + { "sword2", "Broken Sword 2" }, + { "cine", "Delphine Cinematique v1.0" }, + { "queen", "Flight of the Amazon Queen" }, + { "lure", "Lure of the Tempress" }, + { "gob", "Gobliiins" }, + { "kyra", "Kyrandia" }, + { "saga", "SAGA Engine" }, + { "scumm", "Scumm Games" }, + { "agi", "Sierra AGI" }, + { "simon", "Simon the Sorcerer" }, +}; + + +// protos +Err GamOpenDatabase (); +void GamImportDatabase (); +void GamCloseDatabase (Boolean ignoreCardParams); +Err GamSortList (); +UInt16 GamGetSelected (); +void GamUnselect (); +Boolean GamJumpTo (Char letter); + +extern DmOpenRef gameDB; + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/launch.cpp b/backends/platform/PalmOS/Src/launcher/launch.cpp new file mode 100644 index 0000000000..c57738bb5f --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/launch.cpp @@ -0,0 +1,517 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include "StarterRsc.h" + +#include "games.h" +#include "start.h" +#include "rumble.h" +#include "extend.h" +#include "globals.h" +#include "features.h" +#include "formUtil.h" +#include "formCards.h" +#include "palmdefs.h" + +#include "init_palmos.h" +#include "init_stuffs.h" + +#include "modules.h" +#include "args.h" + + +#define BUILD_ERROR(m) \ + { StrCopy(msg, m); \ + StrCat(msg, "\n\nPlease check that all required files are installed on your card, and you have enough free storage memory."); \ + goto onError; } + +#define BUILD_FILE(h,m) \ + StrCopy(filename, "/Palm/Programs/ScummVM/Mods/"); \ + StrCat(filename, h); \ + StrCat(filename, m); + +#define CHECK_FILE(m) \ + e = VFSFileOpen(volRefNum, filename, vfsModeRead, &file); \ + if (e) \ + BUILD_ERROR(m) \ + else \ + VFSFileClose(file); + +#define IMPRT_FILE(m) \ + e = VFSImportDatabaseFromFile(volRefNum, filename, &cardNo, &dbID); \ + if (e) \ + BUILD_ERROR(m) + +#define DELET_FILE(f) \ + del_dbID = DmFindDatabase(0, f); \ + if (del_dbID) \ + DmDeleteDatabase(0, del_dbID); + +void ModDelete() { + LocalID del_dbID; + + DELET_FILE("Glbs::Common"); + DELET_FILE("Glbs::Engine"); + DELET_FILE("ScummVM-Engine"); +} + +static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) { + DmOpenRef dbRef = DmOpenDatabase(cardNo, dbID, dmModeReadWrite); + + if (dbRef) { + MemHandle pref = DmGetResource('pref',0); + UInt32 size = 0; + + if (pref) { + SysAppPrefsType *data = (SysAppPrefsType *)MemHandleLock(pref); + size = data->stackSize; + + if (newSize) { + SysAppPrefsType newData; + MemMove(&newData, data, sizeof(SysAppPrefsType)); + newData.stackSize = newSize; + DmWrite(data, 0, &newData, sizeof(SysAppPrefsType)); + } + + MemPtrUnlock(data); + DmReleaseResource(pref); + } + + DmCloseDatabase(dbRef); + } +} + +static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) { +#ifndef _DEBUG_ENGINE + char filename[256]; + UInt16 cardNo; + LocalID dbID; + UInt32 result; + FileRef file; +#endif + char msg[256]; + FormPtr ofmP, frmP; + Err e = errNone; + + ofmP = FrmGetActiveForm(); + frmP = FrmInitForm(ImportForm); + FrmSetActiveForm(frmP); + FrmDrawForm(frmP); + + // In debug mode, the engine files are directly uploaded to the simulator +#ifndef _DEBUG_ENGINE + // engine file ? + BUILD_FILE(engines[engine].fileP, ".engine"); + CHECK_FILE("ScummVM engine file was not found !"); + IMPRT_FILE("Cannot import engine file !"); + + // need more files ? + dbID = DmFindDatabase(0, "ScummVM-Engine"); // be sure to have the correct dbID + e = SysAppLaunch(cardNo, dbID, 0, sysAppLaunchCustomEngineGetInfo, 0, &result); + *armP = ((result & GET_MODEARM) == GET_MODEARM); + + // common file ? + if (!e && (result & GET_DATACOMMON)) { + BUILD_FILE("common", ".data"); + CHECK_FILE("Common data file was not found !"); + IMPRT_FILE("Cannot import common data file !"); + } + // data file ? + if (!e && (result & GET_DATAENGINE)) { + BUILD_FILE(engines[engine].fileP, ".data"); + CHECK_FILE("Engine data file was not found !"); + IMPRT_FILE("Cannot import engine data file !"); + } +#endif + // if error, cleanup + if (e) ModDelete(); + +onError: + FrmEraseForm(frmP); + FrmDeleteForm(frmP); + if (e) { + if (ofmP) FrmSetActiveForm(ofmP); + FrmCustomAlert(FrmErrorAlert, msg, 0, 0); + } + + return e; +} + +#undef DELET_FILE +#undef CHECK_FILE +#undef BUILD_FILE + +Boolean StartScummVM() { + Char **argvP; + UInt8 lightspeed, argc = 0; + UInt32 stackSize; + Boolean toLauncher, direct, isARM; + UInt8 engine; + Char num[6]; + + UInt16 index = GamGetSelected(); + + argvP = ArgsInit(); + direct = false; + + // start command line (exec name) + ArgsAdd(&argvP[argc], "-", NULL, &argc); + + // no game selected + if (index == dmMaxRecordIndex) { + ListPtr listP; + UInt16 whichButton; + + // init form + FormPtr frmP = FrmInitForm(EngineForm); + listP = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EngineListList)); + itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *)); + + for (int i = 0; i < ENGINE_COUNT; i++) + itemsText[i] = (Char *)engines[i].nameP; + + LstSetListChoices (listP, itemsText, ENGINE_COUNT); + LstSetSelection(listP, 0); + + whichButton = FrmDoDialog(frmP); + engine = LstGetSelection(listP); + + FrmDeleteForm(frmP); + MemPtrFree(itemsText); + itemsText = NULL; + + if (whichButton == EngineCancelButton) { + if (bDirectMode) { + // and force exit if nothing selected + EventType event; + event.eType = keyDownEvent; + event.data.keyDown.chr = vchrLaunch; + event.data.keyDown.modifiers = commandKeyMask; + EvtAddUniqueEventToQueue(&event, 0, true); + } + // free args + ArgsFree(argvP); + return false; + } + + // default values + if (bDirectMode) + gPrefs->card.volRefNum = parseCards(); // always use the first removable card available (?) + gVars->filter = true; + gVars->palmVolume = 50; + gVars->fmQuality = FM_QUALITY_INI; + direct = true; + + // somthing selected + } else { + Char pathP[256]; + MemHandle recordH; + GameInfoType *gameInfoP; + + recordH = DmQueryRecord(gameDB,index); + gameInfoP = (GameInfoType *)MemHandleLock(recordH); + engine = gameInfoP->engine; + + // build path + StrCopy(pathP,"/Palm/Programs/ScummVM/Games/"); + if (gameInfoP->pathP[0] == '/') + StrCopy(pathP, gameInfoP->pathP); + else if (!(gameInfoP->pathP[0] == '.' && StrLen(gameInfoP->pathP) == 1)) + StrCat(pathP, gameInfoP->pathP); + + // path + ArgsAdd(&argvP[argc], "-p", pathP, &argc); + + // language + if (gameInfoP->language > 0) { + const Char *lang = "zh\0cz\0gb\0en\0fr\0de\0hb\0it\0jp\0kr\0pl\0pt\0ru\0es\0se\0"; + ArgsAdd(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc); + } + + // fullscreen ? + if (gameInfoP->fullscreen) + ArgsAdd(&argvP[argc], "-f", NULL, &argc); + + // aspect-ratio ? + ArgsAdd(&argvP[argc], (gameInfoP->aspectRatio ? "--aspect-ratio" : "--no-aspect-ratio"), NULL, &argc); + + // gfx mode + gVars->filter = gameInfoP->filter; + + switch (gameInfoP->renderMode) { + case 1: + ArgsAdd(&argvP[argc], "--render-mode=", "amiga", &argc); + break; + case 2: + ArgsAdd(&argvP[argc], "--render-mode=", "cga", &argc); + break; + case 3: + ArgsAdd(&argvP[argc], "--render-mode=", "ega", &argc); + break; + case 4: + ArgsAdd(&argvP[argc], "--render-mode=", "hercAmber", &argc); + break; + case 5: + ArgsAdd(&argvP[argc], "--render-mode=", "hercGreen", &argc); + break; + } + + switch (gameInfoP->gfxMode) { + case 1: + ArgsAdd(&argvP[argc], "-g", "wide", &argc); + break; + default: + ArgsAdd(&argvP[argc], "-g", "1x", &argc); + break; + } + + // load state + if (gameInfoP->autoLoad) { + StrIToA(num, gameInfoP->loadSlot); + ArgsAdd(&argvP[argc], "-x", num, &argc); + } + // boot script parameter + if (gameInfoP->bootParam) { + StrIToA(num, gameInfoP->bootValue); + ArgsAdd(&argvP[argc], "-b", num, &argc); + } + // not a PC version + if (gameInfoP->setPlatform) { + static const char *platform[] = { + "3do", + "acorn", + "amiga", + "atari", + "c64", + "pc", + "fmtowns", + "linux", + "mac", + "nes", + "segacd", + "windows" + }; + ArgsAdd(&argvP[argc], "--platform=", platform[gameInfoP->platform], &argc); + } + + // subtitles + if (gameInfoP->subtitles) + ArgsAdd(&argvP[argc], "-n", NULL, &argc); + + // multi midi ? + if (gameInfoP->musicInfo.sound.multiMidi) + ArgsAdd(&argvP[argc], "--multi-midi", NULL, &argc); + + if (engine == ENGINE_SCUMM) { + // music tempo + StrIToA(num, gameInfoP->musicInfo.sound.tempo); + ArgsAdd(&argvP[argc], "--tempo=", num, &argc); + } + + // talk speed + if (gameInfoP->talkSpeed) { + StrIToA(num, gameInfoP->talkValue); + ArgsAdd(&argvP[argc], "--talkspeed=", num, &argc); + } + + // music driver + if (gameInfoP->musicInfo.sound.music) { + static char *drv[] = { + "auto", + "null", + "adlib", + "towns", + "pcjr", + "native", + "pcspk" + }; + + if (StrCompare(drv[gameInfoP->musicInfo.sound.drvMusic], "native") == 0) { + if (OPTIONS_TST(kOptDeviceZodiac)) + ArgsAdd(&argvP[argc], "-e", "zodiac", &argc); // Tapwave Zodiac + else if (OPTIONS_TST(kOptSonyPa1LibAPI)) + ArgsAdd(&argvP[argc], "-e", "ypa1", &argc); // Pa1Lib devices + else + ArgsAdd(&argvP[argc], "-e", "auto", &argc); // no driver, switch to auto + } else { + ArgsAdd(&argvP[argc], "-e", drv[gameInfoP->musicInfo.sound.drvMusic], &argc); + } + + // output rate + UInt32 rates[] = {4000, 8000, 11025, 22050, 44100}; + StrIToA(num, rates[gameInfoP->musicInfo.sound.rate]); + ArgsAdd(&argvP[argc], "--output-rate=", num, &argc); + + // FM quality + gVars->fmQuality = gameInfoP->fmQuality; + + } else { + ArgsAdd(&argvP[argc], "-e", "null", &argc); + } + + // volume control + StrIToA(num, gameInfoP->musicInfo.volume.sfx); + ArgsAdd(&argvP[argc], "-s", num, &argc); + StrIToA(num, gameInfoP->musicInfo.volume.music); + ArgsAdd(&argvP[argc], "-m", num, &argc); + StrIToA(num, gameInfoP->musicInfo.volume.speech); + ArgsAdd(&argvP[argc], "-r", num, &argc); + + // game name + ArgsAdd(&argvP[argc], gameInfoP->gameP, NULL, &argc); + + // others globals data + gVars->CD.enable = gameInfoP->musicInfo.sound.CD; + gVars->CD.driver = gameInfoP->musicInfo.sound.drvCD; + gVars->CD.format = gameInfoP->musicInfo.sound.frtCD; + gVars->CD.volume = gameInfoP->musicInfo.volume.audiocd; + gVars->CD.defaultTrackLength = gameInfoP->musicInfo.sound.defaultTrackLength; + gVars->CD.firstTrack = gameInfoP->musicInfo.sound.firstTrack; + gVars->palmVolume = gameInfoP->musicInfo.sound.music ? gameInfoP->musicInfo.volume.palm : 0; + + MemHandleUnlock(recordH); + } // end no game / game selected + + // common command line options + + // debug level + if (gPrefs->debug) { + StrIToA(num, gPrefs->debugLevel); + ArgsAdd(&argvP[argc], "-d", num, &argc); + } + + if (engine == ENGINE_QUEEN || engine == ENGINE_SKY) { + // alternative intro ? + if (gPrefs->altIntro) + ArgsAdd(&argvP[argc], "--alt-intro", NULL, &argc); + } + + if (engine == ENGINE_SCUMM) { + // demo mode ? + if (gPrefs->demoMode) + ArgsAdd(&argvP[argc], "--demo-mode", NULL, &argc); + } + + // copy protection ? + if (gPrefs->copyProtection) + ArgsAdd(&argvP[argc], "--copy-protection", NULL, &argc); + + // exceed max args ? + if (argc > MAX_ARG) + FrmCustomAlert(FrmErrorAlert, "Too many parameters.",0,0); + + // set some common options + stackSize = (gPrefs->setStack ? STACK_LARGER : STACK_DEFAULT); + lightspeed= (gPrefs->lightspeed.enable ? gPrefs->lightspeed.mode : 255); + toLauncher= (gPrefs->exitLauncher); + + // gVars values + // (gVars->HRrefNum defined in checkHRmode on Clié) + gVars->VFS.volRefNum = gPrefs->card.volRefNum; + gVars->vibrator = gPrefs->vibrator; + gVars->stdPalette = gPrefs->stdPalette; + gVars->VFS.cacheSize = (gPrefs->card.useCache ? gPrefs->card.cacheSize : 0); + gVars->indicator.showLED= gPrefs->card.showLED; + gVars->stylusClick = gPrefs->stylusClick; + gVars->autoSave = (gPrefs->autoSave ? gPrefs->autoSavePeriod : -1); + gVars->advancedMode = gPrefs->advancedMode; + gVars->arrowKeys = gPrefs->arrowKeys; + + // user params + HWR_RSTALL(); + + if (gPrefs->goLCD) + HWR_SET(INIT_GOLCD); + else + OPTIONS_RST(kOptGoLcdAPI); + + if (!gPrefs->autoOff) + HWR_SET(INIT_AUTOOFF); + + if (gVars->vibrator) + HWR_SET(INIT_VIBRATOR); +/* ???? + if ( musicDriver == 1 || + musicDriver == 3 || + musicDriver == 4 || + musicDriver == sysInvalidRefNum) { + HWR_SET(INIT_PA1LIB); + } +*/ + if (ModImport(gVars->VFS.volRefNum, engine, &isARM) != errNone) { + if (bDirectMode) { + // and force exit if nothing selected + EventType event; + event.eType = keyDownEvent; + event.data.keyDown.chr = vchrLaunch; + event.data.keyDown.modifiers = commandKeyMask; + EvtAddUniqueEventToQueue(&event, 0, true); + } + ArgsFree(argvP); + return false; + } + + // reset mode if screen rotation occured (DIA only) + if (!direct && OPTIONS_TST(kOptCollapsible)) { + UInt8 mode = PalmScreenSize(0,0, &(gVars->screenFullWidth), &(gVars->screenFullHeight)); + OPTIONS_RST(kOptModeLandscape); + OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone); + } + + // free and save globals pref memory + GamCloseDatabase(false); + FrmCloseAllForms(); + SavePrefs(); + + { + UInt16 cardNo; + UInt32 dbID; + + LaunchParamType *cmdPBP = (LaunchParamType *)MemPtrNew(sizeof(LaunchParamType)); + + MemPtrSetOwner(cmdPBP, 0); + MemPtrSetOwner(gVars, 0); + ArgsSetOwner(argvP, 0); + + cardNo = 0; + dbID = DmFindDatabase(0, "ScummVM-Engine"); + + if (isARM) + FtrSet(appFileCreator, ftrStack , (stackSize * 4)); + else + ModSetStack(stackSize, cardNo, dbID); + + cmdPBP->args.argc = argc; + cmdPBP->args.argv = argvP; + cmdPBP->gVars = gVars; + cmdPBP->lightspeed = lightspeed; + cmdPBP->exitLauncher = toLauncher; + + SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch, cmdPBP); + bLaunched = true; + } + + return false; +} diff --git a/backends/platform/PalmOS/Src/launcher/skin.cpp b/backends/platform/PalmOS/Src/launcher/skin.cpp new file mode 100644 index 0000000000..f38fe88d46 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/skin.cpp @@ -0,0 +1,611 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include + +#include "start.h" +#include "games.h" +#include "globals.h" +#include "skin.h" +#include "StarterRsc.h" + +UInt16 lastIndex = dmMaxRecordIndex; // last select index in the list to prevent flash +static WinHandle winLockH = NULL; + +MemPtr SknScreenLock(WinLockInitType initMode) { + Err e; + RectangleType r; + + WinGetBounds(WinGetDisplayWindow(), &r); + winLockH = WinCreateOffscreenWindow(r.extent.x, r.extent.y, nativeFormat, &e); + WinSetDrawWindow(winLockH); + + if (initMode == winLockCopy) + WinCopyRectangle(WinGetDisplayWindow(), winLockH, &r, 0, 0, winPaint); + + return BmpGetBits(WinGetBitmap(winLockH)); +} + +void SknScreenUnlock() { + RectangleType r; + + WinGetBounds(winLockH, &r); + WinCopyRectangle(winLockH, WinGetDisplayWindow(), &r, 0, 0, winPaint); + WinSetDrawWindow(WinGetDisplayWindow()); + WinDeleteWindow(winLockH, false); + winLockH = NULL; +} + +static void SknGetListColors(DmOpenRef skinDBP, UInt8 *text, UInt8 *selected, UInt8 *background) { + UInt16 colIndex; + MemHandle colH; + UInt8 *colTemp; + + // default + *text = UIColorGetTableEntryIndex (UIMenuForeground); + *selected = UIColorGetTableEntryIndex (UIMenuSelectedForeground); + *background = UIColorGetTableEntryIndex (UIMenuSelectedFill); + + if (skinDBP) { + colIndex = DmFindResource (skinDBP, sknColorsRsc, skinColors, NULL); + + if (colIndex != (UInt16)-1) { + colH = DmGetResourceIndex(skinDBP, colIndex); + + if (colH) { + colTemp = (UInt8 *)MemHandleLock(colH); + + *text = colTemp[0]; + *selected = colTemp[1]; + *background = colTemp[2]; + + MemPtrUnlock(colTemp); + DmReleaseResource(colH); + } + } + } +} + +static void SknCopyBits(DmOpenRef skinDBP, DmResID bitmapID, const RectangleType *srcRect, Coord destX, Coord destY) { + MemHandle hTemp; + BitmapPtr bmpTemp; + UInt16 index; + + Coord cx, cy, cw, ch, bw, bh; + RectangleType copy, old; + + if (skinDBP) { + // find the bitmap + index = DmFindResource (skinDBP, bitmapRsc, bitmapID, NULL); + + if (index != (UInt16)-1) { + hTemp = DmGetResourceIndex(skinDBP,index); + + if (hTemp) { + bmpTemp = (BitmapType *)MemHandleLock(hTemp); + BmpGlueGetDimensions(bmpTemp, &bw, &bh, 0); + + if (!srcRect) { + cx = 0; + cy = 0; + cw = bw; + ch = bh; + } else { + cx = srcRect->topLeft.x; + cy = srcRect->topLeft.y; + cw = srcRect->extent.x; + ch = srcRect->extent.y; + } + + if (ch) { + WinGetClip(&old); + if (OPTIONS_TST(kOptModeHiDensity)) { + Err e; + BitmapTypeV3 *bmp2P; + + // create an uncompressed version of the bitmap + WinHandle win = WinCreateOffscreenWindow(bw, bh, screenFormat, &e); + WinHandle old = WinGetDrawWindow(); + WinSetDrawWindow(win); + WinDrawBitmap(bmpTemp, 0, 0); + WinSetDrawWindow(old); + + bmp2P = BmpCreateBitmapV3(WinGetBitmap(win), kDensityDouble, BmpGetBits(WinGetBitmap(win)), NULL); + + copy.topLeft.x = destX / 2; + copy.topLeft.y = destY / 2; + copy.extent.x = cw / 2; + copy.extent.y = ch / 2; + + WinSetClip(©); + WinDrawBitmap((BitmapPtr)bmp2P, (destX - cx) / 2, (destY - cy) / 2); + BmpDelete((BitmapPtr)bmp2P); + WinDeleteWindow(win, false); + + } else { + copy.topLeft.x = destX; + copy.topLeft.y = destY; + copy.extent.x = cw; + copy.extent.y = ch; + + HRWinSetClip(gVars->HRrefNum, ©); + HRWinDrawBitmap(gVars->HRrefNum, bmpTemp, destX - cx, destY - cy); + } + WinSetClip(&old); + } + + MemPtrUnlock(bmpTemp); + DmReleaseResource(hTemp); + } + } + } +} + +void SknApplySkin() { + DmOpenRef skinDBP; + RectangleType r; + FormPtr frmP = FrmGetActiveForm(); + + // draw skin + FrmDrawForm(frmP); + SknScreenLock(winLockCopy); + + skinDBP = SknOpenSkin(); + + if (gPrefs->card.volRefNum != vfsInvalidVolRef) + FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap)); + else + FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap)); + + WinSetForeColor(255); + WinSetDrawMode(winPaint); + WinDrawLine (0, 14, 159, 14); + WinDrawLine (0, 13, 159, 13); + + SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &r); + SknCopyBits(skinDBP, skinBackgroundImageTop, 0, r.topLeft.x, r.topLeft.y); + SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &r); + SknCopyBits(skinDBP, skinBackgroundImageBottom, 0, r.topLeft.x, r.topLeft.y); + + for (UInt16 resID = 1100; resID <= 7000; resID += 100) { + SknSetState(skinDBP, resID, sknStateNormal); + SknShowObject(skinDBP, resID); + } + + SknCloseSkin(skinDBP); + SknScreenUnlock(); + SknUpdateList(); +} + +void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP) { + + UInt16 bmpIndex, strIndex; + MemHandle hBmp, hStr; + BitmapType *bmpTemp; + UInt8 *strTemp; + + RctSetRectangle(rP, 0, 0, 0, 0); + + if (skinDBP) { + bmpIndex = DmFindResource (skinDBP, bitmapRsc, resID, NULL); + + if (bmpIndex != (UInt16)-1) { // if bmp exists + strIndex = DmFindResource (skinDBP, sknPosRsc, resID, NULL); + + if (strIndex != (UInt16)-1) { // if params exist + hBmp = DmGetResourceIndex(skinDBP,bmpIndex); + + if (hBmp) { + hStr = DmGetResourceIndex(skinDBP,strIndex); + + if (hStr) { + // buttons : state|x|y|w/h slider|draw mode|x1/y1 keep|x2/y2 keep slider + // list (160mode) : state|x|y|w|h| + bmpTemp = (BitmapType *)MemHandleLock(hBmp); + strTemp = (UInt8 *)MemHandleLock(hStr); + + BmpGlueGetDimensions(bmpTemp, &(rP->extent.x), &(rP->extent.y), 0); + rP->topLeft.x = strTemp[sknInfoPosX] * 2; + rP->topLeft.y = strTemp[sknInfoPosY] * 2; + + MemPtrUnlock(strTemp); + DmReleaseResource(hStr); + } + + MemPtrUnlock(bmpTemp); + DmReleaseResource(hBmp); + } + } + } + } +} + +DmOpenRef SknOpenSkin() { + return DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly); +} + +void SknCloseSkin(DmOpenRef skinDBP) { + if (skinDBP) + DmCloseDatabase(skinDBP); +} + +UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState) { + + UInt16 index; + MemHandle hStr; + UInt8 *strTemp; + UInt8 oldState = 0; + + if (skinDBP) { + index = DmFindResource (skinDBP, sknPosRsc, resID, NULL); + + if (index != (UInt16)-1) { + hStr = DmGetResourceIndex(skinDBP, index); + + if (hStr) { + strTemp = (UInt8 *)MemHandleLock(hStr); + oldState = strTemp[sknInfoState]; + + if (oldState != newState) { + DmWrite(strTemp, 0, &newState, 1); + } + + MemPtrUnlock(strTemp); + DmReleaseResource(hStr); + } + } + } + + return oldState; +} + +UInt8 SknGetDepth(DmOpenRef skinDBP) { + UInt16 index; + MemHandle hStr; + UInt8 *strTemp; + UInt8 depth = 8; + + if (skinDBP) { + index = DmFindResource (skinDBP, sknDepthRsc, skinDepth, NULL); + + if (index != (UInt16)-1) { + hStr = DmGetResourceIndex(skinDBP, index); + + if (hStr) { + strTemp = (UInt8 *)MemHandleLock(hStr); + depth = *strTemp; + MemPtrUnlock(strTemp); + DmReleaseResource(hStr); + } + } + } + + return depth; +} + +UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID) { + UInt16 index; + MemHandle hStr; + UInt8 *strTemp; + UInt8 oldState = sknStateDisabled; + + if (skinDBP) { + index = DmFindResource (skinDBP, sknPosRsc, resID, NULL); + + if (index != (UInt16)-1) { + hStr = DmGetResourceIndex(skinDBP, index); + + if (hStr) { + strTemp = (UInt8 *)MemHandleLock(hStr); + oldState = strTemp[sknInfoState]; + MemPtrUnlock(strTemp); + DmReleaseResource(hStr); + } + } + } + + return oldState; +} + +void SknShowObject(DmOpenRef skinDBP, DmResID resID) { + RectangleType r; + UInt8 state = SknGetState(skinDBP, resID); + SknGetObjectBounds(skinDBP, resID, &r); + SknCopyBits(skinDBP, resID + state, NULL, r.topLeft.x, r.topLeft.y); +} + +void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP) { + DmOpenRef skinDBP; + UInt16 strIndex; + MemHandle hStr; + UInt8 *strTemp; + UInt16 x,y,w,h; + + skinDBP = DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly); + if (skinDBP) { + strIndex = DmFindResource (skinDBP, sknPosRsc, skinList, NULL); + + if (strIndex != 0xFFFF) { // if params exist + hStr = DmGetResourceIndex(skinDBP,strIndex); + if (hStr) { + strTemp = (UInt8 *)MemHandleLock(hStr); + + x = strTemp[sknInfoPosX]; + y = strTemp[sknInfoPosY]; + w = strTemp[sknInfoListWidth]; + h = strTemp[sknInfoListSize] * sknInfoListItemSize; + + if (rAreaP) + RctSetRectangle(rAreaP ,x, y, w, h); + if (rArea2xP) + RctSetRectangle(rArea2xP, x+x, y+y, w+w, h+h); + + MemHandleUnlock(hStr); + DmReleaseResource(hStr); + } + } + + DmCloseDatabase(skinDBP); + } +} + +static void SknRedrawTools(DmOpenRef skinDBP) { + if (GamGetSelected() == dmMaxRecordIndex) { + if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateNormal) { + SknSetState(skinDBP, skinButtonGameDelete,sknStateDisabled); + SknShowObject(skinDBP, skinButtonGameDelete); + } + if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateNormal) { + SknSetState(skinDBP, skinButtonGameEdit,sknStateDisabled); + SknShowObject(skinDBP, skinButtonGameEdit); + } + if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateNormal) { + SknSetState(skinDBP, skinButtonGameAudio,sknStateDisabled); + SknShowObject(skinDBP, skinButtonGameAudio); + } + + } else { + if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateDisabled) { + SknSetState(skinDBP, skinButtonGameDelete,sknStateNormal); + SknShowObject(skinDBP, skinButtonGameDelete); + } + if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateDisabled) { + SknSetState(skinDBP, skinButtonGameEdit,sknStateNormal); + SknShowObject(skinDBP, skinButtonGameEdit); + } + if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateDisabled) { + SknSetState(skinDBP, skinButtonGameAudio,sknStateNormal); + SknShowObject(skinDBP, skinButtonGameAudio); + } + } +} + +static void SknRedrawSlider(DmOpenRef skinDBP, UInt16 index, UInt16 maxIndex, UInt16 perPage) { + if (maxIndex <= perPage) { + if (SknGetState(skinDBP,skinSliderUpArrow) != sknStateDisabled) { + SknSetState(skinDBP,skinSliderUpArrow,sknStateDisabled); + SknShowObject(skinDBP,skinSliderUpArrow); + } + if (SknGetState(skinDBP,skinSliderDownArrow) != sknStateDisabled) { + SknSetState(skinDBP,skinSliderDownArrow,sknStateDisabled); + SknShowObject(skinDBP,skinSliderDownArrow); + } + + } else { + if (SknGetState(skinDBP,skinSliderUpArrow) == sknStateDisabled) { + SknSetState(skinDBP,skinSliderUpArrow,sknStateNormal); + SknShowObject(skinDBP,skinSliderUpArrow); + } + if (SknGetState(skinDBP,skinSliderDownArrow) == sknStateDisabled) { + SknSetState(skinDBP,skinSliderDownArrow,sknStateNormal); + SknShowObject(skinDBP,skinSliderDownArrow); + } + } +} + +void SknUpdateList() { + MemHandle record; + Int32 index, maxIndex, maxView; + GameInfoType *game; + RectangleType rArea, rField, rCopy, rArea2x; + DmOpenRef skinDBP; + + UInt8 txtColor, norColor, selColor, bkgColor; + UInt16 x,y; + + SknScreenLock(winLockCopy); + + SknGetListBounds(&rArea, &rArea2x); + skinDBP = SknOpenSkin(); + // set default bg + WinSetForeColor(UIColorGetTableEntryIndex (UIFormFill)); + WinDrawRectangle(&rArea,0); + // copy top bg + SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &rField); + RctGetIntersection(&rArea2x, &rField, &rCopy); + x = rCopy.topLeft.x; + y = rCopy.topLeft.y; + rCopy.topLeft.x -= rField.topLeft.x; + rCopy.topLeft.y -= rField.topLeft.y; + SknCopyBits(skinDBP, skinBackgroundImageTop, &rCopy, x, y); + // copy bottom bg + SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &rField); + RctGetIntersection(&rArea2x, &rField, &rCopy); + x = rCopy.topLeft.x; + y = rCopy.topLeft.y; + rCopy.topLeft.x -= rField.topLeft.x; + rCopy.topLeft.y -= rField.topLeft.y; + SknCopyBits(skinDBP, skinBackgroundImageBottom, &rCopy, x, y); + + FntSetFont(stdFont); + + index = gPrefs->listPosition; + maxIndex = DmNumRecords(gameDB); + maxView = rArea.extent.y / sknInfoListItemSize; + + if (index > 0 && (index + maxView) > maxIndex) + index -= (index + maxView) - maxIndex; + + if (index < 0) + index = 0; + + gPrefs->listPosition = index; + + SknRedrawSlider(skinDBP, index, maxIndex, maxView); + SknRedrawTools(skinDBP); + SknGetListColors(skinDBP, &norColor, &selColor, &bkgColor); + + SknCloseSkin(skinDBP); + + while (index < (gPrefs->listPosition + maxView) && index < maxIndex) { + record = DmQueryRecord(gameDB, index); + game = (GameInfoType *)MemHandleLock(record); + + // text box + RctSetRectangle(&rField, rArea.topLeft.x, (rArea.topLeft.y + sknInfoListItemSize * (index - gPrefs->listPosition)), rArea.extent.x, sknInfoListItemSize); + WinSetClip(&rField); + + if (game->selected) { + WinSetDrawMode(winPaint); + WinSetForeColor(bkgColor); + WinDrawRectangle(&rField,0); + txtColor = selColor; + } + else + txtColor = norColor; + + // clipping + rField.topLeft.x += 2; + rField.extent.x -= 4; + WinSetClip(&rField); + // draw text mask + WinSetTextColor(255); + WinSetDrawMode(winMask); + WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y); + // draw text + if (txtColor) { + WinSetTextColor(txtColor); + WinSetDrawMode(winOverlay); + WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y); + } + + MemHandleUnlock(record); + index++; + } + + RctSetRectangle(&rArea,0,0,160,160); + WinSetClip(&rArea); + SknScreenUnlock(); +} + +UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my) { + UInt16 resID; + RectangleType r; + + mx *= 2; + my *= 2; + + if (skinDBP) { + for (resID = 1100; resID <= 7000; resID += 100) { + if (SknGetState(skinDBP, resID) != sknStateDisabled) { + SknGetObjectBounds(skinDBP, resID, &r); + if (RctPtInRectangle(mx, my, &r)) { + return resID; + } + } + } + } + + return 0; +} + +void SknSelect(Coord x, Coord y) { + RectangleType rArea; + SknGetListBounds(&rArea,0); + + if (RctPtInRectangle(x, y, &rArea)) { + UInt16 index; + MemHandle record; + GameInfoType *game; + UInt16 oldIndex; + + index = (y - rArea.topLeft.y) / sknInfoListItemSize + gPrefs->listPosition; + + if (index == lastIndex) + return; + + if (index < DmNumRecords(gameDB)) { + Boolean newValue; + + oldIndex = GamGetSelected(); + + if (oldIndex != index && oldIndex != dmMaxRecordIndex) + GamUnselect(); + + record = DmGetRecord(gameDB, index); + game = (GameInfoType *)MemHandleLock(record); + + newValue = !game->selected; + DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean)); + + MemHandleUnlock(record); + DmReleaseRecord (gameDB, index, 0); + + lastIndex = index; + SknUpdateList(); + } + } +} + +Boolean SknProcessArrowAction(UInt16 button) { + Boolean handled = false; + + switch (button) { + case skinSliderUpArrow: + if (gPrefs->listPosition > 0) { + gPrefs->listPosition--; + SknUpdateList(); + } + handled = true; + break; + + case skinSliderDownArrow: + RectangleType rArea; + UInt16 maxView; + + SknGetListBounds(&rArea, 0); + maxView = rArea.extent.y / sknInfoListItemSize; + + if (gPrefs->listPosition < DmNumRecords(gameDB)-maxView) { + gPrefs->listPosition++; + SknUpdateList(); + } + handled = true; + break; + } + + return handled; +} diff --git a/backends/platform/PalmOS/Src/launcher/skin.h b/backends/platform/PalmOS/Src/launcher/skin.h new file mode 100644 index 0000000000..2047532fd8 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/skin.h @@ -0,0 +1,130 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __SKIN_H__ +#define __SKIN_H__ + +// skin +#define sknInfoState 0 +#define sknInfoPosX 1 +#define sknInfoPosY 2 + +#define sknInfoMaxWOrH 3 +#define sknInfoDrawMode 4 +#define sknInfoKeepXOrY1 5 +#define sknInfoKeepXOrY2 7 + +#define sknInfoListWidth sknInfoMaxWOrH +#define sknInfoListHeight sknInfoDrawMode +#define sknInfoListSize sknInfoListHeight +#define sknInfoListItemSize 12 + +#define sknPosRsc 'sPos' +#define sknColorsRsc 'sCol' +#define sknDepthRsc 'sDep' + +#define sknStateNormal 0 +#define sknStateSelected 10 +#define sknStateDisabled 20 + +#define sknSelectedState(bmp) (bmp + sknStateSelected) +#define sknDisabledState(bmp) (bmp + sknStateDisabled) + +// skin elements +#define skinList 500 +#define skinColors 600 +#define skinDepth 700 + +#define skinButtonNone 0 + +#define skinSliderUpArrow 2000 +#define skinSliderDownArrow 2100 + +#define skinButtonGameParams 3000 +#define skinButtonGameAdd 3100 +#define skinButtonGameEdit 3200 +#define skinButtonGameAudio 3300 +#define skinButtonGameDelete 4000 +#define skinButtonGameStart 7000 + +#define skinBackgroundImageTop 1000 +#define skinBackgroundImageBottom 1010 +/// + + +#define skinToolsBackground 1100 + +#define skinListUpArrowNormal 1500 +#define skinListUpArrowOver 1510 +#define skinListUpArrowDisabled 1540 + +#define skinListDownArrowNormal 1800 +#define skinListDownArrowOver 1810 +#define skinListDownArrowDisabled 1840 + +#define skinButtonGameInfoNormal 2000 +#define skinButtonGameInfoOver 2010 +#define skinButtonGameInfoDisabled 2040 + +#define skinButtonGameParamNormal 3000 +#define skinButtonGameParamOver 3010 + +#define skinButtonGameDeleteNormal 4000 +#define skinButtonGameDeleteOver 4010 +#define skinButtonGameDeleteDisabled 4040 + +#define skinButtonVibratorNormal 5000 +#define skinButtonVibratorOver 5010 +#define skinButtonVibratorSelected 5020 +#define skinButtonVibratorSelectedOver 5030 +#define skinButtonVibratorDisabled 5040 + + +#define skinButtonSleepNormal 6000 +#define skinButtonSleepOver 6010 +#define skinButtonSleepSelected 6020 +#define skinButtonSleepSelectedOver 9030 + +#define skinButtonPlayNormal 7000 +#define skinButtonPlayOver 7010 +#define skinButtonPlayDisabled 7040 + +// protos +void SknApplySkin(); +void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP); +DmOpenRef SknOpenSkin(); +void SknCloseSkin(DmOpenRef skinDBP); +UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState); +void SknShowObject(DmOpenRef skinDBP, DmResID resID); +UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID); +void SknUpdateList(); +void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP); +UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my); +void SknSelect(Coord x, Coord y); +Boolean SknProcessArrowAction(UInt16 button); +UInt8 SknGetDepth(DmOpenRef skinDBP); + +extern UInt16 lastIndex; + +#endif diff --git a/backends/platform/PalmOS/Src/launcher/start.cpp b/backends/platform/PalmOS/Src/launcher/start.cpp new file mode 100644 index 0000000000..076c24d6c2 --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/start.cpp @@ -0,0 +1,366 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include + +#include "palmdefs.h" +#include "start.h" +#include "games.h" +#include "globals.h" +#include "modules.h" +#include "skin.h" + +#include "forms.h" + +/*********************************************************************** + * + * Global variables + * + ***********************************************************************/ +GlobalsPreferencePtr gPrefs; +GlobalsDataPtr gVars; + +Boolean bDirectMode = false; +Boolean bStartScumm = false; +Boolean bLaunched = false; + +/*********************************************************************** + * + * Internal Constants + * + ***********************************************************************/ + +// Define the minimum OS version we support (3.5 for now). +#define kOurMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0) +#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) + +/*********************************************************************** + * + * Internal Functions + * + ***********************************************************************/ + +// Callback for ExgDBWrite to send data with Exchange Manager +static Err WriteDBData(const void* dataP, UInt32* sizeP, void* userDataP) { + Err err; + *sizeP = ExgSend((ExgSocketPtr)userDataP, (void*)dataP, *sizeP, &err); + return err; +} + +Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP) { + ExgSocketType exgSocket; + Err err; + + // Create exgSocket structure + MemSet(&exgSocket, sizeof(exgSocket), 0); + exgSocket.description = descriptionP; + exgSocket.name = nameP; + + // Start an exchange put operation + err = ExgPut(&exgSocket); + if (!err) { + err = ExgDBWrite(WriteDBData, &exgSocket, NULL, dbID, cardNo); + err = ExgDisconnect(&exgSocket, err); + } + + return err; +} + + +/*********************************************************************** + * + * FUNCTION: RomVersionCompatible + * + * DESCRIPTION: This routine checks that a ROM version is meet your + * minimum requirement. + * + * PARAMETERS: requiredVersion - minimum rom version required + * (see sysFtrNumROMVersion in SystemMgr.h + * for format) + * launchFlags - flags that indicate if the application + * UI is initialized. + * + * RETURNED: error code or zero if rom is compatible + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) { + UInt32 romVersion; + + // See if we're on in minimum required version of the ROM or later. + FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (romVersion < requiredVersion) { + if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == + (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) { + + FrmAlert (RomIncompatibleAlert); + + // Palm OS 1.0 will continuously relaunch this app unless we switch to + // another safe one. + if (romVersion <= kPalmOS10Version) + AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); + + } + return sysErrRomIncompatible; + } + + return errNone; +} + +/////////////////////////////////////////////////////////////////////// + + +void SavePrefs() { + if (gPrefs) { + PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, gPrefs, sizeof (GlobalsPreferenceType), true); + MemPtrFree(gPrefs); + gPrefs = NULL; + } +} + +/*********************************************************************** + * + * FUNCTION: AppHandleEvent + * + * DESCRIPTION: This routine loads form resources and set the event + * handler for the form loaded. + * + * PARAMETERS: event - a pointer to an EventType structure + * + * RETURNED: true if the event has handle and should not be passed + * to a higher level handler. + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static Boolean AppHandleEvent(EventPtr eventP) { + UInt16 formId; + FormPtr frmP; + + if (eventP->eType == frmLoadEvent) { + // Load the form resource. + formId = eventP->data.frmLoad.formID; + frmP = FrmInitForm(formId); + FrmSetActiveForm(frmP); + + // Set the event handler for the form. The handler of the currently + // active form is called by FrmHandleEvent each time is receives an + // event. + switch (formId) { + case MainForm: + FrmSetEventHandler(frmP, MainFormHandleEvent); + break; + + case SkinsForm: + FrmSetEventHandler(frmP, SkinsFormHandleEvent); + break; + + case GameEditForm: + FrmSetEventHandler(frmP, EditGameFormHandleEvent); + break; + + case MiscForm: + FrmSetEventHandler(frmP, MiscFormHandleEvent); + break; + + case CardSlotForm: + FrmSetEventHandler(frmP, CardSlotFormHandleEvent); + break; + + case MusicForm: + FrmSetEventHandler(frmP, MusicFormHandleEvent); + break; + + case InfoForm: + FrmSetEventHandler(frmP, InfoFormHandleEvent); + break; + + default: +// ErrFatalDisplay("Invalid Form Load Event"); + break; + } + return true; + } + + return false; +} + +/*********************************************************************** + * + * FUNCTION: AppEventLoop + * + * DESCRIPTION: This routine is the event loop for the application. + * + * PARAMETERS: nothing + * + * RETURNED: nothing + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppEventLoop(void) { + UInt16 error; + EventType event; + + do { + EvtGetEvent(&event, evtNoWait); + + if(bStartScumm) + bStartScumm = StartScummVM(); + + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &error)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + + } while (event.eType != appStopEvent); +} + +/*********************************************************************** + * + * FUNCTION: ScummVMPalmMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData) { + switch (pData->notifyType) { + case sysNotifyVolumeMountedEvent: + pData->handled = true; // don't switch + + if (gPrefs) { // gPrefs exists ? so we are in the palm selector + CardSlotFormUpdate(); // redraw card list if needed + + if (gPrefs->card.volRefNum == vfsInvalidVolRef) { + VFSAnyMountParamType *notifyDetailsP = (VFSAnyMountParamType *)pData->notifyDetailsP; + gPrefs->card.volRefNum = notifyDetailsP->volRefNum; + + if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) + if (gPrefs->card.volRefNum != vfsInvalidVolRef) { + CardSlotCreateDirs(); + FrmUpdateForm(MainForm, frmRedrawUpdateMSImport); + } + } + } + break; + + case sysNotifyVolumeUnmountedEvent: + if (gPrefs) { + CardSlotFormUpdate(); + + if (gPrefs->card.volRefNum == (UInt16)pData->notifyDetailsP) { + gPrefs->card.volRefNum = vfsInvalidVolRef; + + if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) + FrmUpdateForm(MainForm, frmRedrawUpdateMS); + } + } + break; + + case sysNotifyDisplayResizedEvent: + if (gVars) + if (FrmGetFormPtr(MainForm) == FrmGetActiveForm()) + SknApplySkin(); + break; + + case sonySysNotifyMsaEnforceOpenEvent: + // what am i supposed to do here ??? + break; + } +} + +static UInt32 ScummVMPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + Err error; + + error = RomVersionCompatible (kOurMinVersion, launchFlags); + if (error) return (error); + + switch (cmd) { + case sysAppLaunchCmdNotify: + AppLaunchCmdNotify(launchFlags, (SysNotifyParamType *) cmdPBP); + break; + + case sysAppLaunchCustomEngineDelete: +#ifndef _DEBUG_ENGINE + ModDelete(); +#endif + break; + + case sysAppLaunchCmdNormalLaunch: + error = AppStart(); + if (error) + goto end; + + if (!bDirectMode) { + FrmGotoForm(MainForm); + }else { + GamUnselect(); + bStartScumm = true; + } + + AppEventLoop(); +end: + AppStop(); + break; + + default: + break; + + } + return error; +} + +/*********************************************************************** + * + * FUNCTION: PilotMain + * + * DESCRIPTION: This is the main entry point for the application. + * + * PARAMETERS: cmd - word value specifying the launch code. + * cmdPB - pointer to a structure that is associated with the launch code. + * launchFlags - word value providing extra information about the launch. + * RETURNED: Result of launch + * + * REVISION HISTORY: + * + * + ***********************************************************************/ + +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + return ScummVMPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/backends/platform/PalmOS/Src/launcher/start.h b/backends/platform/PalmOS/Src/launcher/start.h new file mode 100644 index 0000000000..a30414a54f --- /dev/null +++ b/backends/platform/PalmOS/Src/launcher/start.h @@ -0,0 +1,97 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __START_H__ +#define __START_H__ + +typedef struct { + Char nameP[32]; + UInt16 cardNo; + LocalID dbID; +} SkinInfoType, *SkinInfoPtr; + +typedef struct { + + //skin params + SkinInfoType skin; // card where is located the skin + Boolean soundClick; + + Boolean vibrator; + Boolean autoOff; + Boolean setStack; + Boolean exitLauncher; + Boolean goLCD; + Boolean stylusClick; + Boolean arrowKeys; + + UInt16 listPosition; + UInt16 autoSavePeriod; + + struct { + UInt16 volRefNum; + UInt32 cacheSize; + Boolean useCache; + Boolean showLED; + Boolean moveDB; + Boolean deleteDB; + Boolean confirmMoveDB; + } card; + + Boolean debug; + UInt16 debugLevel; + Boolean stdPalette; + Boolean demoMode; + Boolean copyProtection; + Boolean oldarm;// TODO : free slot... + Boolean altIntro; + Boolean autoSave; + Boolean advancedMode; + + struct { + Boolean enable; + UInt8 mode; + } lightspeed; + +} GlobalsPreferenceType, *GlobalsPreferencePtr; + +extern GlobalsPreferencePtr gPrefs; + +extern Boolean bDirectMode; +extern Boolean bStartScumm; +extern Boolean bLaunched; + +#define appPrefID 0x00 +#define appVersionNum 0x01 +#define appPrefVersionNum 0x02 + +#define STACK_DEFAULT 8192 +#define STACK_LARGER 16384 +#define STACK_GET 0 + +Err AppStart(void); +void AppStop(void); +Boolean StartScummVM(); +void SavePrefs(); +Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP); +#endif diff --git a/backends/platform/PalmOS/Src/missing/assert.h b/backends/platform/PalmOS/Src/missing/assert.h new file mode 100644 index 0000000000..7bc571ec15 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/assert.h @@ -0,0 +1,34 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __ASSERT_H__ +#define __ASSERT_H__ + +#ifdef _DEBUG +#define assert(a) ErrFatalDisplayIf(!(a), "Assertion failed: " #a) +#else +#define assert(a) (void)0 +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/ext_stdio.c b/backends/platform/PalmOS/Src/missing/ext_stdio.c new file mode 100644 index 0000000000..f7d37a9140 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/ext_stdio.c @@ -0,0 +1,650 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include + +#define CACHE_SIZE 1024 +enum { + MODE_BUFREAD = 1, + MODE_BUFWRITE, + MODE_BUFNONE +}; + +FILE gStdioOutput = {0,0,0,0,0,0}; +static void dummy(Boolean) {}; + +static LedProc gStdioLedProc = dummy; +static UInt16 gStdioVolRefNum = vfsInvalidVolRef; +static UInt32 gCacheSize = CACHE_SIZE; + +// TODO : implement "errno" + +void StdioInit(UInt16 volRefNum, const Char *output) { // DONE + gStdioVolRefNum = volRefNum; + gStdioOutput.mode = MODE_BUFWRITE; + + VFSFileDelete(gStdioVolRefNum, output); + VFSFileCreate(gStdioVolRefNum, output); + VFSFileOpen (gStdioVolRefNum, output,vfsModeWrite, &gStdioOutput.fileRef); +} + +void StdioSetLedProc(LedProc ledProc) { // DONE + if (ledProc) + gStdioLedProc = ledProc; + else + gStdioLedProc = dummy; +} + +void StdioSetCacheSize(UInt32 s) { // DONE + gCacheSize = s; +} + +void StdioRelease() { // DONE + // there is no cache on stdout/stderr + VFSFileClose(gStdioOutput.fileRef); +} + +UInt16 fclose(FILE *stream) { // DONE + UInt32 numBytesWritten; + Err e; + + if (stream->cacheSize) { + if (stream->bufSize > 0 && stream->mode == MODE_BUFWRITE) + VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); + + MemPtrFree(stream->cache); + } + + e = VFSFileClose(stream->fileRef); + e = MemPtrFree(stream); + + return e; +} + +UInt16 feof(FILE *stream) { // DONE + Err e; + + if (stream->cacheSize) { + switch (stream->mode) { + case MODE_BUFWRITE: + return 0; // never set in this mode + case MODE_BUFREAD: + if (stream->bufSize > 0) + return 0; + break; + } + } + + e = VFSFileEOF(stream->fileRef); + return e; +} + +UInt16 ferror(FILE *stream) { + return (stream->err); +} + +Int16 fgetc(FILE *stream) { + UInt32 numBytesRead; + Char c; + + numBytesRead = fread(&c, 1, 1, stream); + return (int)(numBytesRead == 1 ? c : EOF); +} + +Char *fgets(Char *s, UInt32 n, FILE *stream) { + UInt32 numBytesRead; + + numBytesRead = fread(s, n, 1, stream); + if (numBytesRead) { + UInt32 reset = 0; + Char *endLine = StrChr(s, '\n'); + + if (endLine >= s) { + reset = (endLine - s); + s[reset] = 0; + reset = numBytesRead - (reset + 1); + fseek(stream, -reset, SEEK_CUR); + } + + return s; + } + + return NULL; +} + +FILE *fopen(const Char *filename, const Char *type) { // DONE + Err err; + UInt16 openMode; + Boolean cache = true; + FILE *fileP = (FILE *)MemPtrNew(sizeof(FILE)); + + if (!fileP) + return NULL; + + MemSet(fileP, sizeof(FILE), 0); + + if (StrCompare(type,"r")==0 || StrCompare(type,"rb")==0) { + fileP->mode = MODE_BUFREAD; + openMode = vfsModeRead; + + } else if (StrCompare(type,"w")==0 || StrCompare(type,"wb")==0) { + fileP->mode = MODE_BUFWRITE; + openMode = vfsModeCreate|vfsModeWrite; + + } else { + cache = false; + fileP->mode = MODE_BUFNONE; + openMode = vfsModeReadWrite; + } + + if (cache) { + fileP->cacheSize = gCacheSize; + if (gCacheSize) fileP->cache = (UInt8 *)malloc(gCacheSize); // was MemGluePtrNew + if (!fileP->cache) fileP->cacheSize = 0; + } + + if (openMode & vfsModeRead) { + // if read file : + // first try to load from the specfied card + err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef); + //if err (not found ?) parse each avalaible card for the specified file + if (err) { + UInt16 volRefNum; + UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes; + while (volIterator != vfsIteratorStop) { + err = VFSVolumeEnumerate(&volRefNum, &volIterator); + + if (!err) { + err = VFSFileOpen (volRefNum, filename, openMode, &fileP->fileRef); + if (!err) + return fileP; + } + } + } else { + return fileP; + } + } else { + // if write file : + // use only the specified card + err = VFSFileDelete(gStdioVolRefNum, filename); // delete it if exists + err = VFSFileCreate(gStdioVolRefNum, filename); + openMode = vfsModeWrite; + if (!err) { + err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef); + if (!err) + return fileP; + } + } + + if (fileP->cacheSize) + MemPtrFree(fileP->cache); + + MemPtrFree(fileP); // prevent memory leak + return NULL; +} + +UInt32 fread(void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE + Err e = errNone; + UInt32 numBytesRead, rsize = (size * nitems); + + // try to read on a write only stream ? + if (stream->mode == MODE_BUFWRITE || !rsize) + return 0; + + // cached ? + if (stream->cacheSize) { + // empty buffer ? fill it if required + if (stream->bufSize == 0 && rsize < stream->cacheSize) { + gStdioLedProc(true); + e = VFSFileRead(stream->fileRef, stream->cacheSize, stream->cache, &numBytesRead); + gStdioLedProc(false); + stream->bufSize = numBytesRead; + stream->bufPos = 0; + } + + // we have the data in the cache + if (stream->bufSize >= rsize) { + MemMove(ptr, (stream->cache + stream->bufPos), rsize); + stream->bufPos += rsize; + stream->bufSize -= rsize; + numBytesRead = rsize; + + // not enough but something ? + } else if (stream->bufSize > 0) { + UInt8 *next = (UInt8 *)ptr; + MemMove(ptr, (stream->cache + stream->bufPos), stream->bufSize); + rsize -= stream->bufSize; + gStdioLedProc(true); + e = VFSFileRead(stream->fileRef, rsize, (next + stream->bufSize), &numBytesRead); + gStdioLedProc(false); + numBytesRead += stream->bufSize; + stream->bufSize = 0; + stream->bufPos = 0; + + // nothing in the cache ? + } else { + gStdioLedProc(true); + e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead); + gStdioLedProc(false); + } + + // no ? direct read + } else { + gStdioLedProc(true); + e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead); + gStdioLedProc(false); + } + + if (e == errNone || e == vfsErrFileEOF) + return (UInt32)(numBytesRead / size); + + return 0; +} + +UInt32 fwrite(const void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE + Err e = errNone; + UInt32 numBytesWritten = (size * nitems); + + // try to write on a read only stream ? + if (stream->mode == MODE_BUFREAD || !numBytesWritten) + return 0; + + // cached ? + if (stream->cacheSize) { + // can cache it ? + if ((stream->bufSize + numBytesWritten) <= stream->cacheSize) { + MemMove((stream->cache + stream->bufSize), ptr, numBytesWritten); + stream->bufSize += numBytesWritten; + + // not enough room ? write cached data and new data + } else { + gStdioLedProc(true); + e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); + e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten); + gStdioLedProc(false); + stream->bufSize = 0; + } + + // no ? direct write + } else { + gStdioLedProc(true); + e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten); + gStdioLedProc(false); + } + + if ((e == errNone || e == vfsErrFileEOF)) { + return (UInt32)(numBytesWritten / size); + } + + return 0; +} + +Int16 fseek(FILE *stream, Int32 offset, Int32 whence) { // DONE + UInt32 numBytesWritten; + Err e; + + if (stream->cacheSize) { + switch (stream->mode) { + case MODE_BUFWRITE: + e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten); + stream->bufSize = 0; + break; + + case MODE_BUFREAD: + // reposition file postion if needed + if (whence == SEEK_CUR) + e = VFSFileSeek(stream->fileRef, vfsOriginCurrent, -stream->bufSize); + stream->bufSize = 0; + stream->bufPos = 0; + break; + } + } + + e = VFSFileSeek(stream->fileRef, whence, offset); + return (e ? -1 : 0); +} + +Int32 ftell(FILE *stream) { // DONE + Err e; + UInt32 filePos; + + e = VFSFileTell(stream->fileRef ,&filePos); + + if (stream->cacheSize) { + switch (stream->mode) { + case MODE_BUFWRITE: + filePos += stream->bufSize; + break; + + case MODE_BUFREAD: + filePos -= stream->bufSize; + break; + } + } + + if (e) return -1; // errno = ? + return filePos; +} + +Int32 fprintf(FILE *stream, const Char *formatStr, ...) { // DONE + UInt32 numBytesWritten; + Char buf[256]; + va_list va; + + if (!stream->fileRef) + return 0; + + va_start(va, formatStr); + vsprintf(buf, formatStr, va); + va_end(va); + + numBytesWritten = fwrite(buf, StrLen(buf), 1, stream); + return numBytesWritten; +} + +Int32 printf(const Char *format, ...) { // DONE + UInt32 numBytesWritten; + Char buf[256]; + va_list va; + + if (!stdout->fileRef) + return 0; + + va_start(va, format); + vsprintf(buf, format, va); + va_end(va); + + numBytesWritten = fwrite(buf, StrLen(buf), 1, stdout); + return numBytesWritten; +} + +/* needed with 68k mode only, already defined in ARM MSL */ +#ifdef PALMOS_68K + +Int32 sprintf(Char* s, const Char* formatStr, ...) { + Int16 count; + va_list va; + + va_start(va, formatStr); + count = vsprintf(s, formatStr, va); + va_end(va); + + return count; +} + +Int32 snprintf(Char* s, UInt32 len, const Char* formatStr, ...) { + // len is ignored + Int16 count; + va_list va; + + va_start(va, formatStr); + count = vsprintf(s, formatStr, va); + va_end(va); + + return count; +} + + +/* WARNING : vsprintf + * ------- + * This function can handle only %[+- ][.0][field length][sxXdoiucp] format strings + * compiler option : 4byte int mode only ! + * + * TODO : check http://www.ijs.si/software/snprintf/ for a portable implementation of vsnprintf + * This one make use of sprintf so need to check if it works with PalmOS. + */ + +static Char *StrIToBase(Char *s, Int32 i, UInt8 b) { + const Char *conv = "0123456789ABCDEF"; + Char o; + Int16 c, n = 0; + Int32 div, mod; + + do { + div = i / b; + mod = i % b; + + s[n++] = *(conv + mod); + i = div; + + } while (i >= b); + + if (i > 0) { + s[n + 0] = *(conv + i); + s[n + 1] = 0; + } else { + s[n + 0] = 0; + n--; + } + + for (c=0; c <= (n >> 1); c++) { + o = s[c]; + s[c] = s[n - c]; + s[n - c]= o; + } + + return s; +} + +static void StrProcC_(Char *ioStr, UInt16 maxLen) { + Char *found; + Int16 length; + + while (found = StrStr(ioStr, "`c`")) { + if (found[3] == 0) { // if next char is NULL + length = maxLen - (found - ioStr + 2); + MemMove(found, found + 4, length); + maxLen -= 2; + } + } +} + +static void StrProcXO(Char *ioStr, UInt16 maxLen, Char *tmp) { + Char *found, *last, mod, fill; + Int16 len, count, next; + Int32 val; + + while (found = StrChr(ioStr, '`')) { + last = StrChr(found + 1, '`'); + + if (!last) + return; + + *last = 0; + next = 0; + fill = *(found + 1); + mod = *(found + 2); + count = StrAToI(found + 3); + + len = maxLen - (last - ioStr); + MemMove(found, (last + 1), len); + + // x and X always 8char on palmos ... o set to 8char (not supported on palmos) + while ((found[next] == '0' || found[next] == ' ') && next < 8) // WARNING : reduce size only (TODO ?) + next++; + + // convert to base 8 + if (mod == 'o') { + StrNCopy(tmp, found + next, 8 - next); + tmp[8 - next] = 0; + val = StrAToI(tmp); + StrIToBase(tmp, val, 8); // now we have the same but in octal + next = 8 - StrLen(tmp); + MemMove(found + next, tmp, StrLen(tmp)); + } else { + // if val is 0, keep last 0 + if (next == 8) + next = 7; + } + + if ((8 - next) > count) + count = 8 - next; + + if (count == 0) + count = 1; + + len = maxLen - (found - ioStr) - (8 - count); + MemSet(found, next, fill); + MemMove(found, found + (8 - count), len); + + // ... and upper case + if (mod == 'x') { + while (count--) { + if (*found >='A' && *found <='F') + *found = (*found + 32); + found++; + } + } + } +} + +Int32 vsprintf(Char* s, const Char* formatStr, _Palm_va_list argParam) { + Char format[256], result[256], tmp[32]; + + Char *found, *mod, *num; + UInt32 next; + Boolean zero; + Int16 count, len; + + MemSet(format, sizeof(format), 'x'); + MemSet(result, sizeof(result), 'y'); + MemSet(tmp, sizeof(tmp), 'z'); + + StrCopy(format,formatStr); // copy actual formatStr to temp buffer + next = 0; // start of the string + + while (found = StrChr(format + next, '%')) { + mod = found + 1; + + if (*mod == '%') { // just a % ? + mod++; + + } else { + if (*mod == '+' || + *mod == '-' || + *mod == ' ' ) // skip + mod++; + + if (*mod == '0' || + *mod == '.' ) { + *mod++ = '0'; + zero = true; + } else { + zero = false; + } + + num = mod; + while ( *mod >= '0' && + *mod <= '9' ) // search format char + mod++; + + // get the numeric value + if (num < mod) { + StrNCopy(tmp, num, mod - num); + tmp[mod - num] = 0; + count = StrAToI(tmp); + } else { + count = 0; + } + + if (*mod == 'l') // already set to %...l(x) ? + mod++; + + // prepare new format +//#if !defined(PALMOS_ARM) + if (*mod == 'c') { + StrCopy(tmp, "`c`%c%c"); + + } else +//#endif + if (*mod == 'p') { + StrCopy(tmp, "%08lX"); // %x = %08X in palmos + + } else { + len = 0; + + switch (*mod) { + case 'x': + case 'X': + case 'o': + tmp[0] = '`'; + tmp[1] = (zero) ? '0' : ' '; + tmp[2] = *mod; + StrIToA(tmp + 3, count); + len += StrLen(tmp); + tmp[len++] = '`'; + tmp[len] = 0; + + if (*mod == 'o') { // set as base 10 num and convert later + *mod = 'd'; + count = 8; // force 8char + } + + break; + } + + StrNCopy(tmp + len, found, (num - found)); + len += (num - found); + + if (count) { + StrIToA(tmp + len, count); + len += StrLen(tmp + len); + } + + if (*mod == 'd' || + *mod == 'i' || + *mod == 'x' || + *mod == 'X' || + *mod == 'u' + ) { + tmp[len++] = 'l'; + } + + tmp[len + 0] = *mod; + tmp[len + 1] = 0; + } + + mod++; + MemMove(found + StrLen(tmp), mod, StrLen(mod) + 1); + StrNCopy(found, tmp, StrLen(tmp)); + mod = found + StrLen(tmp); + } + + next = (mod - format); + } + + // Copy result in a temp buffer to process last formats + StrVPrintF(result, format, argParam); +//#if !defined(PALMOS_ARM) + StrProcC_(result, 256); +//#endif + StrProcXO(result, 256, tmp); + StrCopy(s, result); + + return StrLen(s); +} + +#endif diff --git a/backends/platform/PalmOS/Src/missing/ext_stdlib.c b/backends/platform/PalmOS/Src/missing/ext_stdlib.c new file mode 100644 index 0000000000..8c8fbd50bd --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/ext_stdlib.c @@ -0,0 +1,117 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#define memNewChunkFlagAllowLarge 0x1000 +SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP) SYS_TRAP(sysTrapSysGetAppInfo); + +#ifdef PALMOS68K +long strtol(const char *s, char **endptr, int base) { + // WARNING : only base = 10 supported + long val = StrAToI(s); + + if (endptr) { + Char str[maxStrIToALen]; + StrIToA(str, val); + + if (StrNCompare(s, str, StrLen(str)) == 0) + *endptr = (char *)s + StrLen(str); + } + + return val; +} +#endif + +MemPtr __malloc(UInt32 size) { + MemPtr newP = NULL; + + if (size <= 65000) { + newP = MemPtrNew(size); + } else { + SysAppInfoPtr appInfoP; + UInt16 ownerID; + UInt16 attr; + + ownerID = ((SysAppInfoPtr)SysGetAppInfo(&appInfoP, &appInfoP))->memOwnerID; + attr = ownerID|memNewChunkFlagAllowLarge|memNewChunkFlagNonMovable; + + newP = MemChunkNew(0, size, attr); + } + + return newP; +} + +MemPtr calloc(UInt32 nelem, UInt32 elsize) { + MemPtr newP; + UInt32 size = (nelem * elsize); + + newP = malloc(size); // was MemGluePtrNew + + if (newP) + MemSet(newP,size,0); + + return newP; +} + +Err free(MemPtr memP) { + if (memP) + return MemPtrFree(memP); + return memErrInvalidParam; +} + +MemPtr realloc(MemPtr oldP, UInt32 size) { + MemPtr newP; + + if (oldP != NULL) + if (MemPtrResize(oldP, size) == 0) + return oldP; + + newP = malloc(size); // was MemPtrNew + + if (oldP!=NULL) { + MemMove(newP,oldP,MemPtrSize(oldP)); + MemPtrFree(oldP); + } + + return newP; +} + +ErrJumpBuf stdlib_errJumpBuf; +#define ERR_MAGIC 0xDADA + +void exit(Int16 status) { + EventType event; + event.eType = keyDownEvent; + + event.data.keyDown.chr = vchrLaunch; + event.data.keyDown.modifiers = commandKeyMask; +#ifdef PALMOS_ARM + SysEventAddUniqueToQueue(&event, 0, true); +#else + EvtAddUniqueEventToQueue(&event, 0, true); +#endif + + ErrLongJump(stdlib_errJumpBuf, status == 0 ? 0xDADA : status); +} diff --git a/backends/platform/PalmOS/Src/missing/ext_string.c b/backends/platform/PalmOS/Src/missing/ext_string.c new file mode 100644 index 0000000000..319017f790 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/ext_string.c @@ -0,0 +1,45 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#ifdef PALMOS_68K +void *memchr(const void *s, int c, UInt32 n) { + UInt32 chr; + for(chr = 0; chr < n;chr++,((UInt8 *)s)++) + if ( *((UInt8 *)s) == c) + return (void *)s; + + return NULL; +} + +Char *strdup(const Char *s1) { + Char* buf = (Char *)MemPtrNew(StrLen(s1)+1); + + if(buf) + StrCopy(buf, s1); + + return buf; +} +#endif diff --git a/backends/platform/PalmOS/Src/missing/ext_time.c b/backends/platform/PalmOS/Src/missing/ext_time.c new file mode 100644 index 0000000000..5de64062b0 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/ext_time.c @@ -0,0 +1,85 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +time_t time(time_t *tloc) { + // get ROM version + UInt32 romVersion; + Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + + // since 1/1/1904 12AM. + UInt32 secs = TimGetSeconds(); + + // form 1/1/1904 12AM to 1/1/1970 12AM + DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0}; + + secs -= TimDateTimeToSeconds(&Epoch); + + // DST really supported from OS v4.0 + if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) + secs -= (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60; + else + secs -= (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60; + + if (tloc) + *tloc = secs; + + return (secs); +} + + +struct tm *localtime(const time_t *timer) { + static struct tm tmDate; + DateTimeType dt; + UInt32 secs = *timer; + + // get ROM version + UInt32 romVersion; + Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + + // form 1/1/1904 12AM to 1/1/1970 12AM + DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0}; + + // timer supposed to be based on Epoch + secs += TimDateTimeToSeconds(&Epoch); + + // DST really supported from OS v4.0 + if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) + secs += (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60; + else + secs += (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60; // no sure about this one + + TimSecondsToDateTime (secs, &dt); + + tmDate.tm_sec = dt.second; + tmDate.tm_min = dt.minute; + tmDate.tm_hour = dt.hour; + tmDate.tm_mday = dt.day; + tmDate.tm_mon = dt.month - 1; + tmDate.tm_year = dt.year - 1900; + tmDate.tm_wday = dt.weekDay; + + return &tmDate; +} diff --git a/backends/platform/PalmOS/Src/missing/ext_unistd.c b/backends/platform/PalmOS/Src/missing/ext_unistd.c new file mode 100644 index 0000000000..91f2e8e3e5 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/ext_unistd.c @@ -0,0 +1,41 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +const Char *gUnistdCWD = NULL; + +// currently used only to retreive savepath +Char *getcwd(Char *buf, UInt32 size) { + Char *copy = buf; + + if (gUnistdCWD) { + if (!copy) + copy = (Char *)MemPtrNew(StrLen(gUnistdCWD)); // this may never occured + + StrCopy(copy, gUnistdCWD); + } + + return copy; +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/missing/fcntl.h b/backends/platform/PalmOS/Src/missing/fcntl.h new file mode 100644 index 0000000000..59daa2ae05 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/fcntl.h @@ -0,0 +1,42 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef FCNTL_H +#define FCNTL_H + +#define O_TEXT 0x0 /* 960827: Added this for Visual C++ compatibility. */ +#define O_RDWR 0x1 /* open the file in read/write mode */ /*- mm 980420 -*/ +#define O_RDONLY 0x2 /* open the file in read only mode */ /*- mm 980420 -*/ +#define O_WRONLY 0x4 /* open the file in write only mode */ /*- mm 980420 -*/ +#define O_APPEND 0x0100 /* open the file in append mode */ +#define O_CREAT 0x0200 /* create the file if it doesn't exist */ +#define O_EXCL 0x0400 /* if the file already exists don't create it again */ +#define O_TRUNC 0x0800 /* truncate the file after opening it */ +#define O_NRESOLVE 0x1000 /* Don't resolve any aliases */ +#define O_ALIAS 0x2000 /* Open alias file (if the file is an alias) */ +#define O_RSRC 0x4000 /* Open the resource fork */ +#define O_BINARY 0x8000 /* open the file in binary mode (default is text mode) */ +#define F_DUPFD 0x0 /* return a duplicate file descriptor */ + +#endif diff --git a/backends/platform/PalmOS/Src/missing/math.h b/backends/platform/PalmOS/Src/missing/math.h new file mode 100644 index 0000000000..eca2d9de08 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/math.h @@ -0,0 +1,38 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __MATH_H__ +#define __MATH_H__ + +#ifndef PALMOS_ARM +# include "mathlib.h" +#else +# include "matharm.h" +#endif + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/memory.h b/backends/platform/PalmOS/Src/missing/memory.h new file mode 100644 index 0000000000..f57990b19d --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/memory.h @@ -0,0 +1,25 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + #include "string.h" \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/missing/stdio.h b/backends/platform/PalmOS/Src/missing/stdio.h new file mode 100644 index 0000000000..490da720a5 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/stdio.h @@ -0,0 +1,103 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __STDIO_H__ +#define __STDIO_H__ + +#include "palmversion.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*LedProc)(Boolean show); +typedef UInt32 size_t; + +typedef struct { + FileRef fileRef; + UInt32 cacheSize, bufSize, bufPos; + UInt8 *cache; + UInt16 mode, err; +} FILE; + +#undef stdin +#undef stdout +#undef stderr + +#define stdin 0 +#define stdout (&gStdioOutput) +#define stderr (&gStdioOutput) + +#undef SEEK_SET +#undef SEEK_CUR +#undef SEEK_END + +#define SEEK_SET vfsOriginBeginning +#define SEEK_CUR vfsOriginCurrent +#define SEEK_END vfsOriginEnd + +extern FILE gStdioOutput; + +void StdioInit (UInt16 volRefNum, const Char *output); +void StdioSetLedProc (LedProc ledProc); +void StdioSetCacheSize (UInt32 s); +void StdioRelease (); + +/* missing functions in 68k MSL (some are defined in ARM) */ +#define clearerr(a) +#define fflush(a) +#define getc(a) fgetc(a) +#define vsnprintf(a,b,c,d) vsprintf(a,c,d) + +UInt16 fclose (FILE *stream); +UInt16 feof (FILE *stream); +UInt16 ferror (FILE *stream); +Char *fgets (Char *s, UInt32 n, FILE *stream); +Int16 fgetc (FILE *stream); +FILE *fopen (const Char *filename, const Char *type); +UInt32 fread (void *ptr, UInt32 size, UInt32 nitems, FILE *stream); +UInt32 fwrite (const void *ptr, UInt32 size, UInt32 nitems, FILE *stream); +Int16 fseek (FILE *stream, Int32 offset, Int32 whence); +Int32 ftell (FILE *stream); + +Int32 fprintf (FILE *stream, const Char *formatStr, ...); +Int32 printf (const Char* formatStr, ...); +Int32 sprintf (Char* s, const Char* formatStr, ...); +Int32 snprintf (Char* s, UInt32 len, const Char* formatStr, ...); +Int32 vsprintf (Char* s, const Char* formatStr, _Palm_va_list argParam); + +/* ARM MSL only */ +#ifdef PALMOS_ARM +#undef vsnprintf + +int vsnprintf (char *str, size_t size, const char *format, va_list ap); +int sscanf ( char * buffer, const char * format, ...); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/stdlib.h b/backends/platform/PalmOS/Src/missing/stdlib.h new file mode 100644 index 0000000000..8b1c959c01 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/stdlib.h @@ -0,0 +1,88 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef STDLIB_H +#define STDLIB_H + +#include "palmversion.h" + +#ifdef PALMOS_68K +#include "MemGlue.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* malloc stuff */ +#if defined(COMPILE_ZODIAC) +# define malloc MemPtrNew +#elif defined(COMPILE_OS5) && defined(PALMOS_ARM) +# define malloc __malloc +#else +# define malloc MemGluePtrNew +#endif + +/* custom exit (true exit !) */ +extern ErrJumpBuf stdlib_errJumpBuf; +#define DO_EXIT( code ) \ + if (ErrSetJump(stdlib_errJumpBuf) == 0) { code } + +/* mapped to system functions */ +#define atoi StrAToI +#define atol StrAToI +#define abs(a) ((a) < 0 ? -(a) : (a)) +#define qsort(a,b,c,d) SysQSort((a), (b), (c), (CmpFuncPtr)(&d), 0); +#define rand() SysRandom(0) +#define abort() +#define strtoul(a,b,c) ((unsigned long)strtol(a,b,c)) + +MemPtr __malloc (UInt32); +MemPtr calloc (UInt32 nelem, UInt32 elsize); +void exit (Int16 status); +Err free (MemPtr memP); +MemPtr realloc (MemPtr oldP, UInt32 size); +long strtol (const char *s, char **endptr, int base); + +/* already defined in MSL */ +void *bsearch (const void *key, const void *base, UInt32 nmemb, UInt32 size, int (*compar)(const void *, const void *)); + +/* ARM MSL only */ +#ifdef PALMOS_ARM +#undef qsort +#undef strtol +#undef strtoul + +typedef int (*_compare_function)(const void*, const void*); + +void qsort (void * table_base, UInt32 num_members, UInt32 member_size, _compare_function compare_members); +long int strtol (const char *nptr, char **endptr, int base); +unsigned long int strtoul (const char *nptr, char **endptr,int base); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/string.h b/backends/platform/PalmOS/Src/missing/string.h new file mode 100644 index 0000000000..bb250dfe9b --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/string.h @@ -0,0 +1,66 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef PALM_STRING_H +#define PALM_STRING_H + +#include "palmversion.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* mapped to system functions */ +#define memcmp MemCmp +#define memcpy MemMove +#define memmove MemMove +#define memset(a,b,c) MemSet(a,c,b) +#define strcat StrCat +#define strncat StrNCat +#define strchr StrChr +#define strcmp StrCompare +#define strcpy StrCopy +#define strncpy StrNCopy +#define stricmp StrCaselessCompare +#define strnicmp StrNCaselessCompare +#define strlen StrLen +#define strncmp StrNCompare +#define strstr StrStr + +/* missing functions in 68k MSL */ +void *memchr (const void *s, int c, UInt32 n); +Char *strdup (const Char *strSource); + +/* already defined in MSL */ +Char *strtok (Char *str, const Char *sep); +Char *strrchr (const Char *s, int c); +Char *strpbrk (const Char *s1, const Char *s2); +UInt32 strspn (const Char *s1, const Char *s2); +UInt32 strcspn (const Char *s1, const Char *s2); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/sys/stat.h b/backends/platform/PalmOS/Src/missing/sys/stat.h new file mode 100644 index 0000000000..da84fa5f6b --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/sys/stat.h @@ -0,0 +1 @@ +/* nothing */ diff --git a/backends/platform/PalmOS/Src/missing/time.h b/backends/platform/PalmOS/Src/missing/time.h new file mode 100644 index 0000000000..3de16f4517 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/time.h @@ -0,0 +1,55 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __TIME_H__ +#define __TIME_H__ + +#include "palmversion.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef UInt32 time_t; + +struct tm { + Int16 tm_sec; // seconds [0,61] + Int16 tm_min; // minutes [0,59] + Int16 tm_hour; // hour [0,23] + Int16 tm_mday; // day of month [1,31] + Int16 tm_mon; // month of year [0,11] + Int16 tm_year; // years since 1900 + Int16 tm_wday; // day of week [0,6] (Sunday = 0) + Int16 tm_yday; // day of year [0,365] + Int16 tm_isdst; // daylight savings flag +}; + +time_t time(time_t *tloc); +struct tm *localtime(const time_t *timer); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/missing/unistd.h b/backends/platform/PalmOS/Src/missing/unistd.h new file mode 100644 index 0000000000..400b0e2c39 --- /dev/null +++ b/backends/platform/PalmOS/Src/missing/unistd.h @@ -0,0 +1,42 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __UNISTD_H__ +#define __UNISTD_H__ + +#include "palmversion.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const Char *gUnistdCWD; + +Char *getcwd(Char *buf, UInt32 size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/modules.cpp b/backends/platform/PalmOS/Src/modules.cpp new file mode 100644 index 0000000000..73c7c117bb --- /dev/null +++ b/backends/platform/PalmOS/Src/modules.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include + +#include "palmdefs.h" +#include "args.h" +#include "globals.h" +#include "modules.h" +#include "extend.h" +#include "features.h" + +#include "rumble.h" +#include "init_mathlib.h" +#include "init_pa1lib.h" +#include "init_palmos.h" +#include "init_stuffs.h" +#include "init_sony.h" +#include "init_golcd.h" + +#ifndef DISABLE_LIGHTSPEED +#include "lightspeed_public.h" +#endif + +GlobalsDataPtr gVars; + +#ifdef PALMOS_NATIVE + +#include "endianutils.h" +#include + +#ifdef COMPILE_ZODIAC +# include +# include +#else +# include +#endif + +void run(int argc, char *argv[]) { + // init args + ArgsExportInit(argv, argc, true); + + // init system + PalmHRInit(16); + PalmInit(HWR_GET()); + void *__ptr = StuffsForceVG(); + + gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth); + + // export global struct to ARM + VARS_EXPORT(); + DO_VARS(_4B, 32, 0); + DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32))); + FtrSet(appFileCreator, ftrVars , (UInt32)gVars); + + // run the module +#ifdef COMPILE_ZODIAC + NativeFuncType *entry; + TwLoadModule(0, 0, 0, 1, twLoadFlagTNA|twLoadFlagQuickRun, &entry); +#else + UInt32 glue; + FtrGet(twFtrCreator, twFtrAPIGlue, &glue); + + PnoDescriptor pno; + PnoLoadFromResources(&pno, 'ARMC', 1, appFileCreator, 1); + PnoCall(&pno, (void*)glue); + PnoUnload(&pno); +#endif + + // reset globals + DO_VARS(_4B, 32, 0); + DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32))); + + // release + StuffsReleaseVG(__ptr); + PalmRelease(HWR_GET()); + PalmHRRelease(); + + // free args + ArgsExportRelease(true); + ArgsFree(argv); + + // release global struct + FtrUnregister(appFileCreator, ftrVars); + FtrUnregister(appFileCreator, ftrStack); + MemPtrFree(gVars); + + // reset the palette if needed + WinPalette(winPaletteSetToDefault, 0, 256, NULL); +} + +#else + +#include "stdafx.h" +#include "base/main.h" +#include "be_zodiac.h" +#include "be_os5ex.h" + +static void palm_main(int argc, char **argvP) { +#ifdef COMPILE_OS5 + if (gVars->advancedMode) + g_system = new OSystem_PalmOS5Ex(); + else + g_system = new OSystem_PalmOS5(); +#elif defined(COMPILE_ZODIAC) + g_system = new OSystem_PalmZodiac(); +#else + #error "No target defined." +#endif + + assert(g_system); + + // Invoke the actual ScummVM main entry point: + scummvm_main(argc, argvP); + + g_system->quit(); // TODO: Consider removing / replacing this! +} + +void run(int argc, char *argv[]) { + + MathlibInit(); + gVars->HRrefNum = SonyHRInit(8); + if (gVars->HRrefNum == sysInvalidRefNum) + PalmHRInit(8); + gVars->slkRefNum= SilkInit(&(gVars->slkVersion)); + gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth); + + // create file for printf, warnings, etc... + StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log"); + if (gVars->indicator.showLED) StdioSetLedProc(DrawStatus); + StdioSetCacheSize(gVars->VFS.cacheSize); + gUnistdCWD = SCUMMVM_SAVEPATH; + + // init hardware + if (HWR_INIT(INIT_GOLCD)) GoLCDInit(&gGoLcdH); + if (HWR_INIT(INIT_PA1LIB)) Pa1libInit(gVars->palmVolume); + if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit(); + PalmInit(HWR_GET()); + + if (!gVars->vibrator) + HWR_RST(INIT_VIBRATOR); + + GlbOpen(); + // be sure to have a VG + void *__ptr = StuffsForceVG(); + + DO_EXIT( palm_main(argc, argv); ) + + // be sure to release features memory + FREE_FTR(ftrBufferOverlay) + FREE_FTR(ftrBufferBackup) + FREE_FTR(ftrBufferHotSwap) + + StuffsReleaseVG(__ptr); + GlbClose(); + + PalmRelease(HWR_GET()); + if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease(); + if (HWR_INIT(INIT_PA1LIB)) Pa1libRelease(); + if (HWR_INIT(INIT_GOLCD)) GoLCDRelease(gGoLcdH); + + // close log file + StdioRelease(); + + PalmHRRelease(); + SonyHRRelease(gVars->HRrefNum); + SilkRelease(gVars->slkRefNum); + MathlibRelease(); + + MemPtrFree(gVars); + WinPalette(winPaletteSetToDefault, 0, 256, NULL); +// ArgsFree(argvP); // called in main(...) +} +#endif + +static UInt32 ModulesPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) +{ + UInt32 result = 0; + + switch (cmd) { + case sysAppLaunchCustomEngineGetInfo: { +#ifdef PALMOS_NATIVE + result = GET_MODEARM; +#else +# if !defined(DISABLE_SCUMM) || \ + !defined(DISABLE_SIMON) || \ + !defined(DISABLE_SWORD1) + result = GET_DATACOMMON|GET_DATAENGINE|GET_MODE68K; +# else + result = GET_DATACOMMON|GET_MODE68K; +# endif +#endif + break; + } + + case sysAppLaunchCmdNormalLaunch: { + if (cmdPBP) { + Char **argvP; + UInt16 cardNo; + LocalID dbID; + + LaunchParamType *lp = (LaunchParamType *)cmdPBP; + + gVars = lp->gVars; + argvP = lp->args.argv; + + // get the free memory on the dynamic heap + PalmGetMemory(0,0,0, &(gVars->startupMemory)); + +#ifndef DISABLE_LIGHTSPEED + switch (lp->lightspeed) { + case 0: + LS_SetCPUSpeedHigh(); + break; + case 1: + LS_SetCPUSpeedNormal(); + break; + case 2: + LS_SetCPUSpeedLow(); + break; + } +#endif + // MemPtrSetOwner(gVars, ownerID); + // ArgsSetOwner(argvP, ownerID); // will be freed by main(...) + // MemPtrFree(lp); // will be freed by the system on exit + + run(lp->args.argc, argvP); + + cardNo = 0; + dbID = DmFindDatabase(0, "ScummVM"); + if (dbID) { + if (lp->exitLauncher) + SysUIAppSwitch(cardNo, dbID, sysAppLaunchCustomEngineDelete,0); + else + SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch,0); + } + } + break; + } + + default: + break; + + } + + return result; +} + +UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + return ModulesPalmMain(cmd, cmdPBP, launchFlags); +} diff --git a/backends/platform/PalmOS/Src/modules.h b/backends/platform/PalmOS/Src/modules.h new file mode 100644 index 0000000000..d172ad11c2 --- /dev/null +++ b/backends/platform/PalmOS/Src/modules.h @@ -0,0 +1,22 @@ +#ifndef MODULES_H +#define MODULES_H + +#include "globals.h" + +#define sysAppLaunchCode_SVMRunEngine (sysAppLaunchCmdCustomBase + 0) + +void ModDelete(); + +typedef struct { + UInt8 lightspeed; + Boolean exitLauncher; + + struct { + UInt8 argc; + Char **argv; + } args; + + GlobalsDataPtr gVars; +} LaunchParamType; + +#endif diff --git a/backends/platform/PalmOS/Src/native/oscalls.cpp b/backends/platform/PalmOS/Src/native/oscalls.cpp new file mode 100644 index 0000000000..4520d81c20 --- /dev/null +++ b/backends/platform/PalmOS/Src/native/oscalls.cpp @@ -0,0 +1,47 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include "pace.h" + +GlobalsType global; + + +PACE_CLASS_WRAPPER(Err) + StatShow_68k(void) { + PACE_PIN_EXEC_NP(pinStatShow, Err) +} + +PACE_CLASS_WRAPPER(Err) + StatHide_68k(void) { + PACE_PIN_EXEC_NP(pinStatHide, Err) +} + +PACE_CLASS_WRAPPER(Err) + PINSetInputAreaState_68k(UInt16 state) { + PACE_PARAMS_INIT() + PACE_PARAMS_ADD16(state) + PACE_PARAMS_END() + PACE_PIN_EXEC(pinPINSetInputAreaState, Err) +} diff --git a/backends/platform/PalmOS/Src/native/oscalls.h b/backends/platform/PalmOS/Src/native/oscalls.h new file mode 100644 index 0000000000..ae8f989337 --- /dev/null +++ b/backends/platform/PalmOS/Src/native/oscalls.h @@ -0,0 +1,40 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef _OSCALLS_H_ +#define _OSCALLS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +Err StatShow_68k(); +Err StatHide_68k(); +Err PINSetInputAreaState_68k(UInt16 state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/native/pace.h b/backends/platform/PalmOS/Src/native/pace.h new file mode 100644 index 0000000000..a617e8a274 --- /dev/null +++ b/backends/platform/PalmOS/Src/native/pace.h @@ -0,0 +1,102 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef PACE_H +#define PACE_H + +#include +//#include "endianutils.h" + +// local definition of the emulation state structure +typedef struct { + UInt32 instr; + UInt32 regData[8]; + UInt32 regAddress[8]; + UInt32 regPC; +} EmulStateType; + +typedef struct { + EmulStateType *emulStateP; + Call68KFuncType *call68KFuncP; +} GlobalsType; + +extern GlobalsType global; + +// TODO : check this, already defined in ARMlet_Runtime +//extern EmulStateType *g_emulStateP; +//extern Call68KFuncType *g_call68KFuncP; +#define g_emulStateP global.emulStateP +#define g_call68KFuncP global.call68KFuncP + + +#ifdef __cplusplus +# define PACE_CLASS_WRAPPER(rv) extern "C" rv +#else +# define PACE_CLASS_WRAPPER(rv) rv +#endif +#define PACE_CALLBACK_PTR g_call68KFuncP +#define PACE_EMULSTATE g_emulStateP + +#define ALIGN_4BYTE(addr) (((UInt32)(addr) + 3) & 0xFFFFFFFC) + +/****** TAKEN FROM PACEInteface.cpp (ARMlet_Runtime) ******/ +// local definition of the emulation state structure + +#define PACE_PARAMS_INIT() \ + UInt8 params[] = { + +#define PACE_PARAMS_ADD8(param) \ + (UInt8)(param), \ + 0, + +#define PACE_PARAMS_ADD16(param) \ + (UInt8)((UInt16)(param) >> 8), \ + (UInt8)(param), + +#define PACE_PARAMS_ADD32(param) \ + (UInt8)((UInt32)(param) >> 24), \ + (UInt8)((UInt32)(param) >> 16), \ + (UInt8)((UInt32)(param) >> 8), \ + (UInt8)(param), + +#define PACE_PARAMS_END() \ + }; + +// PIN +#define PACE_PIN_EXEC_NP(pinTrap, returnType) \ + PACE_EMULSTATE->regData[2] = pinTrap; \ + return ((returnType)((PACE_CALLBACK_PTR)( \ + static_cast(PACE_EMULSTATE), \ + PceNativeTrapNo(sysTrapPinsDispatch), \ + NULL, 0))); + +#define PACE_PIN_EXEC(pinTrap, returnType) \ + PACE_EMULSTATE->regData[2] = pinTrap; \ + return ((returnType)((PACE_CALLBACK_PTR)( \ + static_cast(PACE_EMULSTATE), \ + PceNativeTrapNo(sysTrapPinsDispatch), \ + ¶ms, \ + sizeof(params)))); + +#endif \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/native/pnoARM.c b/backends/platform/PalmOS/Src/native/pnoARM.c new file mode 100644 index 0000000000..6c7954fcb5 --- /dev/null +++ b/backends/platform/PalmOS/Src/native/pnoARM.c @@ -0,0 +1,80 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_OS5 + +//#include +#include +#include +#include "pace.h" + +// Linker still looks for ARMlet_Main as entry point, but the +// "ARMlet" name is now officially discouraged. Compare an +// contrast to "PilotMain" for 68K applications. +#define PNO_Main ARMlet_Main + +#ifdef COMPILE_ZODIAC + const void* twEmulState; + Call68KFuncType* twCall68KFunc; +#endif +struct TwGlue* twGlue; + +unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) { +#ifdef COMPILE_ZODIAC + twEmulState = emulStateP; + twCall68KFunc = call68KFuncP; +#else + global.emulStateP = (EmulStateType *)emulStateP; + global.call68KFuncP = call68KFuncP; +#endif + twGlue = (struct TwGlue*) userData68KP; + return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); +} + + // + // The following functions provide malloc/free support to Metrowerks + // Standard Library (MSL). This feature requires the MSL library be + // built with _MSL_OS_DIRECT_MALLOC enabled. + // +void* +__sys_alloc(UInt32 size) +{ + void * ptr = malloc(size); + ErrFatalDisplayIf(ptr == NULL, "out of memory"); + return ptr; +} + +void +__sys_free(void* ptr) +{ + (void) MemPtrFree(ptr); +} + +UInt32 +__sys_pointer_size(void* ptr) +{ + return (UInt32) MemPtrSize(ptr); +} + +#endif diff --git a/backends/platform/PalmOS/Src/native/pnoStartup.c b/backends/platform/PalmOS/Src/native/pnoStartup.c new file mode 100644 index 0000000000..dcfb56d002 --- /dev/null +++ b/backends/platform/PalmOS/Src/native/pnoStartup.c @@ -0,0 +1,27 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_OS5 +# include "(Source)/ARMlet_Startup.c" +#endif diff --git a/backends/platform/PalmOS/Src/native/zodiacARM.cpp b/backends/platform/PalmOS/Src/native/zodiacARM.cpp new file mode 100644 index 0000000000..9b0db9122d --- /dev/null +++ b/backends/platform/PalmOS/Src/native/zodiacARM.cpp @@ -0,0 +1,146 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include + +#include "globals.h" +#include "extend.h" +#include "args.h" +#include "palmdefs.h" + +#include "rumble.h" + + +#include +//#define DEBUG_ARM + +#include "stdafx.h" +#include "base/main.h" +#include "be_zodiac.h" +#include "be_os5ex.h" + +GlobalsDataType g_vars; +GlobalsDataPtr gVars = &g_vars; +UInt32 g_stackSize; + +static void palm_main(int argc, char **argvP) { +#ifdef COMPILE_OS5 + if (gVars->advancedMode) + g_system = new OSystem_PalmOS5Ex(); + else + g_system = new OSystem_PalmOS5(); +#elif defined(COMPILE_ZODIAC) + g_system = new OSystem_PalmZodiac(); +#else + #error "No target defined." +#endif + + assert(g_system); + + scummvm_main(argc, argvP); + + g_system->quit(); // TODO: Consider removing / replacing this! +} + +static void Go() { + void *tmp; + char **argvP; + int argc; + +#ifdef DEBUG_ARM +// Tell the debugger we want to enable full debugging + UInt32 flags = AdnDebugEnableGet(); + flags |= kAdnEnableMasterSwitch | kAdnEnableFullDebugging; + AdnDebugEnableSet(flags); +// Tell the debugger where our code lives in memory: + AdnDebugNativeRegister(sysFileTApplication, appFileCreator, 'ARMC', 1); +#endif + + // get global struct + FtrGet(appFileCreator, ftrVars, (UInt32 *)&tmp); + MemMove(gVars, tmp, sizeof(GlobalsDataType)); + + // init STDIO + StdioSetCacheSize(0); + StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log"); + if (gVars->indicator.showLED) + StdioSetLedProc(DrawStatus); + StdioSetCacheSize(gVars->VFS.cacheSize); + gUnistdCWD = SCUMMVM_SAVEPATH; + + // get args + FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP); + FtrGet(appFileCreator, ftrArgsCount, (UInt32 *)&argc); + + // init system + WinSetDrawWindow(WinGetDisplayWindow()); + if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit(); + + // run ... + DO_EXIT ( palm_main(argc, argvP); ) + + // release + if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease(); + StdioRelease(); + +#ifdef DEBUG_ARM + AdnDebugNativeUnregister(); +#endif +} + +/* Stack size */ + +Int8 *g_newStack, *g_newStackPos; +void *g_oldStack; + +static asm void *StkSwap(void *newStack ,void *dummy) { + mov r1, r13 + mov r13, r0 + mov r0, r1 + bx lr +} + +extern UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + if (cmd == sysAppLaunchCmdNormalLaunch) { + FtrGet(appFileCreator, ftrStack, &g_stackSize); + if (!g_stackSize) + g_stackSize = 32 * 1024; + + g_newStack = (Int8 *)malloc(g_stackSize + 8); + g_newStackPos = (g_newStack + g_stackSize); + g_newStackPos -= ((UInt32)g_newStackPos & 7); + + g_oldStack = StkSwap(g_newStackPos, 0); + + Go(); + + StkSwap(g_oldStack, 0); + free(g_newStack); + } + + return 0; +} + diff --git a/backends/platform/PalmOS/Src/native/zodiacStartup.cpp b/backends/platform/PalmOS/Src/native/zodiacStartup.cpp new file mode 100644 index 0000000000..64ac89ab5b --- /dev/null +++ b/backends/platform/PalmOS/Src/native/zodiacStartup.cpp @@ -0,0 +1,173 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_ZODIAC + +#include + +#ifndef __PALMOS_ARMLET__ +#error "__PALMOS_ARMLET__ is not defined!!!" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This variable holds the Tapwave Native Application interface + * dispatch table. General ARM API calls will go through this table. + */ +struct TwGlue* twGlue; +const void* twEmulState; +Call68KFuncType* twCall68KFunc; + +#ifdef __MWERKS__ + +#if __PALMOS_ARMLET__ < 0x120 +#error "You must use CodeWarrior for Palm OS 9.3 or later!!!" +#endif + + +UInt32 __ARMlet_Startup__(const void*, void*, Call68KFuncType*); + +/* + * These symbols aren't real, but are linker-generated symbols that + * mark the start and end of the various data sections. + */ +extern long __DataStart__[]; +extern long __RODataStart__[]; +extern long __BSSStart__[]; +extern long __BSSEnd__[]; +extern long __CodeRelocStart__[]; +extern long __CodeRelocEnd__[]; +extern long __DataRelocStart__[]; +extern long __DataRelocEnd__[]; + +/* + * This function performs relocation for Tapwave Native Application. + */ +static void relocate(void) +{ + // this symbol points to the very beginning of current application + long base = (long) __ARMlet_Startup__; + long *cur, *end; + + // handle code-to-data relocation + cur = __CodeRelocStart__; + end = __CodeRelocEnd__; + for (; cur < end; cur++) { + *(long*)(base + *cur) += base; + } + + // handle data-to-data relocation + cur = __DataRelocStart__; + end = __DataRelocEnd__; + for (; cur < end; cur++) { + *(long*)(base + *cur) += base; + } +} + +/* + * The following functions provide malloc/free support to Metrowerks + * Standard Library (MSL). This feature requires the MSL library be + * built with _MSL_OS_DIRECT_MALLOC enabled. + */ +void* +__sys_alloc(size_t size) +{ + void * ptr = MemPtrNew(size); + ErrFatalDisplayIf(ptr == NULL, "out of memory"); + return ptr; +} + +void +__sys_free(void* ptr) +{ + (void) MemPtrFree(ptr); +} + +size_t +__sys_pointer_size(void* ptr) +{ + return (size_t) MemPtrSize(ptr); +} + +/* + * This is the real entrypoint for Tapwave Native Application. It + * depends on various CodeWarrior 9.2 compiler/linker/runtime features. + */ +static SYSTEM_CALLBACK UInt32 +Startup(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) +{ + if (emulStateP) { + twEmulState = emulStateP; + twCall68KFunc = call68KFuncP; + // COMMENT: normal pace native object launch + return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); + } else { + // Setup TNA interface dispatch table + twGlue = (struct TwGlue*) userData68KP; + + // OPTIONAL: relocate data segment + relocate(); + + // OPTIONAL: initialize the floating-point library + // _fp_init(); + + return 0; + } +} + +#pragma PIC off +asm UInt32 +__ARMlet_Startup__(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) +{ + b Startup // 0 forwarding call + nop // 4 + nop // 8 + nop // 12 + nop // 16 + nop // 20 + nop // 24 + dcd 'TWNA' // 28 Tapwave Native Application + dcd 1 // 32 version 1 + dcd 'cdwr' // 36 make this section the same as the __ARMlet_Startup__ + dcd __DataStart__ // 40 used by CodeWarrior 9.2 + dcd __RODataStart__ // 44 + dcd __BSSStart__ // 48 + dcd __BSSEnd__ // 52 + dcd __CodeRelocStart__ // 56 + dcd __CodeRelocEnd__ // 60 + dcd __DataRelocStart__ // 64 + dcd __DataRelocEnd__ // 68 +} +#pragma PIC reset + +#endif // __MWERKS__ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/os5_event.cpp b/backends/platform/PalmOS/Src/os5_event.cpp new file mode 100644 index 0000000000..99e5867450 --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_event.cpp @@ -0,0 +1,86 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" + +void OSystem_PalmOS5::get_coordinates(EventPtr ev, Coord &x, Coord &y) { + Boolean dummy; + EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy); + + x = (ev->screenX - _screenOffset.x); + y = (ev->screenY - _screenOffset.y); + + if (_stretched) { + if (OPTIONS_TST(kOptModeLandscape)) { + x = (x * 2 / 3); + y = (y * 2 / 3); + } else { + y = ((ev->screenX - _screenOffset.y) * 2) / 3; + x = 320 - ((ev->screenY - _screenOffset.x) * 2) / 3 - 1; + } + } +} + +bool OSystem_PalmOS5::check_event(Event &event, EventPtr ev) { + if (ev->eType == keyDownEvent) { + switch (ev->data.keyDown.chr) { + case vchrHard4: + _lastKey = kKeyNone; + event.type = EVENT_RBUTTONDOWN; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; + } + + if (_keyMouse.hasMore) { + switch (ev->data.keyDown.chr) { + // hot swap gfx + case vchrHard1: + if (OPTIONS_TST(kOptCollapsible)) + hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE); + return false; // not a key + + // ESC key + case vchrHard2: + _lastKey = kKeyNone; + event.type = EVENT_KEYDOWN; + event.kbd.keycode = 27; + event.kbd.ascii = 27; + event.kbd.flags = 0; + return true; + + // F5 = menu + case vchrHard3: + _lastKey = kKeyNone; + event.type = EVENT_KEYDOWN; + event.kbd.keycode = 319; + event.kbd.ascii = 319; + event.kbd.flags = 0; + return true; + } + } + } + + return false; +} diff --git a/backends/platform/PalmOS/Src/os5_gfx.cpp b/backends/platform/PalmOS/Src/os5_gfx.cpp new file mode 100644 index 0000000000..2e2ec68454 --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_gfx.cpp @@ -0,0 +1,317 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" +#include +#include + +#ifdef PALMOS_ARM +#include +#include +#endif + +#include "oscalls.h" + +void OSystem_PalmOS5::int_initSize(uint w, uint h) { +} + +WinHandle OSystem_PalmOS5::alloc_screen(Coord w, Coord h) { + Err e; + WinHandle winH; + UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); + winH = WinCreateOffscreenWindow(w, h, nativeFormat, &e); + WinSetCoordinateSystem(old); + + return winH; +} + +void OSystem_PalmOS5::load_gfx_mode() { + Err e; + + if (_gfxLoaded) + return; + _gfxLoaded = true; + + + _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit + _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H); + _offScreenP = (byte *)malloc(_screenWidth * _screenHeight); + + UInt32 depth = 16; + WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); + clearScreen(); + + gVars->indicator.on = RGBToColor(0,255,0); + gVars->indicator.off = RGBToColor(0,0,0); + + _overlayH = alloc_screen(_screenWidth, _screenHeight); + _screenH = WinGetDisplayWindow(); + + _overlayP = (OverlayColor *)(BmpGetBits(WinGetBitmap(_overlayH))); + _screenP = (byte *)(BmpGetBits(WinGetBitmap(_screenH))); + + MemSet(_offScreenP, _screenWidth * _screenHeight, 0); + MemSet(_nativePal, sizeof(_nativePal), 0); + MemSet(_currentPalette, sizeof(_currentPalette), 0); + + _isSwitchable = (_screenWidth == 320 && _screenHeight == 200 && OPTIONS_TST(kOptCollapsible)); + if (_screenWidth > 320 || _screenHeight > 200 || !_isSwitchable) + _mode = GFX_NORMAL; + + hotswap_gfx_mode(_mode); +} + +void OSystem_PalmOS5::hotswap_gfx_mode(int mode) { + Err e; + UInt32 device; + + if (_mode != GFX_NORMAL && !_isSwitchable) + return; + + if (_workScreenH) + WinDeleteWindow(_workScreenH, false); + _workScreenH = NULL; + +#ifdef PALMOS_ARM + Boolean isT3 = false; + if (!FtrGet(sysFileCSystem, sysFtrNumOEMDeviceID, &device)) + isT3 = (device == kPalmOneDeviceIDTungstenT3); +#endif + + // prevent bad DIA redraw (Stat part) + if (mode == GFX_NORMAL) { + // only if this API is available + if (_stretched && OPTIONS_TST(kOptCollapsible)) { +#ifdef PALMOS_ARM + if (isT3) { + //AiaSetInputAreaState(aiaInputAreaShow); + StatShow_68k(); + PINSetInputAreaState_68k(pinInputAreaOpen); + } else +#endif + { + StatShow(); + PINSetInputAreaState(pinInputAreaOpen); + } + } + + _redawOSD = true; + _stretched = false; + OPTIONS_RST(kOptDisableOnScrDisp); + _screenDest.w = _screenWidth; + _screenDest.h = _screenHeight; + + if (_wasRotated) { + // restore controls rotation + SWAP(_keyMouse.bitLeft, _keyMouse.bitRight); + SWAP(_keyMouse.bitRight, _keyMouse.bitDown); + SWAP(_keyMouse.bitLeft, _keyMouse.bitUp); + _wasRotated = false; + } + + _workScreenH = alloc_screen(_screenWidth, _screenHeight); + _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); + MemSet(_workScreenP, _screenWidth * _screenHeight * 2, 0); + + _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2; + _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2; + + _render = &OSystem_PalmOS5::render_1x; + + } else { +#ifdef PALMOS_ARM + // T3 DIA library is 68k base, there is no possible native call + if (isT3) { + //AiaSetInputAreaState(aiaInputAreaFullScreen); + PINSetInputAreaState_68k(pinInputAreaClosed); + StatHide_68k(); + } else +#endif + { + PINSetInputAreaState(pinInputAreaClosed); + StatHide(); + } + + _redawOSD = false; + _stretched = true; + OPTIONS_SET(kOptDisableOnScrDisp); + + if (OPTIONS_TST(kOptModeLandscape)) { + _screenDest.w = 480; + _screenDest.h = 300; + _workScreenH = alloc_screen(480, 300); + _render = &OSystem_PalmOS5::render_landscape; + + } else { + _screenDest.w = 300; + _screenDest.h = 480; + _workScreenH = alloc_screen(300, 480); + _render = &OSystem_PalmOS5::render_portrait; + // This mode need a controls rotation + SWAP(_keyMouse.bitLeft, _keyMouse.bitUp); + SWAP(_keyMouse.bitRight, _keyMouse.bitDown); + SWAP(_keyMouse.bitLeft, _keyMouse.bitRight); + _wasRotated = true; + } + + _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); + MemSet(_workScreenP, 480 * 300 * 2, 0); + + _screenOffset.x = 0; + _screenOffset.y = 10; + } + + _mode = mode; + clearScreen(); +} + +void OSystem_PalmOS5::unload_gfx_mode() { + if (!_gfxLoaded) + return; + _gfxLoaded = false; + + MemPtrFree(_mouseBackupP); + MemPtrFree(_mouseDataP); + free(_offScreenP); + + if (_workScreenH) + WinDeleteWindow(_workScreenH, false); + if (_overlayH) + WinDeleteWindow(_overlayH, false); + + _workScreenH = NULL; + _overlayH = NULL; + + UInt32 depth = 8; + WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); + clearScreen(); + + WinSetCoordinateSystem(_sysOldCoord); +} + +void OSystem_PalmOS5::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { + // Clip the coordinates + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + + if (w > _screenWidth - x) + w = _screenWidth - x; + + if (h > _screenHeight - y) + h = _screenHeight - y; + + if (w <= 0 || h <= 0) + return; + + byte *dst = _offScreenP + y * _screenWidth + x; + + if (w == pitch && w == _screenWidth) { + MemMove(dst, buf, w * h); + } else { + do { + MemMove(dst, buf, w); + dst += _screenWidth; + buf += pitch; + } while (--h); + } +} + +void OSystem_PalmOS5::int_updateScreen() { + RectangleType r; + PointType p; + + draw_mouse(); + ((this)->*(_render))(r, p); + + _sysOldCoord = WinSetCoordinateSystem(kCoordinatesNative); + WinCopyRectangle(_workScreenH, _screenH, &r, p.x, p.y, winPaint); + WinSetCoordinateSystem(_sysOldCoord); + undraw_mouse(); +} + +void OSystem_PalmOS5::clearScreen() { + RGBColorType rgb = { 0,0,0,0 }; + WinSetDrawWindow(WinGetDisplayWindow()); + WinSetBackColorRGB(&rgb, 0); + WinEraseWindow(); +} + +void OSystem_PalmOS5::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { + _nativePal[index] = gfxMakeDisplayRGB( r, g, b); +} + +void OSystem_PalmOS5::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { + if (_mode != GFX_NORMAL) + return; +// MemHandle hTemp = DmGetResource(bitmapRsc, id); + MemHandle hTemp = DmGetResource('abmp', id + 100); + + if (hTemp) { + RGBColorType oldRGB; + static const RGBColorType pal[4] = { + {0,0,255,0}, + {0,255,255,0}, + {0,255,0,0}, + {0,0,0,0} + }; + + BitmapType *bmTemp; + bmTemp = (BitmapType *)MemHandleLock(hTemp); + + Coord w, h; + BmpGetDimensions(bmTemp, &w, &h, 0); + + PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; + RectangleType c, r = { dst.x, dst.y, w, h }; + + UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); + WinSetDrawWindow(_screenH); + WinGetClip(&c); + WinResetClip(); + + if (show) { + WinSetForeColorRGB(&pal[3], &oldRGB); + WinSetBackColorRGB(&pal[color], &oldRGB); + WinDrawBitmap(bmTemp, dst.x, dst.y); + } else { + WinSetBackColorRGB(&pal[3], &oldRGB); + WinFillRectangle(&r, 0); + } + + WinSetClip(&c); + WinSetCoordinateSystem(old); + + MemPtrUnlock(bmTemp); + DmReleaseResource(hTemp); + } +} diff --git a/backends/platform/PalmOS/Src/os5_mouse.cpp b/backends/platform/PalmOS/Src/os5_mouse.cpp new file mode 100644 index 0000000000..363658e47c --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_mouse.cpp @@ -0,0 +1,175 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" + +void OSystem_PalmOS5::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { + if (w == 0 || h == 0) + return; + + _mouseCurState.w = w; + _mouseCurState.h = h; + + _mouseHotspotX = hotspotX; + _mouseHotspotY = hotspotY; + + _mouseKeyColor = keycolor; + + // copy new cursor + byte *dst = _mouseDataP; + while (h--) { + memcpy(dst, buf, w); + dst += MAX_MOUSE_W; + buf += w; + } +} + +void OSystem_PalmOS5::draw_mouse() { + if (_mouseDrawn || !_mouseVisible) + return; + + byte *src = _mouseDataP; // Image representing the mouse + byte color; + int width; + + _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y; + + int x = _mouseCurState.x - _mouseHotspotX; + int y = _mouseCurState.y - _mouseHotspotY; + int w = _mouseCurState.w; + int h = _mouseCurState.h; + + int draw_x = x; + int draw_y = y; + + // clip the mouse rect + if (x < 0) { + w += x; + src -= x; + x = 0; + } + if (y < 0) { + h += y; + src -= y * MAX_MOUSE_W; + y = 0; + } + if (w > _screenWidth - x) + w = _screenWidth - x; + if (h > _screenHeight - y) + h = _screenHeight - y; + + // Quick check to see if anything has to be drawn at all + if (w <= 0 || h <= 0) + return; + + // Store the bounding box so that undraw mouse can restore the area the + // mouse currently covers to its original content. + _mouseOldState.x = x; + _mouseOldState.y = y; + _mouseOldState.w = w; + _mouseOldState.h = h; + + // Quick check to see if anything has to be drawn at all + if (w <= 0 || h <= 0) + return; + + // Store the bounding box so that undraw mouse can restore the area the + // mouse currently covers to its original content. + _mouseOldState.x = x; + _mouseOldState.y = y; + _mouseOldState.w = w; + _mouseOldState.h = h; + + // Backup the covered area draw the mouse cursor + if (_overlayVisible) { + int16 *bak = (int16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse + int16 *dst = _overlayP + y * _screenWidth + x; + + do { + width = w; + do { + *bak++ = *dst; + color = *src++; + if (color != _mouseKeyColor) // transparent, don't draw + *dst = _nativePal[color]; + dst++; + } while (--width); + + src += MAX_MOUSE_W - w; + bak += MAX_MOUSE_W - w; + dst += _screenWidth - w; + } while (--h); + + } else { + byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse + byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into + + do { + width = w; + do { + *bak++ = *dst; + color = *src++; + if (color != _mouseKeyColor) // transparent, don't draw + *dst = color; + dst++; + } while (--width); + + src += MAX_MOUSE_W - w; + bak += MAX_MOUSE_W - w; + dst += _screenWidth - w; + } while (--h); + } + + _mouseDrawn = true; +} + +void OSystem_PalmOS5::undraw_mouse() { + if (!_mouseDrawn) + return; + + int h = _mouseOldState.h; + // No need to do clipping here, since draw_mouse() did that already + if (_overlayVisible) { + int16 *bak = (int16 *)_mouseBackupP; + int16 *dst = _overlayP + _mouseOldState.y * _screenWidth + _mouseOldState.x; + + do { + memcpy(dst, bak, _mouseOldState.w * 2); + bak += MAX_MOUSE_W; + dst += _screenWidth; + } while (--h); + + } else { + byte *dst, *bak = _mouseBackupP; + dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x; + + do { + memcpy(dst, bak, _mouseOldState.w); + bak += MAX_MOUSE_W; + dst += _screenWidth; + } while (--h); + } + + _mouseDrawn = false; +} diff --git a/backends/platform/PalmOS/Src/os5_overlay.cpp b/backends/platform/PalmOS/Src/os5_overlay.cpp new file mode 100644 index 0000000000..93c6123cef --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_overlay.cpp @@ -0,0 +1,88 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" +#include "common/endian.h" + +void OSystem_PalmOS5::showOverlay() { + // hide fight indicator + draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, false); + + undraw_mouse(); + _overlayVisible = true; + clearOverlay(); +} + +void OSystem_PalmOS5::hideOverlay() { + undraw_mouse(); + _overlayVisible = false; + _redawOSD = true; +} + +void OSystem_PalmOS5::clearOverlay() { + if (!_overlayVisible) + return; + + byte *src = _offScreenP; + int16 *dst = _overlayP; + int cnt = _screenWidth * _screenHeight; + do { + *dst++ = _nativePal[*src++]; + } while (--cnt); +} + +void OSystem_PalmOS5::grabOverlay(OverlayColor *buf, int pitch) { + OverlayColor *src = _overlayP; + int h = _screenHeight; + do { + memcpy(buf, src, _screenWidth * 2); + src += _screenWidth; + buf += pitch; + } while (--h); +} + +void OSystem_PalmOS5::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { + if (w == 0 || h == 0) + return; + + OverlayColor *dst = _overlayP + x + y * _screenWidth; + do { + memcpy(dst, buf, w * 2); + dst += _screenWidth; + buf += pitch; + } while (--h); +} + +OverlayColor OSystem_PalmOS5::RGBToColor(uint8 r, uint8 g, uint8 b) { + return gfxMakeDisplayRGB(r, g, b); +} + +void OSystem_PalmOS5::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { +#ifdef PALMOS_68K + color = SWAP_BYTES_16(color); +#endif + r = ((color >> 8) & 0xF8); + g = ((color >> 3) & 0xFC); + b = ((color << 3) & 0xF8); +} diff --git a/backends/platform/PalmOS/Src/os5_renderer.cpp b/backends/platform/PalmOS/Src/os5_renderer.cpp new file mode 100644 index 0000000000..ff692ae863 --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_renderer.cpp @@ -0,0 +1,156 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" + +void OSystem_PalmOS5::render_1x(RectangleType &r, PointType &p) { + Coord o = 0; + + if (_overlayVisible) { + int16 *src = _overlayP; + int16 *dst = _workScreenP; + MemMove(dst, src, _screenWidth * _screenHeight * 2); + + } else { + byte *src = _offScreenP; + int16 *dst = _workScreenP; + int cnt = _screenWidth * _screenHeight; + o = _current_shake_pos; + + do { + *dst++ = _nativePal[*src++]; + } while (--cnt); + } + + p.x = _screenOffset.x; + p.y = _screenOffset.y + o; + RctSetRectangle(&r, 0, 0, _screenWidth, _screenHeight - o); +} + +void OSystem_PalmOS5::render_landscape(RectangleType &r, PointType &p) { + Coord x, y, o = 0; + int16 *dst = _workScreenP; + + if (_overlayVisible) { + int16 *src = _overlayP; + + for (y = 0; y < 100; y++) { + // draw 2 lines + for (x = 0; x < 320; x++) { + *dst++ = *src++; + *dst++ = *src; + *dst++ = *src++; + } + // copy the second to the next line + MemMove(dst, dst - 480, 480 * 2); + dst += 480; + } + + } else { + byte *src = _offScreenP; + o = _current_shake_pos; + + for (y = 0; y < 100; y++) { + // draw 2 lines + for (x = 0; x < 320; x++) { + *dst++ = _nativePal[*src++]; + *dst++ = _nativePal[*src]; + *dst++ = _nativePal[*src++]; + } + // copy the second to the next line + MemMove(dst, dst - 480, 480 * 2); + dst += 480; + } + } + + p.x = _screenOffset.x; + p.y = _screenOffset.y + o; + RctSetRectangle(&r, 0, 0, 480, 300 - o); +} + +void OSystem_PalmOS5::render_portrait(RectangleType &r, PointType &p) { + Coord x, y, o = 0; + int16 *dst = _workScreenP; + + if (_overlayVisible) { + int16 *src = _overlayP + 320 - 1; + int16 *src2 = src; + + for (x = 0; x < 160; x++) { + for (y = 0; y < 100; y++) { + *dst++ = *src; + src += 320; + *dst++ = *src; + *dst++ = *src; + src += 320; + } + src = --src2; + + for (y = 0; y < 100; y++) { + *dst++ = *src; + src += 320; + *dst++ = *src; + *dst++ = *src; + src += 320; + } + src = --src2; + + MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5 + dst += 300; + } + + } else { + byte *src = _offScreenP + 320 - 1; + byte *src2 = src; + o = _current_shake_pos; + + for (x = 0; x < 160; x++) { + for (y = 0; y < 100; y++) { + *dst++ = _nativePal[*src]; + src += 320; + *dst++ = _nativePal[*src]; + *dst++ = _nativePal[*src]; + src += 320; + } + src = --src2; + + for (y = 0; y < 100; y++) { + *dst++ = _nativePal[*src]; + src += 320; + *dst++ = _nativePal[*src]; + *dst++ = _nativePal[*src]; + src += 320; + } + src = --src2; + + MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5 + dst += 300; + } + } + + p.y = _screenOffset.x; + p.x = _screenOffset.y + o; + RctSetRectangle(&r, 0, 0, 300 - o, 480); +} + diff --git a/backends/platform/PalmOS/Src/os5_sound.cpp b/backends/platform/PalmOS/Src/os5_sound.cpp new file mode 100644 index 0000000000..4bdded13e7 --- /dev/null +++ b/backends/platform/PalmOS/Src/os5_sound.cpp @@ -0,0 +1,143 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5.h" +#include "backends/intern.h" +#include "common/config-manager.h" + +SoundExType _soundEx; + +static Err sndCallback(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) { + SoundExType *_soundEx = (SoundExType *)UserDataP; + SoundType *_sound = _soundEx->sound; + + if (_soundEx->set && _soundEx->size) { + MemMove(bufferP, _soundEx->dataP, _soundEx->size); + *bufferSizeP = _soundEx->size; + _soundEx->set = false; + + } else { + _soundEx->size = *bufferSizeP; + MemSet(bufferP, 128, 0); + *bufferSizeP = 128; + } + + return errNone; +} + +void OSystem_PalmOS5::sound_handler() { + if (_sound.active) { + if (_soundEx.size && !_soundEx.set) { + if (!_soundEx.dataP) + _soundEx.dataP = MemPtrNew(_soundEx.size); + + ((SoundProc)_sound.proc)(_sound.param, (byte *)_soundEx.dataP, _soundEx.size); + _soundEx.set = true; + } + }// TODO : no Sound API case +} + +SndStreamVariableBufferCallback OSystem_PalmOS5::sound_callback() { + return sndCallback; +} + +bool OSystem_PalmOS5::setSoundCallback(SoundProc proc, void *param) { + Err e; + Boolean success = false; + + if (!_sound.active) { + if (gVars->fmQuality != FM_QUALITY_INI) { + ConfMan.setBool("FM_medium_quality", (gVars->fmQuality == FM_QUALITY_MED)); + ConfMan.setBool("FM_high_quality", (gVars->fmQuality == FM_QUALITY_HI)); + } + +#if defined (COMPILE_OS5) + CALLBACK_INIT(_soundEx); +#endif + _sound.proc = proc; + _sound.param = param; + _sound.active = true; // always true when we call this function, false when sound is off + + _soundEx.handle = 0; + _soundEx.size = 0; // set by the callback + _soundEx.set = false; + _soundEx.dataP = NULL; // set by the handler + + if (ConfMan.hasKey("output_rate")) + _samplesPerSec = ConfMan.getInt("output_rate"); + else + _samplesPerSec = SAMPLES_PER_SEC; + + // try to create sound stream + if (OPTIONS_TST(kOptPalmSoundAPI)) { + e = SndStreamCreateExtended( + &_soundEx.handle, + sndOutput, + sndFormatPCM, + _samplesPerSec, +#ifdef PALMOS_68K + sndInt16Big, +#else + sndInt16Little, +#endif + sndStereo, + sound_callback(), + &_soundEx, + 8192 +#ifdef PALMOS_68K + ,false +#elif defined (COMPILE_OS5) + ,true +#endif + ); + + e = e ? e : SndStreamStart(_soundEx.handle); + e = e ? e : SndStreamSetVolume(_soundEx.handle, 1024L * gVars->palmVolume / 100); + success = (e == errNone); + + // no Sound API + } else { + _soundEx.size = 512; + _soundEx.dataP = MemPtrNew(_soundEx.size); + } + } + // if not true some scenes (indy3 256,...) may freeze (ESC to skip) + return true; +} + +void OSystem_PalmOS5::clearSoundCallback() { + if (_sound.active) { + if (OPTIONS_TST(kOptPalmSoundAPI)) { + SndStreamStop(_soundEx.handle); + SndStreamDelete(_soundEx.handle); + } + + if (_soundEx.dataP) + free(_soundEx.dataP); + } + + _sound.active = false; + _soundEx.handle = NULL; + _soundEx.dataP = NULL; +} diff --git a/backends/platform/PalmOS/Src/os5ex_sound.cpp b/backends/platform/PalmOS/Src/os5ex_sound.cpp new file mode 100644 index 0000000000..1cbd5f7f14 --- /dev/null +++ b/backends/platform/PalmOS/Src/os5ex_sound.cpp @@ -0,0 +1,37 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_os5ex.h" + +static SYSTEM_CALLBACK Err sndCallbackEx(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) { + CALLBACK_PROLOGUE + SoundType *_sound = ((SoundExType *)UserDataP)->sound; + ((OSystem::SoundProc)_sound->proc)(_sound->param, (byte *)bufferP, *bufferSizeP); + CALLBACK_EPILOGUE + return errNone; +} + +SndStreamVariableBufferCallback OSystem_PalmOS5Ex::sound_callback() { + return sndCallbackEx; +} diff --git a/backends/platform/PalmOS/Src/palm-scumm-md5.h b/backends/platform/PalmOS/Src/palm-scumm-md5.h new file mode 100644 index 0000000000..bf82c8e93d --- /dev/null +++ b/backends/platform/PalmOS/Src/palm-scumm-md5.h @@ -0,0 +1,9 @@ + +struct MD5Table { + const char md5[32 + 1]; + const char target[16 + 1]; + Common::Language language; + Common::Platform platform; +}; + +static const MD5Table *md5table; \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/palmdefs.h b/backends/platform/PalmOS/Src/palmdefs.h new file mode 100644 index 0000000000..d37b533a21 --- /dev/null +++ b/backends/platform/PalmOS/Src/palmdefs.h @@ -0,0 +1,21 @@ +#ifndef PALMDEFS_H +#define PALMDEFS_H + +#define appFileCreator 'ScVM' +#define sysAppLaunchCustomEngineDelete (sysAppLaunchCmdCustomBase + 0) +#define sysAppLaunchCustomEngineGetInfo (sysAppLaunchCmdCustomBase + 1) + +enum { + GET_NONE = 0, + GET_DATACOMMON = 1 << 1, + GET_DATAENGINE = 1 << 2, + + GET_MODE68K = 1 << 14, + GET_MODEARM = 1 << 15, +}; + +SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP) + SYS_TRAP(sysTrapSysGetAppInfo); + + +#endif diff --git a/backends/platform/PalmOS/Src/palmversion.h b/backends/platform/PalmOS/Src/palmversion.h new file mode 100644 index 0000000000..d4362ddd61 --- /dev/null +++ b/backends/platform/PalmOS/Src/palmversion.h @@ -0,0 +1,19 @@ +#ifndef PALMVERSION_H +#define PALMVERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(COMPILE_ZODIAC) +# include +#else +# include +# include +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_agi.h b/backends/platform/PalmOS/Src/prefixes/68k_agi.h new file mode 100644 index 0000000000..154c2d3115 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_agi.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_AGI + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_cine.h b/backends/platform/PalmOS/Src/prefixes/68k_cine.h new file mode 100644 index 0000000000..621fa0c4e1 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_cine.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_CINE + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_gob.h b/backends/platform/PalmOS/Src/prefixes/68k_gob.h new file mode 100644 index 0000000000..1eaa2a5e77 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_gob.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_GOB + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_kyra.h b/backends/platform/PalmOS/Src/prefixes/68k_kyra.h new file mode 100644 index 0000000000..0afb8de061 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_kyra.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_KYRA + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_lure.h b/backends/platform/PalmOS/Src/prefixes/68k_lure.h new file mode 100644 index 0000000000..1bc7b19edd --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_lure.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_LURE + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_queen.h b/backends/platform/PalmOS/Src/prefixes/68k_queen.h new file mode 100644 index 0000000000..cdf3859966 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_queen.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_QUEEN + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_saga.h b/backends/platform/PalmOS/Src/prefixes/68k_saga.h new file mode 100644 index 0000000000..0ad4089418 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_saga.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SAGA + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_scumm.h b/backends/platform/PalmOS/Src/prefixes/68k_scumm.h new file mode 100644 index 0000000000..8a6e0d85c3 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_scumm.h @@ -0,0 +1,12 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SCUMM +//#undef DISABLE_SCUMM_7_8 +//#undef DISABLE_HE + +#define PALMOS_68K +//#define PALMOS_DEBUG + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_simon.h b/backends/platform/PalmOS/Src/prefixes/68k_simon.h new file mode 100644 index 0000000000..54a57c0e93 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_simon.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SIMON + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sky.h b/backends/platform/PalmOS/Src/prefixes/68k_sky.h new file mode 100644 index 0000000000..52720f508d --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_sky.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SKY + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sword1.h b/backends/platform/PalmOS/Src/prefixes/68k_sword1.h new file mode 100644 index 0000000000..984e704cc5 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_sword1.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SWORD1 + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sword2.h b/backends/platform/PalmOS/Src/prefixes/68k_sword2.h new file mode 100644 index 0000000000..bca68ff4d3 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/68k_sword2.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "compile.h" +#undef DISABLE_SWORD2 + +#define PALMOS_68K + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/compile.h b/backends/platform/PalmOS/Src/prefixes/compile.h new file mode 100644 index 0000000000..3d929b889c --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/compile.h @@ -0,0 +1,59 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __COMPILE_H__ +#define __COMPILE_H__ + +#define DISABLE_SCUMM +#define DISABLE_SCUMM_7_8 +#define DISABLE_HE + +#define DISABLE_SIMON +#define DISABLE_SKY +#define DISABLE_SWORD1 +#define DISABLE_SWORD2 +#define DISABLE_QUEEN +#define DISABLE_SAGA +#define DISABLE_KYRA +#define DISABLE_AWE +#define DISABLE_GOB +#define DISABLE_LURE +#define DISABLE_CINE +#define DISABLE_AGI + +#define DISABLE_HQ_SCALERS + +// PalmOS +#define PALMOS_MODE +#define COMPILE_ZODIAC +//#define COMPILE_OS5 + +//#define DISABLE_ADLIB +//#define DISABLE_LIGHTSPEED +//#define DISABLE_TAPWAVE +//#define REDUCE_MEMORY_USAGE + +//#define _DEBUG + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_agi.h b/backends/platform/PalmOS/Src/prefixes/native_agi.h new file mode 100644 index 0000000000..496cf7c85b --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_agi.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_AGI + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_cine.h b/backends/platform/PalmOS/Src/prefixes/native_cine.h new file mode 100644 index 0000000000..212a5544d0 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_cine.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_CINE + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_common.h b/backends/platform/PalmOS/Src/prefixes/native_common.h new file mode 100644 index 0000000000..c04f5e1538 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_common.h @@ -0,0 +1,21 @@ +#ifndef ZNATIVE_COMMON_H +#define ZNATIVE_COMMON_H + +#include "compile.h" +#include "palmmad.h" +#include "palmtremor.h" + +#define __TWNEW_H__ + +#define PALMOS_ARM +#define DISABLE_LIGHTSPEED + +#define USE_MAD +#define USE_TREMOR +//#define USE_VORBIS +//#define USE_MPEG2 + +// enable assert +//#define _DEBUG + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_gob.h b/backends/platform/PalmOS/Src/prefixes/native_gob.h new file mode 100644 index 0000000000..16863cd5b6 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_gob.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_GOB + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_kyra.h b/backends/platform/PalmOS/Src/prefixes/native_kyra.h new file mode 100644 index 0000000000..7f6dd57565 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_kyra.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_KYRA + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_lure.h b/backends/platform/PalmOS/Src/prefixes/native_lure.h new file mode 100644 index 0000000000..1d9005045c --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_lure.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_LURE + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_queen.h b/backends/platform/PalmOS/Src/prefixes/native_queen.h new file mode 100644 index 0000000000..d2a1b44ef8 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_queen.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_QUEEN + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_saga.h b/backends/platform/PalmOS/Src/prefixes/native_saga.h new file mode 100644 index 0000000000..1a728e6bcb --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_saga.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SAGA + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_scumm.h b/backends/platform/PalmOS/Src/prefixes/native_scumm.h new file mode 100644 index 0000000000..196628909a --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_scumm.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SCUMM +#undef DISABLE_SCUMM_7_8 +#undef DISABLE_HE + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_simon.h b/backends/platform/PalmOS/Src/prefixes/native_simon.h new file mode 100644 index 0000000000..b3c6710141 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_simon.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SIMON + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_sky.h b/backends/platform/PalmOS/Src/prefixes/native_sky.h new file mode 100644 index 0000000000..193c57e87d --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_sky.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SKY + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_sword1.h b/backends/platform/PalmOS/Src/prefixes/native_sword1.h new file mode 100644 index 0000000000..8e52a978a8 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_sword1.h @@ -0,0 +1,9 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SWORD1 +#define USE_MPEG2 +#define USE_VORBIS + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/native_sword2.h b/backends/platform/PalmOS/Src/prefixes/native_sword2.h new file mode 100644 index 0000000000..f74a8bcc9a --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/native_sword2.h @@ -0,0 +1,10 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "native_common.h" +#undef DISABLE_SWORD2 +#undef _DEBUG +#define USE_MPEG2 +#define USE_VORBIS + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h b/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h new file mode 100644 index 0000000000..6c7d749539 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h @@ -0,0 +1,8 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#define PALMOS_68K +#define PALMOS_MODE +//#define _DEBUG_ENGINE + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_os5.h b/backends/platform/PalmOS/Src/prefixes/prefix_os5.h new file mode 100644 index 0000000000..a039002840 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/prefix_os5.h @@ -0,0 +1,11 @@ +#ifndef PREFIX_H +#define PREFIX_H + +// PalmOS +#define PALMOS_MODE +#define PALMOS_68K +#define PALMOS_NATIVE + +#define COMPILE_OS5 + +#endif diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h b/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h new file mode 100644 index 0000000000..708166d998 --- /dev/null +++ b/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h @@ -0,0 +1,11 @@ +#ifndef PREFIX_H +#define PREFIX_H + +// PalmOS +#define PALMOS_MODE +#define PALMOS_68K +#define PALMOS_NATIVE + +#define COMPILE_ZODIAC + +#endif diff --git a/backends/platform/PalmOS/Src/rumble.cpp b/backends/platform/PalmOS/Src/rumble.cpp new file mode 100644 index 0000000000..e868f25a04 --- /dev/null +++ b/backends/platform/PalmOS/Src/rumble.cpp @@ -0,0 +1,139 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include "globals.h" +#include "vibrate.h" +#include "rumble.h" + +#ifndef DISABLE_TAPWAVE +#include "tapwave.h" + +TwDeviceHandle hRumble; +#endif + +Boolean RumbleExists() { + Boolean exists = false; + Err e; + +#ifndef DISABLE_TAPWAVE + if (OPTIONS_TST(kOptDeviceZodiac)) { + e = TwDeviceOpen(&hRumble, "vibrator0", "w"); + if (!e) { + exists = true; + TwDeviceClose(hRumble); + } + + } else +#endif + { +#ifndef PALMOS_ARM + + UInt32 romVersion; + + e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); + if (!e) { + if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) { + Boolean active = false; + e = HwrVibrateAttributes(0, kHwrVibrateActive, &active); + exists = (!e) ? true : exists; + } + } +#endif + } + + + return exists; +} + +void RumbleRun(Boolean active) { +#ifndef DISABLE_TAPWAVE + if (OPTIONS_TST(kOptDeviceZodiac)) { + if (active) { + UInt8 buf[] = { '\64', '\100' }; + TwDeviceControl(hRumble, 'play', buf, sizeof(buf)); + } else { + TwDeviceControl(hRumble, 'stop', 0, 0); + } + + } else +#endif + { +#ifndef PALMOS_ARM + UInt32 pattern = active ? 0xFF000000 : 0x00000000; + + HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); + HwrVibrateAttributes(1, kHwrVibrateActive, &active); +#endif + } + +} + +Boolean RumbleInit() { + Boolean done = false; + +#ifndef DISABLE_TAPWAVE + if (OPTIONS_TST(kOptDeviceZodiac)) { + Err e = TwDeviceOpen(&hRumble, "vibrator0", "w"); + done = (!e); + + } else +#endif + { +#ifndef PALMOS_ARM + if (RumbleExists()) { + UInt16 cycle = (SysTicksPerSecond())/2; + UInt32 pattern = 0xFF000000; + UInt16 delay = 1; + UInt16 repeat = 1; + + HwrVibrateAttributes(1, kHwrVibrateRate, &cycle); + HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); + HwrVibrateAttributes(1, kHwrVibrateDelay, &delay); + HwrVibrateAttributes(1, kHwrVibrateRepeatCount, &repeat); + + done = true; + } +#endif + } + return done; +} + +void RumbleRelease() { +#ifndef DISABLE_TAPWAVE + if (OPTIONS_TST(kOptDeviceZodiac)) { + TwDeviceClose(hRumble); + + } else +#endif + { +#ifndef PALMOS_ARM + UInt32 pattern = 0x00000000; + Boolean active = false; + + HwrVibrateAttributes(1, kHwrVibratePattern, &pattern); + HwrVibrateAttributes(1, kHwrVibrateActive, &active); +#endif + } +} \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/rumble.h b/backends/platform/PalmOS/Src/rumble.h new file mode 100644 index 0000000000..d9e8e5b951 --- /dev/null +++ b/backends/platform/PalmOS/Src/rumble.h @@ -0,0 +1,33 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __RUMBLE_H__ +#define __RUMBLE_H__ + +Boolean RumbleExists (); +void RumbleRun (Boolean active); +Boolean RumbleInit (); +void RumbleRelease (); + +#endif \ No newline at end of file diff --git a/backends/platform/PalmOS/Src/scumm_globals.cpp b/backends/platform/PalmOS/Src/scumm_globals.cpp new file mode 100644 index 0000000000..a8fc5c67a6 --- /dev/null +++ b/backends/platform/PalmOS/Src/scumm_globals.cpp @@ -0,0 +1,155 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include + +#include "palmdefs.h" +#include "globals.h" +#include "scumm_globals.h" + +static void GlbInitAll() { + if (gVars->globals[GBVARS_COMMON]) { + CALL_INIT(ScummFont) + } + if (gVars->globals[GBVARS_ENGINE]) { +#ifndef DISABLE_SCUMM +# ifndef DISABLE_SCUMM_7_8 + CALL_INIT(DimuseTables) + CALL_INIT(DimuseCodecs) + CALL_INIT(Codec47) +# endif + CALL_INIT(Akos) + CALL_INIT(Gfx) + CALL_INIT(Dialogs) + CALL_INIT(Charset) + CALL_INIT(Costume) + CALL_INIT(PlayerV2) + CALL_INIT(Scumm_md5table) +#endif +#ifndef DISABLE_SIMON + CALL_INIT(Simon_Simon) + CALL_INIT(Simon_Cursor) + CALL_INIT(Simon_Charset) +#endif +#ifndef DISABLE_SKY + CALL_INIT(Sky_Hufftext) +#endif +#ifndef DISABLE_SWORD1 + CALL_INIT(Sword1_fxList) +#endif +#ifndef DISABLE_QUEEN + CALL_INIT(Queen_Talk) + CALL_INIT(Queen_Display) + CALL_INIT(Queen_Graphics) + CALL_INIT(Queen_Restables) + CALL_INIT(Queen_Musicdata) +#endif + } +} + +static void GlbReleaseAll() { + if (gVars->globals[GBVARS_COMMON]) { + CALL_RELEASE(ScummFont) + + } + if (gVars->globals[GBVARS_SCUMM]) { +#ifndef DISABLE_SCUMM +# ifndef DISABLE_SCUMM_7_8 + CALL_RELEASE(DimuseTables) + CALL_RELEASE(DimuseCodecs) + CALL_RELEASE(Codec47) +# endif + CALL_RELEASE(Akos) + CALL_RELEASE(Gfx) + CALL_RELEASE(Dialogs) + CALL_RELEASE(Charset) + CALL_RELEASE(Costume) + CALL_RELEASE(PlayerV2) + CALL_RELEASE(Scumm_md5table) +#endif +#ifndef DISABLE_SIMON + CALL_RELEASE(Simon_Simon) + CALL_RELEASE(Simon_Cursor) + CALL_RELEASE(Simon_Charset) +#endif +#ifndef DISABLE_SKY + CALL_RELEASE(Sky_Hufftext) +#endif +#ifndef DISABLE_SWORD1 + CALL_RELEASE(Sword1_fxList) +#endif +#ifndef DISABLE_QUEEN + CALL_RELEASE(Queen_Talk) + CALL_RELEASE(Queen_Display) + CALL_RELEASE(Queen_Graphics) + CALL_RELEASE(Queen_Restables) + CALL_RELEASE(Queen_Musicdata) +#endif + } +} + +//TODO : use Boolean instead of void to check err +static DmOpenRef GlbOpenInternal(const Char *nameP) { + LocalID dbID = DmFindDatabase(0, nameP); + if (dbID) { + UInt32 dbType, dbCreator; + Err e = DmDatabaseInfo(0, dbID, 0, 0, 0, 0, 0, 0, 0, 0, 0, &dbType, &dbCreator); + + if (!e && dbType == 'GLBS' && dbCreator == appFileCreator) + return DmOpenDatabase(0, dbID, dmModeReadOnly); + } + return NULL; +} + +void GlbOpen() { + gVars->globals[GBVARS_COMMON] = GlbOpenInternal("Glbs::Common"); + gVars->globals[GBVARS_ENGINE] = GlbOpenInternal("Glbs::Engine"); + GlbInitAll(); +} + +void GlbClose() { + GlbReleaseAll(); + + if (gVars->globals[GBVARS_COMMON]) + DmCloseDatabase(gVars->globals[GBVARS_COMMON]); + if (gVars->globals[GBVARS_ENGINE]) + DmCloseDatabase(gVars->globals[GBVARS_ENGINE]); +} + +void *GlbGetRecord(UInt16 index, UInt16 id) { + if (gVars->globals[id]) { + MemHandle recordH = DmQueryRecord(gVars->globals[id], index); + if (recordH) + return MemHandleLock(recordH); + } + return NULL; +} + +void GlbReleaseRecord(UInt16 index, UInt16 id) { + if (gVars->globals[id]) { + MemHandle recordH = DmQueryRecord(gVars->globals[id], index); + if (recordH) + MemHandleUnlock(recordH); + } +} diff --git a/backends/platform/PalmOS/Src/scumm_globals.h b/backends/platform/PalmOS/Src/scumm_globals.h new file mode 100644 index 0000000000..3308c54a73 --- /dev/null +++ b/backends/platform/PalmOS/Src/scumm_globals.h @@ -0,0 +1,91 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __SCUMM_GLOBALS_H__ +#define __SCUMM_GLOBALS_H__ + +#include "builder/enum_globals.h" + +void *GlbGetRecord(UInt16 index, UInt16 id); +void GlbReleaseRecord(UInt16 index, UInt16 id); +void GlbOpen(); +void GlbClose(); + + +#define _GINIT(x) void initGlobals_##x() { +#define _GEND } +#define _GRELEASE(x) void releaseGlobals_##x() { + +#define CALL_INIT(x) initGlobals_##x(); +#define CALL_RELEASE(x) releaseGlobals_##x(); + +#define _GSETPTR(var,index,format,id) var = (format *)GlbGetRecord(index,id); +#define _GRELEASEPTR(index,id) GlbReleaseRecord(index,id); + +#define PROTO_GLOBALS(x) void CALL_INIT(x);\ + void CALL_RELEASE(x); + + +// Common stuffs +PROTO_GLOBALS(ScummFont) + +// Scumm stuffs +#ifndef DISABLE_SCUMM +PROTO_GLOBALS(DimuseTables) +PROTO_GLOBALS(Akos) +PROTO_GLOBALS(DimuseCodecs) +PROTO_GLOBALS(Codec47) +PROTO_GLOBALS(Gfx) +PROTO_GLOBALS(Dialogs) +PROTO_GLOBALS(Charset) +PROTO_GLOBALS(Costume) +PROTO_GLOBALS(PlayerV2) +PROTO_GLOBALS(Scumm_md5table) +#endif +// Simon stuffs +#ifndef DISABLE_SIMON +PROTO_GLOBALS(Simon_Simon) +PROTO_GLOBALS(Simon_Cursor) +PROTO_GLOBALS(Simon_Charset) +#endif +// Sky stuffs +#ifndef DISABLE_SKY +PROTO_GLOBALS(Sky_Hufftext) +#endif +// Queen stuffs +#ifndef DISABLE_QUEEN +PROTO_GLOBALS(Queen_Talk) +PROTO_GLOBALS(Queen_Display) +PROTO_GLOBALS(Queen_Graphics) +PROTO_GLOBALS(Queen_Restables) +PROTO_GLOBALS(Queen_Musicdata) +#endif +// Sword1 stuffs +#ifndef DISABLE_SWORD1 +PROTO_GLOBALS(Sword1_fxList) +#endif + +#undef PROTO_GLOBALS + +#endif diff --git a/backends/platform/PalmOS/Src/snd_pa1.cpp b/backends/platform/PalmOS/Src/snd_pa1.cpp new file mode 100644 index 0000000000..ca64825fe6 --- /dev/null +++ b/backends/platform/PalmOS/Src/snd_pa1.cpp @@ -0,0 +1,113 @@ +#include + +#include "native.h" +#include "globals.h" + +#ifdef COMPILE_PA1SND +# include +#endif + + +static Int32 diffLookup[16] = { + 1,3,5,7,9,11,13,15, + -1,-3,-5,-7,-9,-11,-13,-15, +}; + +static Int32 indexScale[16] = { + 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266, + 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266 /* same value for speedup */ +}; + +static int limit(int val,int min,int max) { + if (valmax) return max; + else return val; +} + +void pcm2adpcm(Int16 *src, UInt8 *dst, UInt32 length) { +#ifndef COMPILE_PA1SND +/* + if (OPTIONS_TST(kOptDeviceARM)) { + PnoDescriptor pno; + ARMPa1SndType userData = {src, dst, length}; + + MemPtr armP = _PnoInit(ARM_PA1SND, &pno); + _PnoCall(&pno, &userData); + _PnoFree(&pno, armP); + + return; + } +*/ + int data,val,diff; + int signal,step; +#else + long chan1, chan2; + long data,val,diff; + long signal,step; +#endif + + signal = 0; + step = 0x7F; + length >>= 3; // 16bit stereo -> 4bit mono + + do { + + // high nibble +#ifdef COMPILE_PA1SND + chan1 = ByteSwap16(*src); + src++; + chan2 = ByteSwap16(*src); + src++; + + diff = ((chan1 + chan2) >> 1) - signal; +#else + diff = ((*src++ + *src++) >> 1) - signal; +#endif + diff <<= 3; + diff /= step; + + val = abs(diff) >> 1; + + if (val > 7) val = 7; + if (diff < 0) val+= 8; + + signal+= (step * diffLookup[val]) >> 3; + signal = limit(signal, -32768, 32767); + + step = (step * indexScale[val]) >> 8; + step = limit(step, 0x7F, 0x6000); + + data = val; + + // low nibble +#ifdef COMPILE_PA1SND + chan1 = ByteSwap16(*src); + src++; + chan2 = ByteSwap16(*src); + src++; + + diff = ((chan1 + chan2) >> 1) - signal; +#else + diff = ((*src++ + *src++) >> 1) - signal; +#endif + diff <<= 3; + diff /= step; + + val = abs(diff) >> 1; + + if (val > 7) val = 7; + if (diff < 0) val+= 8; + + signal+= (step * diffLookup[val]) >> 3; + signal = limit(signal, -32768, 32767); + + step = (step * indexScale[val]) >> 8; + step = limit(step, 0x7F, 0x6000); + + data |= val << 4; + + *dst++ = (UInt8)data; + + } while(--length); + +} diff --git a/backends/platform/PalmOS/Src/stuffs.h b/backends/platform/PalmOS/Src/stuffs.h new file mode 100644 index 0000000000..b6f5a3f38b --- /dev/null +++ b/backends/platform/PalmOS/Src/stuffs.h @@ -0,0 +1,31 @@ +#ifndef STUFFS_H +#define STUFFS_H + +enum { + kOptNone = 0, + kOptDeviceARM = 1 << 0x00, + kOptDeviceOS5 = 1 << 0x01, + kOptDeviceClie = 1 << 0x02, + kOptDeviceZodiac = 1 << 0x03, + kOptModeWide = 1 << 0x04, + kOptModeLandscape = 1 << 0x05, + kOptMode16Bit = 1 << 0x06, + kOptModeHiDensity = 1 << 0x07, + kOptCollapsible = 1 << 0x08, + kOptDisableOnScrDisp = 1 << 0x09, + kOpt5WayNavigatorV1 = 1 << 0x0A, + kOpt5WayNavigatorV2 = 1 << 0x0B, + kOptPalmSoundAPI = 1 << 0x0C, + kOptSonyPa1LibAPI = 1 << 0x0D, + kOptGoLcdAPI = 1 << 0x0E, + kOptLightspeedAPI = 1 << 0x0F, + + kOptDeviceProcX86 = 1 << 0x1F // DEBUG only +}; + +// WARNING : you need to define OPTIONS_DEF() +#define OPTIONS_TST(x) (OPTIONS_DEF() & (x)) +#define OPTIONS_SET(x) OPTIONS_DEF() |= (x) +#define OPTIONS_RST(x) OPTIONS_DEF() &= ~(x) + +#endif diff --git a/backends/platform/PalmOS/Src/vibrate.h b/backends/platform/PalmOS/Src/vibrate.h new file mode 100644 index 0000000000..37604be5b7 --- /dev/null +++ b/backends/platform/PalmOS/Src/vibrate.h @@ -0,0 +1,61 @@ +/********************************************************************** +** ** +** vibrate.h ** +** ** +** Definitions for setting/retrieving the state of the vibrator on ** +** PalmOS 4.x devices. These calls are not officially supported by ** +** Palm Inc and subsidiaries. It is not guaranteed that these calls ** +** will work at all or at least the same on every device. YOU ARE ** +** USING THESE ENTIRELY ON YOUR VERY OWN RISK ! ** +** ** +** Please send corrections to dseifert@dseifert.com ** +**********************************************************************/ + +#include + +/* HwrVibrateAttributes takes three arguments: +** Boolean set Should the setting be set (1) or retrieved (0) +** UInt32 setting what should be set +** void* value pointer to the value to set, or to store the +** retrieved setting +*/ + +Err HwrVibrateAttributes(Boolean set, UInt32 setting, void *value) + SYS_TRAP(sysTrapHwrVibrateAttributes); + +/* to determine whether the vibrator is supported on a specific device, you +** need to make sure that you are running on PalmOS 4.x (so that the +** trap exists), that the attention manager exists and you need to check +** whether HwrVibrateAttributes(0, 1, &active) returns an error code of +** 0. ('active' is a Boolean). +*/ + + +/***************************************************************/ +/* For the second parameter, the following defines can be used */ +/***************************************************************/ + +/* *value points to a Boolean stating the state of the vibrator */ +#define kHwrVibrateActive 1 + +/* *value points to a UInt16, specifying the length of one cycle. +** value is in ticks (1/100 seconds) */ +#define kHwrVibrateRate 2 + +/* *value points to a UInt32, specifying the pattern of vibrating +** +** example: +** 0xFFFFFFFF stay on, no vibrating +** 0x0F0F0F0F vibrate four times in equal intervals +** 0xAAAAAAAA vibrate really fast (not recommended) +** 0x0F0F0000 vibrate twice, then pause +*/ +#define kHwrVibratePattern 3 + +/* *value points to a UInt16, specifying the delay between two +** cycles in ticks */ +#define kHwrVibrateDelay 4 + +/* *value points to a UInt16 specifying the amount of repeats. */ +#define kHwrVibrateRepeatCount 5 + diff --git a/backends/platform/PalmOS/Src/zodiac_event.cpp b/backends/platform/PalmOS/Src/zodiac_event.cpp new file mode 100644 index 0000000000..68afbe87a9 --- /dev/null +++ b/backends/platform/PalmOS/Src/zodiac_event.cpp @@ -0,0 +1,124 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_zodiac.h" + +void OSystem_PalmZodiac::get_coordinates(EventPtr ev, Coord &x, Coord &y) { + Boolean dummy; + EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy); + + x = (ev->screenX - _screenOffset.x); + y = (ev->screenY - _screenOffset.y); + + if (_stretched) { + Int32 w, h; + + if (_mode == GFX_NORMAL) { + + h = gVars->screenHeight - MIN_OFFSET * 2; + w = gVars->screenWidth; + x = (_screenWidth * x) / w; + y = (_screenHeight * y) / h; + + } else { + + h = (_ratio.adjustAspect == kRatioHeight ? _ratio.height : gVars->screenFullHeight); + w = (_ratio.adjustAspect == kRatioWidth ? _ratio.width : gVars->screenFullWidth); + x = (_screenWidth * x) / w; + y = (_screenHeight * y) / h; + } + } +} + +bool OSystem_PalmZodiac::check_event(Event &event, EventPtr ev) { + if (ev->eType == keyDownEvent) { + switch (ev->data.keyDown.chr) { + // F5 = menu + case vchrThumbWheelBack: + _lastKey = kKeyNone; + event.type = EVENT_KEYDOWN; + event.kbd.keycode = 319; + event.kbd.ascii = 319; + event.kbd.flags = 0; + return true; + + case vchrTriggerLeft: + hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE); + return false; // not a key + + case vchrTriggerRight: + setFeatureState(kFeatureAspectRatioCorrection, 0); + return false; // not a key + + case vchrActionLeft: + _lastKey = kKeyMouseLButton; + event.type = EVENT_LBUTTONDOWN; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; + + case vchrActionRight: + _lastKey = kKeyNone; + event.type = EVENT_RBUTTONDOWN; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; + + // skip text + case vchrActionDown: + event.type = EVENT_KEYDOWN; + event.kbd.keycode = '.'; + event.kbd.ascii = '.'; + event.kbd.flags = 0; + return true; + + // trun off + case vchrAutoOff: + case vchrPowerOff: + // pause the sound thread if any + if (_sound.active) + SndStreamPause(_soundEx.handle, true); + break; + + case vchrLateWakeup: + // resume the sound thread if any + if (_sound.active) + SndStreamPause(_soundEx.handle, false); + break; + } + + } else if (_overlayVisible) { + switch (_lastKey) { + case kKeyMouseLButton: + _lastKey = kKeyNone; + event.type = EVENT_LBUTTONUP; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; + + } + } + + return false; +} diff --git a/backends/platform/PalmOS/Src/zodiac_gfx.cpp b/backends/platform/PalmOS/Src/zodiac_gfx.cpp new file mode 100644 index 0000000000..bb70983e79 --- /dev/null +++ b/backends/platform/PalmOS/Src/zodiac_gfx.cpp @@ -0,0 +1,322 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_zodiac.h" +#include "common/config-manager.h" +#include "graphics/surface.h" +#include "rumble.h" + +#ifdef PALMOS_68K +#define _TwGfxOpen(x, y) TwGfxOpen((TwGfxHandle*)x, y); +#else +static asm Err _TwGfxOpen(void **aResult, void *aInfoResult) { + stmfd sp!, {r4-r11,lr} + ldr r9, [r9] + ldr r9, [r9] + sub sp, sp, #0x24 + mov r6, r0 + mov r7, r1 + ldr pc, =0x200995F0 +} +#endif + +int OSystem_PalmZodiac::getDefaultGraphicsMode() const { + return GFX_WIDE; +} + +void OSystem_PalmZodiac::load_gfx_mode() { + Err e; + + if (_gfxLoaded) + return; + _gfxLoaded = true; + + // get command line config + _fullscreen = ConfMan.getBool("fullscreen"); // TODO : (NORMAL mode) + _ratio.adjustAspect = ConfMan.getBool("aspect_ratio") ? kRatioHeight : kRatioNone; + + // precalc ratio (WIDE mode) + _ratio.width = ((float)_screenWidth / _screenHeight * gVars->screenFullHeight); + _ratio.height = ((float)_screenHeight / _screenWidth * gVars->screenFullWidth); + + _sysOldOrientation = SysGetOrientation(); + SysSetOrientation(sysOrientationLandscape); + + _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit + _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H); + _offScreenP = (byte *)MemPtrNew(_screenWidth * _screenHeight); + + MemSet(_offScreenP, _screenWidth * _screenHeight, 0); + MemSet(_nativePal, sizeof(_nativePal), 0); + MemSet(_currentPalette, sizeof(_currentPalette), 0); + + UInt32 depth = 16; + WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); + + gVars->indicator.on = RGBToColor(0,255,0); + gVars->indicator.off = RGBToColor(0,0,0); + + _screenH = WinGetDisplayWindow(); + _screenP = (byte *)BmpGetBits(WinGetBitmap(_screenH)); + + e = _TwGfxOpen((void **)&_gfxH, 0); + e = TwGfxGetPalmDisplaySurface(_gfxH, &_palmScreenP); + + // overlay buffer + TwGfxSurfaceInfoType nfo = { + sizeof(TwGfxSurfaceInfoType), + _screenWidth, _screenHeight, _screenWidth * 2, + twGfxLocationAcceleratorMemory, + twGfxPixelFormatRGB565_LE + }; + e = TwGfxAllocSurface(_gfxH, &_overlayP, &nfo); + + // prepare main bitmap + _srcBmp.size = sizeof(TwGfxBitmapType); + _srcBmp.width = _screenWidth; + _srcBmp.height = _screenHeight; + _srcBmp.rowBytes = _screenWidth; + _srcBmp.pixelFormat = twGfxPixelFormat8bpp; + _srcBmp.data = _offScreenP; + _srcBmp.palette = _nativePal; + + _srcRect.x = 0; + _srcRect.y = 0; + _srcRect.w = _screenWidth; + _srcRect.h = _screenHeight; + + hotswap_gfx_mode(_mode); +} + +void OSystem_PalmZodiac::hotswap_gfx_mode(int mode) { + Err e; + TwGfxSetClip(_palmScreenP, 0); + WinSetDrawWindow(_screenH); + + _screenDest.w = _screenWidth; + _screenDest.h = _screenHeight; + + // prevent bad DIA redraw (Stat part) + if (mode == GFX_NORMAL) { + _redawOSD = true; + _stretched = (_screenWidth > gVars->screenWidth); + StatShow(); + PINSetInputAreaState(pinInputAreaOpen); + + if (_stretched) { + calc_rect(false); + } else { + // offsets + _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2; + _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2; + + // clip Tapwave API + TwGfxRectType rt = { _screenOffset.x, _screenOffset.y, _screenWidth, _screenHeight }; + TwGfxSetClip(_palmScreenP, &rt); + } + + } else { + _redawOSD = false; + _stretched = true; + PINSetInputAreaState(pinInputAreaClosed); + StatHide(); + + calc_rect(true); + } + + if (_stretched) { + OPTIONS_SET(kOptDisableOnScrDisp); + TwGfxSetClip(_palmScreenP, &_dstRect); + + if (!_tmpScreenP) { + // wide buffer + TwGfxSurfaceInfoType nfo = { + sizeof(TwGfxSurfaceInfoType), + _screenWidth, _screenHeight, _screenWidth * 2, + twGfxLocationAcceleratorMemory, + twGfxPixelFormatRGB565_LE + }; + e = TwGfxAllocSurface(_gfxH, &_tmpScreenP, &nfo); + } + } else { + OPTIONS_RST(kOptDisableOnScrDisp); + if (_tmpScreenP) { + e = TwGfxFreeSurface(_tmpScreenP); + _tmpScreenP = NULL; + } + } + + _mode = mode; + _srcPos.x = _screenOffset.x; + _srcPos.y = _screenOffset.y; + clearScreen(); +// updateScreen(); +} + +void OSystem_PalmZodiac::unload_gfx_mode() { + Err e; + + if (!_gfxLoaded) + return; + _gfxLoaded = false; + + if (_tmpScreenP) { + e = TwGfxFreeSurface(_tmpScreenP); + _tmpScreenP = NULL; + } + + e = TwGfxFreeSurface(_overlayP); + e = TwGfxClose(_gfxH); + + UInt32 depth = 8; + WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); + clearScreen(); + + MemPtrFree(_mouseBackupP); + MemPtrFree(_mouseDataP); + MemPtrFree(_offScreenP); + + SysSetOrientation(_sysOldOrientation); + StatShow(); + PINSetInputAreaState(pinInputAreaOpen); +} + +static void rumblePack(Boolean active) { + if (!gVars->vibrator) + return; + + RumbleRun(active); +} + +void OSystem_PalmZodiac::int_setShakePos(int shakeOffset) { + if (shakeOffset == 0) + rumblePack(false); +} + +void OSystem_PalmZodiac::updateScreen() { + Err e; + + // draw the mouse pointer + draw_mouse(); + // update the screen + if (_overlayVisible) { + if (_stretched) { + TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h}; + e = TwGfxStretchBlt2(_palmScreenP, &dst, _overlayP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0)); + } else { + e = TwGfxBitBlt(_palmScreenP, &_srcPos, _overlayP, &_srcRect); + } + + } else { + if (_stretched) { + TwGfxPointType pos = {0, 0}; + TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h}; + + if (_new_shake_pos != _current_shake_pos) { + TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _dstRect.w, _new_shake_pos }; + + if (_new_shake_pos != 0) { + TwGfxFillRect(_palmScreenP, &r, 0); + rumblePack(_new_shake_pos >= 3); + } + r.y += dst.h; + r.h = _current_shake_pos; + TwGfxFillRect(_palmScreenP, &r, 0); + + _current_shake_pos = _new_shake_pos; + dst.y += _new_shake_pos; + } + e = TwGfxDrawBitmap(_tmpScreenP, &pos, &_srcBmp); + e = TwGfxStretchBlt2(_palmScreenP, &dst, _tmpScreenP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0)); + + } else { + TwGfxPointType pos = {_srcPos.x, _srcPos.y}; + + if (_new_shake_pos != _current_shake_pos) { + if (_new_shake_pos != 0) { + TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _screenWidth, _new_shake_pos }; + TwGfxFillRect(_palmScreenP, &r, 0); + rumblePack(_new_shake_pos >= 3); + } + _current_shake_pos = _new_shake_pos; + pos.y += _new_shake_pos; + } + e = TwGfxDrawBitmap(_palmScreenP, &pos, &_srcBmp); + } + } + undraw_mouse(); +} + +bool OSystem_PalmZodiac::grabRawScreen(Graphics::Surface *surf) { + assert(surf); + + surf->create(_screenWidth, _screenHeight, 1); + MemMove(surf->pixels, _offScreenP, _screenWidth * _screenHeight); + + return true; +} + +void OSystem_PalmZodiac::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { + _nativePal[index] = TwGfxMakeDisplayRGB( r, g, b); +} + +void OSystem_PalmZodiac::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { + if (_mode != GFX_NORMAL) + return; + MemHandle hTemp = DmGetResource(bitmapRsc, id + 100); + + if (hTemp) { + RGBColorType oldRGB; + static const RGBColorType pal[4] = { + {0,0,255,0}, + {0,255,255,0}, + {0,255,0,0}, + {0,0,0,0} + }; + + BitmapType *bmTemp; + bmTemp = (BitmapType *)MemHandleLock(hTemp); + + Coord w, h; + WinGetBitmapDimensions(bmTemp, &w, &h); // return the size of the low density bmp + + PointType dst = { _screenOffset.x + x, _screenOffset.y + y }; + RectangleType c, r = { dst.x, dst.y, w * 2, h * 2 }; + + UInt16 old = WinSetCoordinateSystem(kCoordinatesNative); + WinSetDrawWindow(_screenH); + if (show) { + WinSetForeColorRGB(&pal[3], &oldRGB); + WinSetBackColorRGB(&pal[color], &oldRGB); + WinPaintBitmap(bmTemp, dst.x, dst.y); + } else { + WinSetBackColorRGB(&pal[3], &oldRGB); + WinFillRectangle(&r, 0); + } + WinSetCoordinateSystem(old); + + MemPtrUnlock(bmTemp); + DmReleaseResource(hTemp); + } +} diff --git a/backends/platform/PalmOS/Src/zodiac_mouse.cpp b/backends/platform/PalmOS/Src/zodiac_mouse.cpp new file mode 100644 index 0000000000..813da9d56a --- /dev/null +++ b/backends/platform/PalmOS/Src/zodiac_mouse.cpp @@ -0,0 +1,153 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_zodiac.h" + +void OSystem_PalmZodiac::draw_mouse() { + if (_mouseDrawn || !_mouseVisible) + return; + + byte *src = _mouseDataP; // Image representing the mouse + byte color; + int width; + + _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y; + + int x = _mouseCurState.x - _mouseHotspotX; + int y = _mouseCurState.y - _mouseHotspotY; + int w = _mouseCurState.w; + int h = _mouseCurState.h; + + int draw_x = x; + int draw_y = y; + + // clip the mouse rect + if (x < 0) { + w += x; + src -= x; + x = 0; + } + if (y < 0) { + h += y; + src -= y * MAX_MOUSE_W; + y = 0; + } + if (w > _screenWidth - x) + w = _screenWidth - x; + if (h > _screenHeight - y) + h = _screenHeight - y; + + // Quick check to see if anything has to be drawn at all + if (w <= 0 || h <= 0) + return; + + // Store the bounding box so that undraw mouse can restore the area the + // mouse currently covers to its original content. + _mouseOldState.x = x; + _mouseOldState.y = y; + _mouseOldState.w = w; + _mouseOldState.h = h; + + // Backup the covered area draw the mouse cursor + if (_overlayVisible) { + uint16 *bak = (uint16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse + uint16 *dst; + + TwGfxLockSurface(_overlayP, (void **)&dst); + dst += y * _screenWidth + x; + + do { + width = w; + do { + *bak++ = *dst; + color = *src++; + if (color != _mouseKeyColor) // transparent, don't draw + *dst = _nativePal[color]; + dst++; + } while (--width); + + src += MAX_MOUSE_W - w; + bak += MAX_MOUSE_W - w; + dst += _screenWidth - w; + } while (--h); + + TwGfxUnlockSurface(_overlayP, true); + + } else { + byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse + byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into + + do { + width = w; + do { + *bak++ = *dst; + color = *src++; + if (color != _mouseKeyColor) // transparent, don't draw + *dst = color; + dst++; + } while (--width); + + src += MAX_MOUSE_W - w; + bak += MAX_MOUSE_W - w; + dst += _screenWidth - w; + } while (--h); + } + + _mouseDrawn = true; +} + +void OSystem_PalmZodiac::undraw_mouse() { + if (!_mouseDrawn) + return; + + int h = _mouseOldState.h; + // No need to do clipping here, since draw_mouse() did that already + if (_overlayVisible) { + uint16 *bak = (uint16 *)_mouseBackupP; + uint16 *dst; + + TwGfxLockSurface(_overlayP, (void **)&dst); + dst += _mouseOldState.y * _screenWidth + _mouseOldState.x; + + do { + memcpy(dst, bak, _mouseOldState.w * 2); + bak += MAX_MOUSE_W; + dst += _screenWidth; + } while (--h); + + TwGfxUnlockSurface(_overlayP, true); + + } else { + byte *dst, *bak = _mouseBackupP; + dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x; + + do { + memcpy(dst, bak, _mouseOldState.w); + bak += MAX_MOUSE_W; + dst += _screenWidth; + } while (--h); + } + + _mouseDrawn = false; +} diff --git a/backends/platform/PalmOS/Src/zodiac_overlay.cpp b/backends/platform/PalmOS/Src/zodiac_overlay.cpp new file mode 100644 index 0000000000..d1b2f7a558 --- /dev/null +++ b/backends/platform/PalmOS/Src/zodiac_overlay.cpp @@ -0,0 +1,79 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "be_zodiac.h" +#include "common/endian.h" + +void OSystem_PalmZodiac::clearOverlay() { + if (!_overlayVisible) + return; + + Err e; + TwGfxPointType pos = {0, 0}; + TwGfxBitmapType bmp = { + sizeof(TwGfxBitmapType), + _screenWidth, _screenHeight, _screenWidth, twGfxPixelFormat8bpp, + (void *)_offScreenP, _nativePal + }; + e = TwGfxDrawBitmap(_overlayP, &pos, &bmp); +} + +void OSystem_PalmZodiac::grabOverlay(OverlayColor *buf, int pitch) { + Err e; + OverlayColor *src; + + e = TwGfxLockSurface(_overlayP, (void **)&src); + int h = _screenHeight; + do { + memcpy(buf, src, _screenWidth * 2); + src += _screenWidth; + buf += pitch; + } while (--h); + + e = TwGfxUnlockSurface(_overlayP, 0); +} + +void OSystem_PalmZodiac::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { + Err e; + TwGfxPointType pos = {x, y}; + TwGfxBitmapType bmp = { + sizeof(TwGfxBitmapType), + w, h, pitch * 2 , twGfxPixelFormatRGB565_LE, + (void *)buf, 0 + }; + e = TwGfxDrawBitmap(_overlayP, &pos, &bmp); +} + +OverlayColor OSystem_PalmZodiac::RGBToColor(uint8 r, uint8 g, uint8 b) { + return TwGfxMakeDisplayRGB(r, g, b); +} + +void OSystem_PalmZodiac::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { +#ifdef PALMOS_68K + color = SWAP_BYTES_16(color); +#endif + r = ((color >> 8) & 0xF8); + g = ((color >> 3) & 0xFC); + b = ((color << 3) & 0xF8); +} diff --git a/backends/platform/PalmOS/scummvm.mcp b/backends/platform/PalmOS/scummvm.mcp new file mode 100644 index 0000000000..f63966f9eb Binary files /dev/null and b/backends/platform/PalmOS/scummvm.mcp differ diff --git a/backends/platform/gp32/Makefile b/backends/platform/gp32/Makefile new file mode 100644 index 0000000000..d61e8cb295 --- /dev/null +++ b/backends/platform/gp32/Makefile @@ -0,0 +1,192 @@ +CC := arm-elf-gcc +CXX := arm-elf-g++ +LD := arm-elf-g++ +AS := arm-elf-as +AR := arm-elf-ar cru +RANLIB := arm-elf-ranlib +RM := rm -f +MKDIR := mkdir -p +ECHO := echo -n +CAT := cat +RM := rm -f +# recursive version of RM +RM_REC := $(RM) -r +ZIP := zip -q +CP := cp +OBJCOPY := arm-elf-objcopy +FXETOOL := b2fxec + + +####################################################################### +# Default compilation parameters. Normally don't edit these # +####################################################################### + +CFLAGS = -marm -march=armv4t -mtune=arm920 -mapcs \ + -finline-functions \ + -fshort-enums \ + -mstructure-size-boundary=32 \ + -mno-thumb-interwork \ + -I$(GPSDK)/include \ + -g \ + -O \ + -fomit-frame-pointer +# -ffast-math \ +# -fshort-double + +CPPFLAGS:= $(CFLAGS) +CXXFLAGS:= $(CFLAGS) +DEFINES := +LDFLAGS := +INCLUDES:= -I. -Icommon +LIBS := +OBJS := + +# Turn on useful warnings +CXXFLAGS+= -Wall -pedantic -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion +CXXFLAGS+= -Wshadow -Wuninitialized -Wimplicit -Wundef +CXXFLAGS+= -Wno-long-long -Wno-multichar -Wno-unknown-pragmas -Wno-reorder +CXXFLAGS+= -Wwrite-strings -fcheck-new -Wctor-dtor-privacy -Wnon-virtual-dtor + +# Stripped Build? (Smaller ELF, Minimal debug symbol information). +# You MUST comment this out with a # if you wish to debug your code. +STRIP_DEBUG = -Wl,--strip-debug + +# GPSDK (SDK, Includes and Startup Files) base dir +GPSDK = /usr/compat/gp32/share/sdk + +LDSPECS = -specs=gp32_gpsdk.specs + +LDFLAGS = $(STRIP_DEBUG) -Wl,-Map,$(MAPFILE) $(LDSPECS) -Wl,--no-warn-mismatch + +LIBS += -L$(GPSDK)/lib \ + -lgpmem -lgpos -lgpstdio -lgpstdlib -lgpsound -lgpgraphic -lgpfont \ + -lm -lc -lgcc + +INCLUDES += -Ibackends/gp32 -Iengines -I$(GPSDK)/include + +MODULES += backends/gp32 + +# Outputs +EXEEXT = .elf +MAPFILE = scummvm.map +BIN = scummvm.gxb +FXE = scummvm.fxe + +# Plugins hack +srcdir = ./ + +DEFINES = -D__GP32__ +DEFINES += -DNONSTANDARD_PORT + +# Disable new themes. GP32 has LOW memory! +DEFINES += -DDISABLE_FANCY_THEMES + +# Support libtremor. +#DEFINES += -DUSE_VORBIS -DUSE_TREMOR -DGP32_SDK +#INCLUDES += -Ibackends/gp32/gptremor +#LIBS += -Lbackends/gp32/gptremor -lgptremor + +# Support libmad. +#DEFINES += -DUSE_MAD +#INCLUDES += -Ibackends/gp32/gpmad +#LIBS += -Lbackends/gp32/gpmad -lgpmad + +# Support libminilzo. +#DEFINES += -DUSE_MINILZO +#INCLUDES += -Ibackends/gp32/minilzo +#LIBS += -Lbackends/gp32/minilzo -lminilzo + +# Support for 8:3 save files names (The GP32 uses FAT12/16 (no vFAT) for the file system). +DEFINES += -DSHORT_SAVENAMES + +# Support for the unsigned sound mixer. +DEFINES += -DOUTPUT_UNSIGNED_AUDIO + +# Support for the GP32 (fmOPL derived) MIDI engine. +# - NOT fully implemented yet. +#DEFINES += -DUSE_GP32_FMOPL + + + +#GP32 Debug - Remove from Release builds +# This builds in the GP32 GDB USB Stub. Don't use it unless you know what your doing. +# You also need to remove ANY optemisation from the compiler flags. +#DEFINES += -DGP32_GDB +#OBJS += backends/gp32/debug-gdbstub-usb.o + +# Standard librarys and optimization modules +OBJS += backends/gp32/startup.o \ + backends/gp32/memcpy.o \ + backends/gp32/gp_asmlib.o \ + backends/gp32/gp_clipped.o \ + backends/gp32/fontdata.o + +# Custom GP32 std library +OBJS += backends/gp32/gp32std.o \ + backends/gp32/gp32std_file.o \ + backends/gp32/gp32std_grap.o \ + backends/gp32/gp32std_input.o \ + backends/gp32/gp32std_memory.o \ + backends/gp32/gp32std_sound.o \ + #backends/gp32/dmaaudio_asm.o \ + #backends/gp32/dmaaudio.o \ + +#Main ScummVM for the GP32 Backend +OBJS += backends/gp32/gp32_main.o \ + backends/gp32/gp32_launcher.o \ + backends/gp32/gp32_osys.o \ + backends/fs/gp32/gp32-fs.o + +$(FXE): $(BIN) + $(FXETOOL) -f -a "The ScummVM Team" -t "ScummVM for the GP32" $< $@ +# $(FXETOOL) -f -a "The ScummVM Team" -t "ScummVM for the GP32" -b scummvm.bmp $< $@ + +$(BIN): scummvm$(EXEEXT) + $(OBJCOPY) -O binary $< $@ + +# Uncomment this to use GCC 3.x specific dependency tracking (recommended) +HAVE_GCC3 = 1 + +####################################################################### +# Control which modules are built - uncomment any to disable module # +####################################################################### + +DISABLE_SCALERS = 1 +DISABLE_HQ_SCALERS = 1 + +#DISABLE_SCUMM = 1 + +# We can play The Dig with GP32 -- without any movies/musics/voices. But who would do that? +DISABLE_SCUMM_7_8 = 1 +DISABLE_HE = 1 + +# ??? +DISABLE_SIMON = 1 +DISABLE_SKY = 1 +DISABLE_QUEEN = 1 +DISABLE_GOB = 1 +DISABLE_LURE = 1 +DISABLE_CINE = 1 + +# In-development engines below. +# Disable for ALL release builds. +DISABLE_SAGA = 1 +DISABLE_KYRA = 1 +DISABLE_AGI = 1 + +# The engines below are not supported on the GP32 port so there is +# no point compiling support into the binary. +DISABLE_SWORD1 = 1 +DISABLE_SWORD2 = 1 + +####################################################################### +# Misc stuff - you should normally never have to edit this # +####################################################################### + +EXECUTABLE := scummvm$(EXEEXT) + +include Makefile.common + +dist: + $(RM) $(ZIPFILE) + $(ZIP) $(ZIPFILE) $(DISTFILES) diff --git a/backends/platform/gp32/README.GP32 b/backends/platform/gp32/README.GP32 new file mode 100644 index 0000000000..15120c7303 --- /dev/null +++ b/backends/platform/gp32/README.GP32 @@ -0,0 +1 @@ +TODO. :) diff --git a/backends/platform/gp32/debug-gdbstub-usb.cpp b/backends/platform/gp32/debug-gdbstub-usb.cpp new file mode 100644 index 0000000000..9329c5c601 --- /dev/null +++ b/backends/platform/gp32/debug-gdbstub-usb.cpp @@ -0,0 +1,1927 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001/2004 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +/* + * + * Basic GP32 USB GDB Debug Stub - Use with Multi-firmware that supports GDB + * Mithris kindly gave me the basic stub code. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +//#define USE_PRINTF // If there is a Printf(const char *pFormat,...) implemented + +/////////////////////////////////////////////////////////////// +// Externs +extern int __text_start; +extern int __data_start; +extern int __bss_start; +#ifdef USE_PRINTF +extern void Printf(char *pFormat, ...); +#endif +/////////////////////////////////////////////////////////////// + +extern "C" { + int OpenUSB(); + void InstallISR(); +} + +struct g_Namedregisters { + unsigned int r0; + unsigned int r1; + unsigned int r2; + unsigned int r3; + unsigned int r4; + unsigned int r5; + unsigned int r6; + unsigned int r7; + unsigned int r8; + unsigned int r9; + unsigned int r10; + unsigned int r11; + unsigned int r12; + unsigned int sp; + unsigned int lr; + unsigned int pc; + unsigned int fps; + unsigned int fcpsr; +}; + +/////////////////////////////////////////////////////////////// +// Defines + + +#define _REG_R1 0 +#define _REG_R2 2 +#define _REG_R3 3 +#define _REG_R4 4 +#define _REG_R5 5 +#define _REG_R6 6 +#define _REG_R7 7 +#define _REG_R8 8 +#define _REG_R9 9 +#define _REG_R10 10 +#define _REG_R11 11 +#define _REG_R12 12 +#define _REG_FP 11 +#define _REG_IP 12 +#define _REG_SL 10 +#define _REG_SP 13 +#define _REG_LR 14 +#define _REG_PC 15 + +#define PACKET_SIZE 0x100 + +#define MODE_USER 0 +#define MODE_FIQ 1 +#define MODE_IRQ 2 +#define MODE_SUPERVISOR 3 +#define MODE_ABORT 4 +#define MODE_UNDEF 5 +#define MODE_SYSTEM 6 +#define MODE_DUNNO -1 + +/////////////////////////////////////////////////////////////// +// Global stuff + +// Register array. +int g_Registers[50] = {1, 2, 3, 4 ,5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, + 21, 22, 23, 24, 25, 26, 27, 28, 29, + 31, 32, 33, 34, 35, 36, 37, 38, 39, + 41, 42, 43, 44, 45, 46, 47, 48, 49}; + +// Register name strings, not used right now. +static char * arm_register_name_strings[] = +{"r0", "r1", "r2", "r3", /* 0 1 2 3 */ + "r4", "r5", "r6", "r7", /* 4 5 6 7 */ + "r8", "r9", "r10", "r11", /* 8 9 10 11 */ + "r12", "sp", "lr", "pc", /* 12 13 14 15 */ + "f0", "f1", "f2", "f3", /* 16 17 18 19 */ + "f4", "f5", "f6", "f7", /* 20 21 22 23 */ + "fps", "cpsr" }; /* 24 25 */ + + +// Some USB stuff +GPN_DESC g_CommDesc; +GPN_COMM g_Comm; +const char HexDigits[17] = "0123456789abcdef"; +char g_SendBuffer[256]; +char g_TempBuffer[256]; +char g_ReadBuffer[0x100]; +unsigned int g_CurrentCSPR = 0; +unsigned int g_SavedStepInstruction = 0; +unsigned int g_StepAddress = 0; +bool g_LastWasStep = false; +int g_iTrap = 0; +bool g_GDBConnected = false; +/////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////// +// Prototypes +void BreakPoint(); +int GetException(unsigned int CSPR); +unsigned int *GetNextInstruction(unsigned int *pAddr); +bool CondWillExecute(unsigned int uiCond, unsigned int CSPR); +unsigned int DecodeInstruction(unsigned int uiInstruction, unsigned int PC); + +/////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////// +// Code Begins here +/////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////// +// Open usb comms stuff +int OpenUSB() +{ + int iResult; + + g_CommDesc.port_kind = COMM_USB_D; + g_CommDesc.tr_mode = 1; + g_CommDesc.tr_buf_size = PACKET_SIZE; + g_CommDesc.sz_pkt = PACKET_SIZE; + g_CommDesc.isr_comm_ram = 0; + + + iResult = GpCommCreate(&g_CommDesc, &g_Comm); + return iResult; +} + +/////////////////////////////////////////////////////////////// +// No need for explanation +void CloseUSB() +{ + GpCommDelete(&g_CommDesc); +} + +/////////////////////////////////////////////////////////////// +// No need for explanation +int SendUSB(const void *pData, unsigned int uiSize) +{ + return g_Comm.comm_send((unsigned char *)pData, uiSize); +} + + +/////////////////////////////////////////////////////////////// +// No need for explanation +int RecvUSB(char *pBuffer, unsigned int uiSize) +{ + return g_Comm.comm_recv((unsigned char *)pBuffer, uiSize); +} + +/////////////////////////////////////////////////////////////// +// Waits for an acknowledge from the server +void WaitACK() +{ + bool bBreak = false; + int iResult; + + while(!bBreak) { + iResult = g_Comm.comm_recv((unsigned char *)g_SendBuffer, 0x100); + if (iResult > 0) { + bBreak = true; + } + } +} +/////////////////////////////////////////////////////////////// +// Formats and sends a command to the server, +// it also calculates checksum +void SendCommand(unsigned char *pCommand) +{ + int iOffset; + unsigned int iCheckSum; + + iOffset = 4; + g_SendBuffer[iOffset++] = '$'; + + iCheckSum = 0; + while(*pCommand != 0) { + g_SendBuffer[iOffset++] = *pCommand; + iCheckSum += *pCommand++; + } + + g_SendBuffer[iOffset++] = '#'; + iCheckSum = iCheckSum & 0xff; + g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0xf0) >> 4]; + g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0x0f)]; + g_SendBuffer[iOffset] = 0; + + (*(int *)&g_SendBuffer[0]) = (iOffset - 4); + SendUSB(g_SendBuffer, 0x100); + WaitACK(); +} + +/////////////////////////////////////////////////////////////// +// This function creates and sends a package which tells gdb that +// the last command was unsupported +void UnSupportedCommand() +{ + (*(int *)&g_SendBuffer[0]) = 4; + g_SendBuffer[4] = '$'; + g_SendBuffer[5] = '#'; + g_SendBuffer[6] = '0'; + g_SendBuffer[7] = '0'; + g_SendBuffer[8] = '0'; + SendUSB(g_SendBuffer, 0x100); + + WaitACK(); + +} + + +/////////////////////////////////////////////////////////////// +// This function is quite similar to the SendCommand above +// But it allows the user to set the package length. +// If the length of a package exceeds 256bytes including +// the protocol stuff and the package length you can split +// the packages by sending the package size * -1. +// The server will then merge all packages until a package +// with a length >0 is recieved. +void SendCommandSize(unsigned char *pCommand, int iSize) +{ + int iOffset; + unsigned int iCheckSum; + + iOffset = 4; + g_SendBuffer[iOffset++] = '$'; + + iCheckSum = 0; + while(*pCommand != 0) { + g_SendBuffer[iOffset++] = *pCommand; + iCheckSum += *pCommand++; + } + + g_SendBuffer[iOffset++] = '#'; + iCheckSum = iCheckSum & 0xff; + g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0xf0) >> 4]; + g_SendBuffer[iOffset++] = HexDigits[(iCheckSum & 0x0f)]; + g_SendBuffer[iOffset] = 0; + + (*(int *)&g_SendBuffer[0]) = iSize; + SendUSB(g_SendBuffer, 0x100); + + WaitACK(); +} + + +/////////////////////////////////////////////////////////////// +// Writes a 32bit hexadeciman number in ascii to the string. +void HexToString(char *pString, int iNumber) +{ + pString[0] = HexDigits[(iNumber >> 28) & 0x0f]; + pString[1] = HexDigits[(iNumber >> 24) & 0x0f]; + pString[2] = HexDigits[(iNumber >> 20) & 0x0f]; + pString[3] = HexDigits[(iNumber >> 16) & 0x0f]; + pString[4] = HexDigits[(iNumber >> 12) & 0x0f]; + pString[5] = HexDigits[(iNumber >> 8) & 0x0f]; + pString[6] = HexDigits[(iNumber >> 4) & 0x0f]; + pString[7] = HexDigits[(iNumber) & 0x0f]; + +} + +/////////////////////////////////////////////////////////////// +// This does the same, but in a differend endian. +void HexToStringBW(char *pString, int iNumber) +{ + pString[6] = HexDigits[(iNumber >> 28) & 0x0f]; + pString[7] = HexDigits[(iNumber >> 24) & 0x0f]; + pString[4] = HexDigits[(iNumber >> 20) & 0x0f]; + pString[5] = HexDigits[(iNumber >> 16) & 0x0f]; + pString[2] = HexDigits[(iNumber >> 12) & 0x0f]; + pString[3] = HexDigits[(iNumber >> 8) & 0x0f]; + pString[0] = HexDigits[(iNumber >> 4) & 0x0f]; + pString[1] = HexDigits[(iNumber) & 0x0f]; + + pString[8] = 0; + +} + + +/////////////////////////////////////////////////////////////// +// equiv to strcat i imagine +void PrintToString(char *pString, char *pOtherString) +{ + while(*pOtherString != 0) { + *pString = *pOtherString; + *pString++; + *pOtherString++; + } +} + +/////////////////////////////////////////////////////////////// +// converts "ff" -> 0xff +unsigned char StringToByte(char *pString) +{ + unsigned char ucValue = 0; + + for (int i = 0; i < 2; i++) { + ucValue = ucValue << 4; + switch(pString[i]) { + case '0': + break; + case '1': + ucValue |= (0x01); + break; + case '2': + ucValue |= (0x02); + break; + case '3': + ucValue |= (0x03); + break; + case '4': + ucValue |= (0x04); + break; + case '5': + ucValue |= (0x05); + break; + case '6': + ucValue |= (0x06); + break; + case '7': + ucValue |= (0x07); + break; + case '8': + ucValue |= (0x08); + break; + case '9': + ucValue |= (0x09); + break; + case 'a': + ucValue |= (0x0a); + break; + case 'b': + ucValue |= (0x0b); + break; + case 'c': + ucValue |= (0x0c); + break; + case 'd': + ucValue |= (0x0d); + break; + case 'e': + ucValue |= (0x0e); + break; + case 'f': + ucValue |= (0x0f); + break; + + } + } + + return ucValue; +} + +/////////////////////////////////////////////////////////////// +// Sends a package with the program offsets to GDB +// Of some reason all offsets should be NULL. +void SendOffsets() +{ + char String[255]; + int a = 0;//(int)&__text_start; + int b = 0;//(int)&__data_start; + int c = 0;//(int)&__bss_start; + + PrintToString(String, "Text="); + HexToString(&String[5], a); + PrintToString(&String[5+8], ";Data="); + HexToString(&String[5+8+6], b); + PrintToString(&String[5+8+6+8], ";Bss="); + HexToString(&String[5+8+6+8+5], c); + String[5+8+6+8+5+8] = 0; + + SendCommand((unsigned char *)String); +} + +/////////////////////////////////////////////////////////////// +// This function dumps all registers to GDB +// It utilizes the SendCommandSize function to split the package. +void DumpRegisters() +{ + char Buffer[0x100]; + // Ugly hack so far. + + for (int i = 0; i < 21; i++) { + //g_Registers[i] = i; + HexToStringBW(&Buffer[i * 8], g_Registers[i]); + } + Buffer[21*8] = 0; + SendCommandSize((unsigned char *)Buffer, -1 * (21 * 8 + 4)); + for (int i = 0; i < 21; i++) { + //g_Registers[20 + i] = i; + HexToStringBW(&Buffer[i * 8], g_Registers[21 + i]); + } + Buffer[21*8] = 0; + + SendCommandSize((unsigned char *)Buffer, (21 * 8) + 4); +} + +/////////////////////////////////////////////////////////////// +// This function extracts an address from a string. +void *GetAddr(char *pBuffer) +{ + int iAddr; + int i = 0; + iAddr = 0; + + while (pBuffer[i] != ',') { + iAddr = iAddr << 4; + switch(pBuffer[i]) { + case '0': + //iAddr |= + break; + case '1': + iAddr |= (0x01); + break; + case '2': + iAddr |= (0x02); + break; + case '3': + iAddr |= (0x03); + break; + case '4': + iAddr |= (0x04); + break; + case '5': + iAddr |= (0x05); + break; + case '6': + iAddr |= (0x06); + break; + case '7': + iAddr |= (0x07); + break; + case '8': + iAddr |= (0x08); + break; + case '9': + iAddr |= (0x09); + break; + case 'a': + iAddr |= (0x0a); + break; + case 'b': + iAddr |= (0x0b); + break; + case 'c': + iAddr |= (0x0c); + break; + case 'd': + iAddr |= (0x0d); + break; + case 'e': + iAddr |= (0x0e); + break; + case 'f': + iAddr |= (0x0f); + break; + + } + i++; + } + return (void *)iAddr; +} +/////////////////////////////////////////////////////////////// +// This function does pretty much the same, but returns an int +// I know, some redundant code. +int GetBytes(char *pBuffer) +{ + int iBytes = 0; + int i = 0; + + + while ((pBuffer[i] != '#') && (pBuffer[i] != ':')) { + iBytes = iBytes << 4; + switch(pBuffer[i]) { + case '0': + //iAddr |= + break; + case '1': + iBytes |= 0x01; + break; + case '2': + iBytes |= 0x02; + break; + case '3': + iBytes |= 0x03; + break; + case '4': + iBytes |= 0x04; + break; + case '5': + iBytes |= 0x05; + break; + case '6': + iBytes |= 0x06; + break; + case '7': + iBytes |= 0x07; + break; + case '8': + iBytes |= 0x08; + break; + case '9': + iBytes |= 0x09; + break; + case 'a': + iBytes |= 0x0a; + break; + case 'b': + iBytes |= 0x0b; + break; + case 'c': + iBytes |= 0x0c; + break; + case 'd': + iBytes |= 0x0d; + break; + case 'e': + iBytes |= 0x0e; + break; + case 'f': + iBytes |= 0x0f; + break; + + } + + i++; + } + return iBytes; +} + +/////////////////////////////////////////////////////////////// +// This function reads memory and sends it back to GDB. +void SendMemory(void *pAddr, int iBytes) +{ + unsigned char *pData; + unsigned char iData; + int iBufferPos = 0; + int iBytesToSend; + char Byte; + int i; + + pData = (unsigned char *)pAddr; + + + do { + if (iBytes > 100) { + iBytesToSend = 100; + iBytes -= 100; + } else { + iBytesToSend = iBytes; + iBytes = 0; + } + iBufferPos = 0; + for (i = 0; i < iBytesToSend; i+=1) { + iData = *pData++; + g_TempBuffer[iBufferPos++] = HexDigits[(iData & 0xf0) >> 4]; + g_TempBuffer[iBufferPos++] = HexDigits[(iData & 0x0f)]; + + } + if (iBytes > 0) { + // This mean that we have not yet sent our last command. + g_TempBuffer[iBufferPos] = 0; + SendCommandSize((unsigned char *)g_TempBuffer, -1 * (i + 1 + 4)); + } + } while (iBytes > 0 ); + g_TempBuffer[iBufferPos] = 0; + SendCommand((unsigned char *)g_TempBuffer); +} + + + +/////////////////////////////////////////////////////////////// +// Does pretty much what it says. +void WriteMemory(void *pAddr, unsigned int uiBytes, char *pHexString) +{ + unsigned char *pData = ((unsigned char *)pAddr); + unsigned int uiOffset = 0; + unsigned char ucByte; + + //Printf("0x%x 0x%x", pAddr, uiBytes); + for (unsigned int i = 0; i < uiBytes ; i++) { + ucByte = StringToByte(&pHexString[uiOffset]); + //Printf("0x%x", ucByte); + *pData++ = ucByte; + uiOffset += 2; + } + /* + while(1); + unsigned int *piData = (unsigned int *)pAddr; + *piData = 0xe7ffdefe;//0xfedeffe7; + */ + +} + + +/////////////////////////////////////////////////////////////// +// Sends the required information about a trap +// TODO: correct numbers need to be placed there. +void SendBreakPoint() +{ + int iOffset = 0; + + g_TempBuffer[iOffset++] = 'T'; + g_TempBuffer[iOffset++] = '0'; + g_TempBuffer[iOffset++] = '5'; + g_TempBuffer[iOffset++] = '0'; + g_TempBuffer[iOffset++] = 'd'; + g_TempBuffer[iOffset++] = ':'; + HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_SP]); + iOffset += 8; + g_TempBuffer[iOffset++] = ';'; + g_TempBuffer[iOffset++] = '0'; + g_TempBuffer[iOffset++] = 'b'; + g_TempBuffer[iOffset++] = ':'; + HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_FP]); + iOffset += 8; + g_TempBuffer[iOffset++] = ';'; + g_TempBuffer[iOffset++] = '0'; + g_TempBuffer[iOffset++] = 'f'; + g_TempBuffer[iOffset++] = ':'; + HexToStringBW(&g_TempBuffer[iOffset], g_Registers[_REG_PC]); + iOffset += 8; + g_TempBuffer[iOffset++] = ';'; + g_TempBuffer[iOffset] = 0; + + SendCommand((unsigned char *)g_TempBuffer); + + + + +} + + +/////////////////////////////////////////////////////////////// +// Finds a character in a string and returns the offset. +int FindChar(char *pBuffer, char sign) +{ + int iRetVal = 0; + + while(*pBuffer != sign) { + iRetVal++; + *pBuffer++; + } + return iRetVal; +} + + +// Attibute naked. +/////////////////////////////////////////////////////////////// +// This is the ISR(Interrupt Service Routine) which handles +// All traps, it's basically a context switcher. +void ISR() __attribute__ ((naked)); +void ISR() +{ + // Lets snatch the registers! + + asm volatile(" \n" + " str r4, [%0, #0x10] \n" + " str r5, [%0, #0x14] \n" + " str r6, [%0, #0x18] \n" + " str r7, [%0, #0x1C] \n" + " str r8, [%0, #0x20] \n" + " str r9, [%0, #0x24] \n" + " str r10, [%0, #0x28] \n" + " str r11, [%0, #0x2C] \n" + " str r12, [%0, #0x30] \n" + + " str r14, [%0, #0x3C] \n" + + " @// skip 8 * 12byte(96bit) = 0x60 \n" + + " mov r4, %0 \n" + " ldmia sp!, {r0, r1, r2, r3} \n" + " str r0, [r4, #0x00] \n" + " str r1, [r4, #0x04] \n" + " str r2, [r4, #0x08] \n" + " str r3, [r4,#0x0C] \n" + + " mrs r1, SPSR \n" + " str r1, [r4, #0x48] \n" + " str r1, [r4,#0xA0] \n" + " str r1, [r4,#0xA4] \n" + + " mrs r1, CPSR \n" + " mov r2, r1 \n" + + + " @// Let us set the mode to supervisor so we can get r13 and r14 \n" + " bic r1, r1, #0x1f \n" + " orr r1, r1, #0x13 \n" + " msr CPSR_c, r1 \n" + " @// Just remember that we're in the supervisor stack aswell now \n" + " str r13, [r4,#0x34] \n" + " str r14, [r4,#0x38] \n" + " @// Lets move back to whatever mode we was in. \n" + " @// Make sure that IRQ's are turned on \n" + " bic r2, r2, #0x80 \n" + " msr CPSR_fsxc, r2 \n" + + + + + " \n" + : + : "r" (g_Registers) + : "%0", "r1", "r2", "r4"); + + + // Get Current CSPR and save LR + asm volatile(" \n" + " mrs r0, CPSR \n" + " str r0, [%0] \n" + + " str r14, [%1, #0x40] \n" + " str r0, [%1, #0x44] \n" + " str r13, [%1, #0x4C] \n" + " \n" + : + : "r" (&g_CurrentCSPR), "r" (g_Registers) + : "r0"); + + + switch(g_CurrentCSPR & 0x1f) { + case 0x10: // USER + g_iTrap = 0; + break; + case 0x11: // FIQ + g_iTrap = 1; + break; + case 0x12: // IRQ + g_iTrap = 2; + break; + case 0x13: // Supervisor + g_iTrap = 3; + break; + case 0x17: // Abort + g_iTrap = 4; + break; + case 0x1B: // Undefined/Breakpoint + // We cannot continue like this! + g_Registers[15] -= 4; + g_Registers[16] -= 4; + g_iTrap = 5; + break; + case 0x1F: // System + g_iTrap = 6; + break; + default: + g_iTrap = -1; + } + + + #ifdef USE_PRINTF + Printf("Trap@0x%x:%d", g_Registers[15], g_iTrap); + #endif + /* + switch (g_iTrap) { + case MODE_USER: + break; + case MODE_FIQ: + break; + case MODE_IRQ: + break; + case MODE_SUPERVISOR: + break; + case MODE_ABORT: + break; + case MODE_UNDEF: + break; + case MODE_SYSTEM: + break; + case MODE_DUNNO: + default: + while(1); + } + */ + SendBreakPoint(); + BreakPoint(); + + //Printf("0x%x 0x%x", g_Registers[15], g_Registers[16]); + // Okay, it's time to continue. + + + switch (g_iTrap) { + case MODE_USER: + //Printf("Dunno!!\n"); + break; + case MODE_FIQ: + //Printf("Dunno!!\n"); + break; + case MODE_IRQ: + //Printf("Dunno!!\n"); + break; + case MODE_SUPERVISOR: + //Printf("Dunno!!\n"); + break; + case MODE_ABORT: + asm volatile(" \n" + " mov r10, #0 \n" + " @Invalidate I&D cache \n" + " mcr p15, 0, r10, c7, c7 \n" + " @ restore the registers \n" + " ldr r1,[%0, #0x04] \n" + " ldr r2,[%0, #0x08] \n" + " ldr r4,[%0, #0x10] \n" + " ldr r5,[%0, #0x14] \n" + " ldr r6,[%0, #0x18] \n" + " ldr r7,[%0, #0x1C] \n" + " ldr r8,[%0, #0x20] \n" + " ldr r9,[%0, #0x24] \n" + " ldr r10,[%0, #0x28] \n" + " ldr r11,[%0, #0x2C] \n" + " ldr r12,[%0, #0x30] \n" + " ldr r14,[%0, #0x40] \n" + " ldr r0, [%0, #0x44] \n" + " msr CPSR_fsxc, r0 \n" + " ldr r0, [%0, #0x48] \n" + " msr SPSR_fsxc, r0 \n" + + " ldr r0,[%0, #0x00] \n" + " ldr r3,[%0, #0x0C] \n" + + " subs pc, lr, #0x04 \n" + + " \n" + : + :"r" (g_Registers) + :"r0"); + break; + case MODE_UNDEF: + // This will be the breakpoint i'm gonna test with. + asm volatile(" \n" + " mov r10, #0 \n" + " @Invalidate I&D cache \n" + " mcr p15, 0, r10, c7, c7 \n" + " @ restore the registers \n" + " ldr r1,[%0, #0x04] \n" + " ldr r2,[%0, #0x08] \n" + " ldr r4,[%0, #0x10] \n" + " ldr r5,[%0, #0x14] \n" + " ldr r6,[%0, #0x18] \n" + " ldr r7,[%0, #0x1C] \n" + " ldr r8,[%0, #0x20] \n" + " ldr r9,[%0, #0x24] \n" + " ldr r10,[%0, #0x28] \n" + " ldr r11,[%0, #0x2C] \n" + " ldr r12,[%0, #0x30] \n" + " ldr r14,[%0, #0x40] \n" + " ldr r0, [%0, #0x44] \n" + " msr CPSR_fsxc, r0 \n" + " ldr r0, [%0, #0x48] \n" + " msr SPSR_fsxc, r0 \n" + + " ldr r0,[%0, #0x00] \n" + " ldr r3,[%0, #0x0C] \n" + " @ The subbing has already been done! \n" + " @subs pc, lr, #0x04 \n" + " movs pc, lr \n" + " \n" + : + :"r" (g_Registers) + :"r0"); + + + break; + case MODE_SYSTEM: + //Printf("Dunno!!\n"); + break; + case MODE_DUNNO: + default: + //Printf("Dunno!!\n"); + while(1); + } + + + + +} + +/////////////////////////////////////////////////////////////// +// Returns which exception occured based on CSPR +int GetException(unsigned int CSPR) +{ + switch(CSPR & 0x1f) { + case 0x10: // USER + return 0; + case 0x11: // FIQ + return 1; + case 0x12: // IRQ + return 2; + case 0x13: // Supervisor + return 3; + case 0x17: // Abort + return 4; + case 0x1B: // Undefined/Breakpoint + return 5; + case 0x1F: // System + return 6; + default: + return -1; + } +} + + +/////////////////////////////////////////////////////////////// +// Installs the ISR address into the system RAM +void InstallISR() +{ + int *pPointer = (int *)(0x0c7ac040); + int *pPointer2 = (int *)(0x0c7ac018); + + void (*pISR)(); + + pISR = ISR; + + *pPointer = (int)pISR; + *pPointer2 = (int)pISR; + +} + +void DEBUG_Print(char *pFormat, ...) +{ + char Temp[0x100]; + va_list VaList; + int iLength; + int iOffset; + unsigned char MyChar; + + if (!g_GDBConnected) return; + + va_start(VaList , pFormat); + vsnprintf(Temp, 0x100, pFormat , VaList); + va_end(VaList); + + iLength = strlen(Temp); + if (iLength > 100) iLength = 100; + + g_TempBuffer[0] = 'O'; + iOffset = 1; + for (int i = 0; i < iLength; i++) { + MyChar = (unsigned char)Temp[i]; + g_TempBuffer[iOffset++] = HexDigits[(MyChar & 0xf0) >> 4]; + g_TempBuffer[iOffset++] = HexDigits[(MyChar & 0x0f)]; + } + g_TempBuffer[iOffset] = 0; + SendCommand((unsigned char *)g_TempBuffer); + +} + + +/////////////////////////////////////////////////////////////// +// The main thread when the GDB thread has control +void BreakPoint() +{ + unsigned int *pNextInstruction; + bool bBreakLoop = false; + int iResult; + int iMessageLength; + int iOffsetAdd; + int iNullVal = 0; + void *pAddr; + int iOffset; + int iBytes; + + + // Find out if we got here through a STEP command + if (g_LastWasStep) { + #ifdef USE_PRINTF + Printf("I:0x%x 0x%x", *((unsigned int *)(g_Registers[15] + 4)), *((unsigned int *)(g_Registers[15]))); + Printf("S: 0x%x", g_StepAddress); + #endif + if ((unsigned int)g_Registers[15] == g_StepAddress) { + // Yes it was, Lets restore the instruction. + *((unsigned int *)g_StepAddress) = g_SavedStepInstruction; + #ifdef USE_PRINTF + Printf("Restore: 0x%x", g_SavedStepInstruction); + #endif + } else { + while(1); + } + g_LastWasStep = false; + } + + + while(!bBreakLoop) { + iResult = RecvUSB(g_ReadBuffer, 0x100); + //Printf("%d\n", iResult); + + if (iResult > 0) { + // If we recieve a package we can assume that GDB is connected.. or smth..:D + g_GDBConnected = true; + // Well, we have recieved a package, lets print the contents. + iMessageLength = *(int *)&g_ReadBuffer[0]; + g_ReadBuffer[4 + iMessageLength] = 0; + //Printf("%s\n %d", &g_ReadBuffer[4], iMessageLength); + + // Let us also send an ACK '+' + (*(int *)&g_SendBuffer[0]) = 1; + g_SendBuffer[4] = '+'; + SendUSB((const void *)g_SendBuffer, 0x100); + WaitACK(); + + // I can see that i get a bunch of '+' and '-' in the messages.. lets remove them. + iOffsetAdd = 4; + while((g_ReadBuffer[iOffsetAdd] == '+') || (g_ReadBuffer[iOffsetAdd] == '-')) iOffsetAdd++; + + // Check whether it's legimit command + if (g_ReadBuffer[iOffsetAdd] == '$') { + // Well it is! + switch(g_ReadBuffer[iOffsetAdd + 1]) { + case 'H': // Set thread, we're not having any threads.. so.. just return OK + SendCommand((unsigned char *)"OK"); + break; + case 'q': // Query, there are some queries, but GDB first asks for Offsets + switch(g_ReadBuffer[iOffsetAdd + 2]) { + case 'O': // Offsets + SendOffsets(); + break; + case 'C': + SendCommand((unsigned char *)"QC0000"); + //SendBreakPoint(); + break; + + } + break; + case '?': + // This will have to be modified later to send the correct signal. + SendBreakPoint(); + break; + case 'g': + DumpRegisters(); + break; + case 'm': + pAddr = GetAddr(&g_ReadBuffer[iOffsetAdd + 2]); + iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ','); + iBytes = GetBytes(&g_ReadBuffer[iOffsetAdd + 2 + iOffset]); + SendMemory(pAddr, iBytes); + break; + case 'X': //Write memory binary, which we DON't support.. ofcourse. + UnSupportedCommand(); + break; + case 'P': // Write register + { + SendCommand((unsigned char *)"OK"); + + } + break; + case 'M': // Write memory not binary + { + pAddr = GetAddr(&g_ReadBuffer[iOffsetAdd + 2]); + iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ','); + iBytes = GetBytes(&g_ReadBuffer[iOffsetAdd + 2 + iOffset]); + iOffset = FindChar(&g_ReadBuffer[iOffsetAdd + 2], ':'); + WriteMemory(pAddr, iBytes, &g_ReadBuffer[iOffsetAdd + 2 + iOffset + 1]); + SendCommand((unsigned char *)"OK"); + + } + break; + case 'c': // continue + { + return; + + } + break; + + case 's': // Stepping. + { + // Get the address of the next instruction. + pNextInstruction = GetNextInstruction((unsigned int *)g_Registers[15]); + + // Read whatsever there. + g_SavedStepInstruction = *pNextInstruction; + g_StepAddress = (unsigned int)pNextInstruction; + g_LastWasStep = true; + + //Printf("Curr: 0x%x", g_Registers[15]); + #ifdef USE_PRINTF + Printf("Next: 0x%x->0x%x", g_Registers[15], pNextInstruction); + #endif + //Printf("Trap: 0x%x", GetException((unsigned int)g_Registers[40])); + // Write a breakpoint instruction to the address. + *pNextInstruction = 0xe7ffdefe; + return; + + } + break; + case 'Z': // BreakPoint. + { + switch(g_ReadBuffer[iOffsetAdd + 2]) { + case '0': + // Software breakpoint, i think it's up to me to add, it, lets send OK for now. + UnSupportedCommand(); + break; + default: + // We only support software breakpoints for now, lets return unsupported. + // Actually we don't even support SW breakpoints now + UnSupportedCommand(); + break; + } + } + break; + + default: + UnSupportedCommand(); + break; + + } + } + + } + + } + +} + +/////////////////////////////////////////////////////////////// +// Tries to find the next instruction to be executed after a break +unsigned int *GetNextInstruction(unsigned int *pAddr) +{ + unsigned int uiInstruction = *pAddr; + unsigned int uiAndVal = 0; + unsigned int iNewPC = 0; + int iNewAddr = 0; + int iRegsbeforePC = 0; + unsigned int uiBaseRegister = 0; + unsigned int uiRegVal = 0; + unsigned int uiData = 0; + unsigned int uiCondMask = 0; + int iPCOffset = 0; + + unsigned int uiNewPC = DecodeInstruction(uiInstruction, (unsigned int)pAddr); + return (unsigned int *)uiNewPC; + + + // Set new PC to pAddr + 4, because we really hope that is the case...:D + iNewPC = (unsigned int)pAddr; + iNewPC += 4; // Next instruction (atleast in ARM mode, we don't support thumb yet) + + // Now it's a good point to find out if the instruction would be executed anyway. + uiCondMask = (uiInstruction & 0xf0000000) >> 28; + + if (CondWillExecute(uiCondMask, (unsigned int)g_Registers[18])) { + //Printf("Condition will execute"); + // Find out if it's a B or BL instruction. (This is the easy one) + if ((uiInstruction & 0xE000000 ) == 0xA000000) { + #ifdef USE_PRINTF + Printf("0x%x", uiInstruction); + #endif + // Okay, it's a branch instruction, lets get the address it's for + iNewAddr = uiInstruction & 0xffffff; + // We might need to sign extend this instruction. + if ((iNewAddr & 0x00800000) != 0) { + #ifdef USE_PRINTF + printf("Sign extending"); + #endif + //iNewAddr *= -1; + iNewAddr |= 0xff000000; + } + #ifdef USE_PRINTF + Printf("0x%x", iNewAddr); + #endif + iNewAddr *= 4; // Instruction size. + iNewPC = ((int)pAddr + iNewAddr + 8); + } + + // Well, it might be a ldm(ea)? + + if ((uiInstruction & 0xE000000) == 0x8000000) { + #ifdef USE_PRINTF + Printf("LDM"); + #endif + // this is a LDM/STM alright. + if ((uiInstruction & 0x100000) != 0) { + // This is a LDM instruction + // Lets see if the PC is ever loaded. + #ifdef USE_PRINTF + Printf("includes PC"); + #endif + if ((uiInstruction & 0x8000) != 0) { + // Well (damn the PC is loaded) + for (int i = 0; i < 15; i++) { + uiAndVal = 1 << i; + if ((uiInstruction & uiAndVal) != 0) iRegsbeforePC++; + } + #ifdef USE_PRINTF + Printf("%d regs", iRegsbeforePC); + #endif + /* + da = fa + ia = fd + db = ea + ib = ed + */ + // Lets find out which register is used as base for this operation. + uiBaseRegister = (uiInstruction & 0xF0000) >> 16; + uiRegVal = ((unsigned int *)g_Registers)[uiBaseRegister]; + // First, have a look at the U bit. + if ((uiInstruction & (1 << 23)) != 0) { + + // Transfer is made descending + // Which also means that the PC is closest to the base register i just found out. + // Lets check the P bit (If i'm supposed to increment before or after. + + iPCOffset = iRegsbeforePC * 4; + if (((uiInstruction) & (1 << 24)) != 0) iPCOffset += 4; + + } else { + // Transfer is done ascending + // Lets check the P bit (If i'm supposed to decrement before or after. + if (((uiInstruction) & (1 << 24)) != 0) iPCOffset = -4; + } + + + iNewPC = *(unsigned int *)((((int)uiRegVal) + iPCOffset) & ~0x03); + } + } + } + + // Check if it's a mov pc, Rn + + } + + return (unsigned int *)iNewPC; +} + +/////////////////////////////////////////////////////////////// +// Determines if uiCond will be true with this CSPR +bool CondWillExecute(unsigned int uiCond, unsigned int CSPR) +{ + + switch(uiCond) { + case 0: // EQ + // This is true if Z is set in CSPR + if ((CSPR & (1 << 30)) != 0) return true; + else return false; + case 1: // NE + // This should be true if Z is not set. + if ((CSPR & (1 << 30)) == 0) return true; + else return false; + case 2: // CS/HS + // this one should be true if C is set. + if ((CSPR & (1 << 29)) != 0) return true; + else return false; + case 3: // CC/LO + // this one should be true if C is clear. + if ((CSPR & (1 << 29)) == 0) return true; + else return false; + case 4: // MI + // this one should be true if N is set + if ((CSPR & (1 << 31)) != 0) return true; + else return false; + case 5: // PL + // this one should be true if N is clear. + if ((CSPR & (1 << 31)) == 0) return true; + else return false; + case 6: // VS + // this one should be true if V is set + if ((CSPR & (1 << 28)) != 0) return true; + else return false; + case 7: // VC + // this one should be true if V is clear. + if ((CSPR & (1 << 28)) == 0) return true; + else return false; + case 8: // HI + // This is true if C and Z is clear + if (((CSPR & (1 << 30)) == 0) && ((CSPR & (1 << 29)) == 0)) return true; + else return false; + case 9: // LS + // C clear OR Z set + if (((CSPR & (1 << 29)) == 0) || ((CSPR & (1 << 30)) != 0)) return true; + else return false; + case 10: // GE + // N set AND V set || N clear and V clear + if ((CSPR & (1 << 31)) == (CSPR & (1 << 28))) return true; + else return false; + case 11: // LT + // N != V + if ((CSPR & (1 << 31)) != (CSPR & (1 << 28))) return true; + else return false; + case 12: // GT + // Z == 0, N == V + if (((CSPR & (1 << 30)) == 0) && ((CSPR & (1 << 31)) == (CSPR & (1 << 28)))) return true; + else return false; + case 13: // LE + if (((CSPR & (1 << 30)) == 1) && ((CSPR & (1 << 31)) != (CSPR & (1 << 28)))) return true; + else return false; + case 14: // AL + return true; + default: + break; + } + + +} +// I got the idea for this layout from the singlestep.c (found in eCos) +// But i thought the code was a bit tricky to port, and i wanna learn more about this anyway so, i'll just do smth similar to that + + + +typedef struct +{ + unsigned Rm : 4; // Rm + unsigned resv2 : 1; // Reserved 2 (0) + unsigned shift : 2; // hmm.. dunno actually but probably (LSL, LSR, ASR, ROR ) + unsigned amount : 5; // Shift amount 0-31 + unsigned Rd : 4; // Rd + unsigned Rn : 4; // Rn + unsigned s : 1; // S-flag + unsigned opcode : 4; // Opcode (Mov etc) + unsigned resv1 : 3; // Reserved 1 (000) + unsigned cond : 4; // Condition + +} dpisr; // Data Processing Immediate Register Shift +#define DPISR_R1 0 +#define DPISR_R2 0 +// Example Rd, Rm, amount +typedef struct +{ + unsigned Rm : 4; // Rm + unsigned resv3 : 1; // Reserved 3 (1) + unsigned shift : 2; // (LSL, LSR, ASR, ROR ) + unsigned resv2 : 1; // Reserved 2 (0) + unsigned Rs : 4; // Rs + unsigned Rd : 4; // Rd + unsigned Rn : 4; // Rn + unsigned s : 1; // S-flag + unsigned opcode : 4; // Opcode + unsigned resv1 : 3; // Reserved 1 (000) + unsigned cond : 4; // Condition +} dprrs; // Data Processing Register Register Shift +#define DPRRS_R1 0 +#define DPRRS_R2 0 +#define DPRRS_R3 1 +// Example Rd, Rn, Rm Rs +// This intruction is unpredictable if R15 is one of the used registers anyway. +typedef struct +{ + unsigned immed : 8; // Immediate value + unsigned rotate : 4; // rotate + unsigned Rd : 4; // Rd + unsigned Rn : 4; // Rn + unsigned s : 1; // S-flag + unsigned opcode : 4; // Opcode + unsigned resv1 : 3; // Reserved 1 (001) + unsigned cond : 4; // Condition +} dpi; // Data processing immediate +// example add r0, r1, (ror , ) +#define DPI_R1 1 + +typedef struct +{ + unsigned immed : 12; // Immediate + unsigned Rd : 4; // Rd + unsigned Rn : 4; // Rn + unsigned L : 1; // L-bit (Load/Store)? + unsigned W : 1; // W-bit + unsigned B : 1; // B-bit + unsigned U : 1; // U-bit + unsigned p : 1; // P-bit + unsigned resv1 : 3; // Reserved 1 (010) + unsigned cond : 4; // Condition +} lsio; // Load/store immediate offset +// Example ldr Rd, [Rn, #] +#define LSIO_R1 2 + + +typedef struct +{ + unsigned Rm : 4; // Rm + unsigned resv2 : 1; // Reserved 2 (0) + unsigned shift : 2; // Shit type (LSL, LSR, ASR, ROR ) + unsigned amount : 5; // Shift amount (0-31) + unsigned Rd : 4; // Rd + unsigned Rn : 4; // Rn + unsigned L : 1; // L-bit (Load/Store)? + unsigned W : 1; // W-bit + unsigned B : 1; // B-bit + unsigned U : 1; // U-bit + unsigned p : 1; // P-bit + unsigned resv1 : 3; // Reserved 1 (011) + unsigned cond : 4; // Condition +} lsro; // Load/Store register offset +// Example ldr Rd, [Rn + Rm lsl 5] +#define LSRO_R1 3 +#define LSRO_R2 0 + + +typedef struct +{ + unsigned regs : 16; // Register mask + unsigned Rn : 4; // Rn + unsigned L : 1; // L-bit (Load/Store)? + unsigned W : 1; // W-bit + unsigned S : 1; // B-bit + unsigned U : 1; // U-bit + unsigned p : 1; // P-bit + + unsigned resv1 : 3; // Reserved 1 (100) + unsigned cond : 4; // Condition +} lsm; // Load store multiple +// Example: ldm r0, {r1, r2, r3} +#define LSM_R1 4 + +typedef struct +{ + unsigned offset : 24; // Branch offset + unsigned link : 1; // Link flag + unsigned resv1 : 3; // Reserved 1 (101) + unsigned cond : 4; // Condition +} bl; // Branch with link(optional) +#define BL_R1 5 + +typedef union { + dpisr DPISR; + dprrs DPRRS; + dpi DPI; + lsio LSIO; + lsro LSRO; + lsm LSM; + bl BL; + unsigned int uiInstruction; +} Instruction; + +/* +#define DPISR_R1 0 +#define DPISR_R2 0 + + +#define DPRRS_R1 0 +#define DPRRS_R2 0 +#define DPRRS_R3 1 + +#define DPI_R1 1 + +#define LSIO_R1 2 + +#define LSRO_R1 3 +#define LSRO_R2 0 + +#define LSM_R1 4 + +#define BL_R1 5 +*/ + +/* + * Data Processiong Opcode field values + */ +#define OPCODE_MOV 0xD +#define OPCODE_MVN 0xF +#define OPCODE_ADD 0x4 +#define OPCODE_ADC 0x5 +#define OPCODE_SUB 0x2 +#define OPCODE_SBC 0x6 +#define OPCODE_RSB 0x3 +#define OPCODE_RSC 0x7 +#define OPCODE_AND 0x0 +#define OPCODE_EOR 0x1 +#define OPCODE_ORR 0xC +#define OPCODE_BIC 0xE +#define OPCODE_CMP 0xA +#define OPCODE_CMN 0xB +#define OPCODE_TST 0x8 +#define OPCODE_TEQ 0x9 + +/* + * Shift field values + */ +#define SHIFT_LSL 0x0 +#define SHIFT_LSR 0x1 +#define SHIFT_ASR 0x2 +#define SHIFT_ROR 0x3 +#define SHIFT_RRX 0x3 /* Special case: ROR(0) implies RRX */ + + +unsigned int DecodeDPISR(dpisr Instr, unsigned int PC); +unsigned int DecodeDPRRS(dprrs Instr, unsigned int PC); +unsigned int DecodeDPI(dpi Instr, unsigned int PC); +unsigned int DecodeLSIO(lsio Instr, unsigned int PC); +unsigned int DecodeLSRO(lsro Instr, unsigned int PC); +unsigned int DecodeLSM(lsm Instr, unsigned int PC); +unsigned int DecodeBL(bl Instr, unsigned int PC); + + +/////////////////////////////////////////////////////////////// +// +unsigned int DecodeInstruction(unsigned int uiInstruction, unsigned int PC) +{ + Instruction myInstruction; + unsigned int uiCondMask; + + uiCondMask = (uiInstruction & 0xf0000000) >> 28; + + // This instruction can do whatever it wants, but if it doesn't execute we don't give a shit. + if (!CondWillExecute(uiCondMask, (unsigned int)g_Registers[18])) return PC + 4; + //Printf("CondWillExec"); + + myInstruction.uiInstruction = uiInstruction; + + // Start decoding.. phuu + + if ((myInstruction.DPISR.resv1 == DPISR_R1) && (myInstruction.DPISR.resv2 == DPISR_R2)) return DecodeDPISR(myInstruction.DPISR, PC); + else if ((myInstruction.DPRRS.resv1 == DPRRS_R1) && + (myInstruction.DPRRS.resv2 == DPRRS_R2) && + (myInstruction.DPRRS.resv3 == DPRRS_R3)) return DecodeDPRRS(myInstruction.DPRRS, PC); + else if ((myInstruction.DPI.resv1 == DPI_R1)) return DecodeDPI(myInstruction.DPI, PC); + else if ((myInstruction.LSIO.resv1 == LSIO_R1)) return DecodeLSIO(myInstruction.LSIO, PC); + + else if ((myInstruction.LSRO.resv1 == LSRO_R1) && + (myInstruction.LSRO.resv2 == LSRO_R2)) return DecodeLSRO(myInstruction.LSRO, PC); + else if (myInstruction.LSM.resv1 == LSM_R1) return DecodeLSM(myInstruction.LSM, PC); + else if (myInstruction.BL.resv1 == BL_R1) return DecodeBL(myInstruction.BL, PC); + + return 0; +} + +/////////////////////////////////////////////////////////////// +// +unsigned int LSL(unsigned int uiValue, unsigned int uiSteps) +{ + return uiValue << uiSteps; +} + +/////////////////////////////////////////////////////////////// +// +unsigned int LSR(unsigned int uiValue, unsigned int uiSteps) +{ + return uiValue >> uiSteps; +} + +/////////////////////////////////////////////////////////////// +// +// This one could be trickier since, i'm nor sure if a signed shift really is a signed shift. +unsigned int ASR(unsigned int uiValue, unsigned int uiSteps) +{ + unsigned int uiSignMask = 0; + + // Check if it's a negative number + if (uiValue & 0x80000000) { + // Yes, damn + uiSignMask = ((~0) << (32 - uiSteps)); + } + + return ((uiValue >> uiSteps) | uiSignMask); +} + +/////////////////////////////////////////////////////////////// +// +unsigned int ROR(unsigned int uiValue, unsigned int uiSteps) +{ + unsigned int uiRetval; + + while(uiSteps-- > 0) { + if (uiValue & 0x01) { + uiValue = (uiValue >> 1) | 0x80000000; + } else { + uiValue = uiValue >> 1; + } + } + return uiValue; +} + + +/////////////////////////////////////////////////////////////// +// +unsigned int Shift_Operand(unsigned int Rm, unsigned int amount, unsigned int shift) +{ + unsigned int uiRegisterValue; + + + + + uiRegisterValue = g_Registers[Rm]; + if (Rm == 0x0f) { + // Rm is PC, and PC is offseted by 8. + uiRegisterValue += 8; + } + + // Determine the shift mode. + //(LSL, LSR, ASR, ROR ) + switch (shift) { + case 0: // LSL + return LSL(uiRegisterValue, amount); + case 1: // LSR + return LSR(uiRegisterValue, amount); + case 2: // ASR + return ASR(uiRegisterValue, amount); + case 3: // ROR + return ROR(uiRegisterValue, amount); + default: + break; + } + return 0; +} + +/////////////////////////////////////////////////////////////// +// +// Example Rd, Rm, amount +unsigned int DecodeDPISR(dpisr Instr, unsigned int uiPC) +{ + unsigned int uiOperand = Shift_Operand(Instr.Rm, Instr.amount, Instr.shift); + unsigned int uiRnVal = g_Registers[Instr.Rn]; + + + + // Only do this i Pc is Rd + if (Instr.Rd != 0x0f) return uiPC + 4; + + // The actual value that PC contains when executing this instruction is the instruction address+8 + if (Instr.Rn == 0x0f) uiRnVal += 8; + + // Check what opcode it is! + switch (Instr.opcode) { + case OPCODE_MOV: + return uiOperand; + case OPCODE_MVN: + return ~uiOperand; + case OPCODE_ADD: + return uiRnVal + uiOperand; + case OPCODE_ADC: + return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); + case OPCODE_SUB: + return uiRnVal - uiOperand; + case OPCODE_SBC: + return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_RSB: + return uiOperand - uiRnVal; + case OPCODE_RSC: + return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_AND: + return (uiRnVal & uiOperand); + case OPCODE_EOR: + return (uiRnVal^uiOperand); + case OPCODE_ORR: + return (uiRnVal | uiOperand); + case OPCODE_BIC: + return (uiRnVal & ~uiOperand); + default: + return 0; + } +} + + +/////////////////////////////////////////////////////////////// +// +//dprrs; // Data Processing Register Register Shift +// Example Rd, Rn, Rm Rs +unsigned int DecodeDPRRS(dprrs Instr, unsigned int uiPC) +{ + unsigned int uiRmValue = g_Registers[Instr.Rm]; + unsigned int uiRsValue = g_Registers[Instr.Rs]; + unsigned int uiRnVal = g_Registers[Instr.Rn]; + if ((Instr.Rm = 0x0f)) uiRmValue += 8; + + + unsigned int uiOperand = Shift_Operand(uiRmValue, uiRsValue, Instr.shift); + + // Check if destination is PC + if (Instr.Rd != 0x0f) return uiPC + 4; + if ((Instr.Rn = 0x0f)) uiRnVal += 8; + + // Check what opcode it is! + switch (Instr.opcode) { + case OPCODE_MOV: + return uiOperand; + case OPCODE_MVN: + return ~uiOperand; + case OPCODE_ADD: + return uiRnVal + uiOperand; + case OPCODE_ADC: + return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); + case OPCODE_SUB: + return uiRnVal - uiOperand; + case OPCODE_SBC: + return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_RSB: + return uiOperand - uiRnVal; + case OPCODE_RSC: + return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_AND: + return (uiRnVal & uiOperand); + case OPCODE_EOR: + return (uiRnVal^uiOperand); + case OPCODE_ORR: + return (uiRnVal | uiOperand); + case OPCODE_BIC: + return (uiRnVal & ~uiOperand); + default: + return 0; + } + +} + +/////////////////////////////////////////////////////////////// +// +// dpi; // Data processing immediate +// example add r0, r1, (ror , ) +unsigned int DecodeDPI(dpi Instr, unsigned int uiPC) +{ + unsigned int uiOperand = (ROR(Instr.immed, Instr.rotate << 1)); + unsigned int uiRnVal = g_Registers[Instr.Rn]; + + // Check if PC is destination + if (Instr.Rd != 0x0f) return uiPC + 4; // Next instruction + if ((Instr.Rn = 0x0f)) uiRnVal += 8; + + // Check what opcode it is! + switch ((Instr.opcode)) { + case OPCODE_MOV: + return uiOperand; + case OPCODE_MVN: + return ~uiOperand; + case OPCODE_ADD: + return uiRnVal + uiOperand; + case OPCODE_ADC: + return uiRnVal + uiOperand + (((g_Registers[18] & (1 << 29))) == 0?0:1); + case OPCODE_SUB: + return uiRnVal - uiOperand; + case OPCODE_SBC: + return uiRnVal - uiOperand - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_RSB: + return uiOperand - uiRnVal; + case OPCODE_RSC: + return uiOperand - uiRnVal - (((g_Registers[18] & (1 << 29))) == 0?1:0); + case OPCODE_AND: + return (uiRnVal & uiOperand); + case OPCODE_EOR: + return (uiRnVal^uiOperand); + case OPCODE_ORR: + return (uiRnVal | uiOperand); + case OPCODE_BIC: + return (uiRnVal & ~uiOperand); + default: + return 0; + } + +} + +/////////////////////////////////////////////////////////////// +// +// lsio; // Load/store immediate offset +// Example ldr Rd, [Rn, #] +unsigned int DecodeLSIO(lsio Instr, unsigned int uiPC) +{ + unsigned int uiRnValue = g_Registers[Instr.Rn]; + unsigned int uiMemValue; + + // Check if destination is PC + if (Instr.Rd != 0x0f) return uiPC + 4; + // Check if it's a LDR instruction + if (Instr.L != 1) return uiPC + 4; + + if (Instr.Rn == 0x0f) uiRnValue += 8; + + // Check if it's pre-indexed + if (Instr.p == 1){ + + if (Instr.U == 1) { + // Add offset + uiRnValue += Instr.immed; + } else { + // Sub offset + uiRnValue -= Instr.immed; + } + } + + uiMemValue = *(unsigned int *)(uiRnValue); + + return uiMemValue; + +} + +/////////////////////////////////////////////////////////////// +// +// lsro; // Load/Store register offset +// Example ldr Rd, [Rn + Rm lsl 5] +unsigned int DecodeLSRO(lsro Instr, unsigned int uiPC) +{ + unsigned int uiRnValue = g_Registers[Instr.Rn]; + unsigned int uiRmValue = g_Registers[Instr.Rm]; + unsigned int uiIndex; + unsigned int uiMemValue; + + if (Instr.Rm == 0x0f) uiRmValue += 8; + if (Instr.Rn == 0x0f) uiRnValue += 8; + + // Check if destination is PC and that it's LDR instruction + if ((Instr.Rd != 0x0f) || (Instr.L != 1)) return uiPC + 4; + + uiIndex = Shift_Operand(Instr.Rm, Instr.amount, Instr.shift); + + if (Instr.p == 1){ + + if (Instr.U == 1) { + // Add offset + uiRnValue += uiIndex; + } else { + // Sub offset + uiRnValue -= uiIndex; + } + } + + uiMemValue = *(unsigned int *)(uiRnValue); + + return uiMemValue; + + +} +/////////////////////////////////////////////////////////////// +// +// lsm; // Load store multiple +// Example: ldm r0, {r1, r2, r3} +unsigned int DecodeLSM(lsm Instr, unsigned int uiPC) +{ + unsigned int uiRnValue = g_Registers[Instr.Rn]; + unsigned int uiOffsetToPC = 0; + unsigned int uiMemValue; + + // Make sure PC is destination and it's Load instruction + if (((Instr.regs & (1 << 15)) == 0) || (Instr.L != 1)) return uiPC + 4; + + + // Check if U bit it set + if (Instr.U == 0) { + // This means that it's ascending + // Also means that the PC is closest to Rn + if (Instr.p == 1) { + // Pre decrement. + uiOffsetToPC -= 4; + } else { + uiOffsetToPC = 0; + } + } else { + // The stack is descending, that means that the PC is as far away as possible. + // Lets find out how many registers before it. + for (int i = 0; i < 15; i++) { + if ((Instr.regs & (1 << i)) != 0) uiOffsetToPC += 4; + } + + // If the P bit is set, it uses pre increment + if (Instr.p == 1) uiOffsetToPC += 4; + } + + // read from out calculated address. + uiMemValue = *(unsigned int *)((uiRnValue + uiOffsetToPC) & ~0x03); + + return uiMemValue; + +} + +/////////////////////////////////////////////////////////////// +// +// bl; // Branch with link(optional) +unsigned int DecodeBL(bl Instr, unsigned int uiPC) +{ + //Printf("Decode BL"); + unsigned int uiAddress; + + uiAddress = Instr.offset; + if (uiAddress & 0x00800000) { + uiAddress |= 0xff000000; + } + + uiAddress <<= 2; + uiAddress += 8; + + return uiPC + uiAddress; + +} diff --git a/backends/platform/gp32/fontdata.c b/backends/platform/gp32/fontdata.c new file mode 100644 index 0000000000..f2d833088d --- /dev/null +++ b/backends/platform/gp32/fontdata.c @@ -0,0 +1,284 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +const unsigned char fontresEng1[] = +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x81,0xA5,0x81,0x81,0xBD,0x81,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0xFF,0xDB,0xFF,0xFF,0xC3,0xFF,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x36,0x7F,0x7F,0x7F,0x7F,0x3E,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x3E,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x3C,0x7E,0x66,0x7E,0x18,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x3C,0x7E,0x7E,0x3C,0x18,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xFF,0xFF,0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF,0xFF,0xFF,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0F,0x07,0x0D,0x19,0x3C,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x33,0x3C,0x33,0x30,0x70,0xF0,0x70,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7F,0x63,0x7F,0x63,0x63,0x67,0xE7,0xE6,0xC0,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0xDB,0x3C,0xE7,0x3C,0xDB,0x18,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0x60,0x70,0x7C,0x7F,0x7C,0x70,0x60,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x03,0x07,0x1F,0x7F,0x1F,0x07,0x03,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x33,0x00,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7F,0xDB,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x3E,0x63,0x30,0x1C,0x36,0x63,0x63,0x36,0x1C,0x06,0x63,0x3E,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x7F,0x06,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x18,0x30,0x7F,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x7F,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x08,0x1C,0x1C,0x3E,0x3E,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7F,0x7F,0x3E,0x3E,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00,0x00, + 0x00,0x18,0x18,0x3C,0x66,0x60,0x3C,0x06,0x06,0x66,0x3C,0x18,0x18,0x00,0x00,0x00, + 0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x30,0x63,0x43,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x0C,0x06,0x06,0x06,0x06,0x0C,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x76,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x06,0x1C,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0x6C,0x7E,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x60,0x60,0x7C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x06,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x6E,0x6E,0x60,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x60,0x60,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x6C,0x78,0x70,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x63,0x77,0x7F,0x6B,0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x76,0x7E,0x6E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x04,0x06,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x60,0x3C,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, + 0x00,0x00,0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3C,0x66,0x60,0x78,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x77,0x7F,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6C,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6E,0x78,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x38,0x0C,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x30,0x30,0x7C,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0x18,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x7F,0x00,0x00,0x00,0x00,0x00, + 0x00,0x3C,0x66,0xC2,0xC0,0xC2,0x66,0x3C,0x18,0x0E,0x0C,0x78,0x00,0x00,0x00,0x00, + 0x00,0x00,0x66,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x06,0x0C,0x18,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x08,0x1C,0x36,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x30,0x18,0x0C,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1C,0x36,0x1C,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x0C,0x06,0x3C,0x00,0x00,0x00, + 0x00,0x00,0x08,0x1C,0x36,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x30,0x18,0x0C,0x00,0x3E,0x63,0x7F,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x66,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x3C,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x63,0x63,0x08,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x00,0x00,0x00,0x00, + 0x00,0x1C,0x36,0x1C,0x00,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x00,0x00,0x00,0x00, + 0x00,0x0C,0x18,0x30,0x00,0x7F,0x33,0x30,0x3E,0x30,0x33,0x7F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x1B,0x7E,0xD8,0xDC,0x77,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1F,0x36,0x66,0x66,0x7F,0x66,0x66,0x66,0x67,0x00,0x00,0x00,0x00, + 0x00,0x00,0x08,0x1C,0x36,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x63,0x63,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x30,0x18,0x0C,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x3C,0x66,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x30,0x18,0x0C,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x63,0x63,0x00,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00, + 0x00,0x00,0x63,0x63,0x1C,0x36,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x63,0x63,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x18,0x18,0x7E,0xC3,0xC0,0xC0,0xC3,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0x1C,0x36,0x32,0x30,0x78,0x30,0x30,0x30,0x73,0x7E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0x66,0x3C,0x18,0xFF,0x18,0xFF,0x18,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0xFC,0x66,0x66,0x7C,0x62,0x66,0x6F,0x66,0x66,0xF3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0E,0x1B,0x18,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0xD8,0x70,0x00,0x00, + 0x00,0x00,0x0C,0x18,0x30,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x18,0x30,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x18,0x30,0x00,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3B,0x6E,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00, + 0x00,0x3B,0x6E,0x00,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x00,0x00,0x00,0x00, + 0x00,0x00,0x3C,0x6C,0x6C,0x3E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x38,0x6C,0x6C,0x38,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x60,0xE0,0x63,0x66,0x6C,0x18,0x30,0x6E,0xC3,0x06,0x0C,0x1F,0x00,0x00, + 0x00,0x00,0x60,0xE0,0x63,0x66,0x6C,0x18,0x33,0x67,0xCF,0x1F,0x03,0x03,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x3C,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x1B,0x36,0x6C,0x36,0x1B,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6C,0x36,0x1B,0x36,0x6C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11, + 0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55, + 0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x36,0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, + 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x6E,0x6C,0x6C,0x6E,0x3B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x7E,0x63,0x63,0x7E,0x60,0x60,0x20,0x00,0x00, + 0x00,0x00,0x00,0x7F,0x63,0x63,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7F,0x63,0x30,0x18,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x6C,0x6C,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x60,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3F,0x6C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7E,0x18,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x7F,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x36,0x36,0x36,0x77,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1E,0x30,0x18,0x0C,0x3E,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x03,0x06,0x7E,0xDB,0xDB,0xF3,0x7E,0x60,0xC0,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x1C,0x30,0x60,0x60,0x7C,0x60,0x60,0x30,0x1C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0xFF,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,0x7E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,0x7E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, + 0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0xFF,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3B,0x6E,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x38,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0F,0x0C,0x0C,0x0C,0x0C,0x0C,0xEC,0x6C,0x3C,0x1C,0x00,0x00,0x00,0x00, + 0x00,0x00,0xD8,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x70,0xD8,0x30,0x60,0xC8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; diff --git a/backends/platform/gp32/gfx_splash.h b/backends/platform/gp32/gfx_splash.h new file mode 100644 index 0000000000..c83ecffb0e --- /dev/null +++ b/backends/platform/gp32/gfx_splash.h @@ -0,0 +1,4869 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +///////////////////////////////////////// +// +// Header file for GP32 +// +// convertion of gfx_splash.bmp file : +// Width = 320 +// Heigth = 240 +// GP32 Mode = 8 Bits per Pixel +// +// with GP32Converter coded by Edorul : +// http://www.ifrance.com/edorul/ +// edorul@free.fr +// +///////////////////////////////////////// + +#define gfx_splash_width 320 +#define gfx_splash_height 240 + +#define gfx_splash_palnb 256 + +#include + +GP_PALETTEENTRY gfx_splash_Pal[256] = { + 0x843, 0x88B, 0x1941, 0x110D, 0x2883, 0x30C9, 0x2945, 0x2109, 0x214D, 0x2989, 0x218F, 0x3149, 0x394D, 0x3989, 0x318D, 0x8D1, + 0x1153, 0x9D9, 0x2993, 0x29DB, 0x1A01, 0x3243, 0x3A4B, 0x3B01, 0x1A15, 0x125B, 0x3255, 0x329B, 0x3B17, 0x331D, 0x40C3, 0x4145, + 0x498B, 0x6987, 0x61C9, 0x49D1, 0x4285, 0x524D, 0x4B43, 0x530D, 0x6207, 0x624D, 0x6307, 0x6B4B, 0x4211, 0x4A55, 0x4A93, 0x4297, + 0x5251, 0x5255, 0x5293, 0x5295, 0x4ADB, 0x5313, 0x535D, 0x6AD3, 0x62D9, 0x7355, 0x6319, 0x6B5D, 0x6B9B, 0x639F, 0x7359, 0x735D, + 0x739B, 0x7B9F, 0x32E1, 0x3B63, 0x4AA3, 0x52E9, 0x4BA3, 0x53A9, 0x6BE3, 0x6BA9, 0x7BF1, 0x7C4D, 0x5C1F, 0x7417, 0x741B, 0x5C25, + 0x54AB, 0x552F, 0x6C65, 0x6CAB, 0x7D27, 0x752D, 0x54F1, 0x5D35, 0x5D79, 0x6CF1, 0x6D75, 0x6DB9, 0x7E35, 0x763B, 0x89CF, 0xB085, + 0xA909, 0xA98D, 0xB14B, 0xB1CF, 0x8207, 0x834F, 0x8A53, 0x8AD3, 0x8A95, 0x9253, 0x9295, 0x8395, 0x8359, 0x835D, 0x83D9, 0x83DD, + 0x9359, 0x93D9, 0x93DD, 0xAA11, 0xA2D7, 0xB253, 0xBA95, 0xA393, 0xAB19, 0xABDB, 0xA3DF, 0xB319, 0xB3DF, 0xC001, 0xC8C7, 0xD843, + 0xD885, 0xC909, 0xC18D, 0xD14B, 0xD9CF, 0xE001, 0xE8C7, 0xF801, 0xF885, 0xF14B, 0xD295, 0xCB19, 0xC39D, 0xDB19, 0xD3DF, 0xF295, + 0xE319, 0xEB9D, 0xF35B, 0xFBDF, 0x83E1, 0x8C4D, 0x8C15, 0x945D, 0x9D53, 0x951F, 0xAC57, 0xAC9D, 0xA595, 0xB55D, 0xD517, 0xCD5B, + 0xE59B, 0xD65B, 0xE69B, 0x8421, 0x8C65, 0x8CA3, 0x84E7, 0x9461, 0x9465, 0x9CA1, 0x94A5, 0x8CAB, 0x9D25, 0x8D6D, 0xA463, 0xA4E1, + 0xA4E5, 0xB421, 0xB4E1, 0xB4A5, 0xA4E9, 0xAD65, 0xA529, 0xAD6D, 0xADAB, 0xADAD, 0xB56B, 0xB56D, 0xB5AB, 0xB5AD, 0x94F3, 0x8DB3, + 0x8DF9, 0xADB5, 0xA5F9, 0x9E27, 0x962D, 0xB665, 0xB62D, 0xBF25, 0xB729, 0x9675, 0x8EBD, 0x9F37, 0x9F3D, 0xA675, 0xAEB9, 0xAF37, + 0xAF7D, 0xCC63, 0xC4E7, 0xD463, 0xD4E7, 0xC5A5, 0xC569, 0xC5E9, 0xC5ED, 0xD529, 0xDD6D, 0xD5E9, 0xD5EF, 0xF463, 0xE5E1, 0xEDAD, + 0xD5F1, 0xCE67, 0xCE2D, 0xCF65, 0xCF6B, 0xE623, 0xE6AB, 0xEFE5, 0xEF2F, 0xC631, 0xCE75, 0xCEB3, 0xCEB7, 0xDE31, 0xD675, 0xD6B3, + 0xDEB7, 0xD6F9, 0xDF35, 0xCFBD, 0xEEB3, 0xE6F9, 0xEF77, 0xE739, 0xEF7D, 0xEFBB, 0xEFFF, 0xFF79, 0xFFB9, 0xFFFF, 0x1, 0x1 + +}; + +unsigned char gfx_splash[76800] = { + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF6, 0x4E, 0xBC, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0xE, + 0xFD, 0xF9, 0x3A, 0xE, 0x33, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xF7, 0xF8, 0x99, 0x2, 0x15, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF7, + 0xFD, 0x94, 0xE, 0xE, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xE9, 0xEF, 0x99, 0x14, 0x17, 0x15, 0x99, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, + 0xE9, 0xE, 0xE, 0xB7, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xE9, 0xB8, 0xAC, 0x24, 0x15, 0x14, 0x17, 0x27, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, + 0xF0, 0x97, 0x27, 0x4D, 0xC6, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, 0xE, + 0xE, 0xE, 0x3A, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, + 0xB8, 0x27, 0x15, 0x2, 0x2, 0x2, 0x17, 0x24, 0x35, 0xF9, 0xFD, 0xFD, 0xF8, 0xF0, 0xF0, 0xD8, + 0x2C, 0x0, 0x6, 0x2, 0x2, 0x16, 0x4D, 0xBC, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x3A, + 0xE, 0x33, 0xF5, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, + 0xAC, 0x15, 0x2, 0x15, 0x17, 0x15, 0x17, 0x26, 0x16, 0xF2, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0x4D, + 0x2, 0x14, 0x14, 0x14, 0x2, 0x2, 0x2, 0x2, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, 0xBD, 0xBD, + 0xAC, 0x24, 0x17, 0x17, 0x15, 0x26, 0x26, 0x26, 0x24, 0xF2, 0xF9, 0xF0, 0xE9, 0xBD, 0xB6, 0x16, + 0x24, 0x24, 0x15, 0x15, 0x15, 0x17, 0x24, 0x14, 0x2, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xAC, 0x27, 0x17, 0x15, 0x15, 0x26, 0x26, 0x26, 0x24, 0xEB, 0xF7, 0xEE, 0xBD, 0xBD, 0xB6, 0x27, + 0x26, 0x26, 0x17, 0x15, 0x15, 0x24, 0x15, 0x14, 0x15, 0x2, 0x4E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xB6, + 0x27, 0x24, 0x15, 0x15, 0x2, 0x24, 0x26, 0x26, 0x26, 0x27, 0xC6, 0xEE, 0xBD, 0xBD, 0xB8, 0x35, + 0x26, 0x26, 0x15, 0x14, 0x15, 0x15, 0x15, 0x2, 0x14, 0x17, 0x24, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xB6, + 0x27, 0x15, 0x15, 0x2, 0x2, 0x2, 0x14, 0x15, 0x17, 0x26, 0x27, 0xC6, 0xD8, 0xBD, 0xBD, 0x4D, + 0x15, 0x17, 0x17, 0x16, 0x35, 0x16, 0x14, 0x14, 0x15, 0x17, 0x15, 0x24, 0xB8, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, + 0xAC, 0x27, 0x26, 0x2, 0x2, 0x0, 0x2, 0x26, 0x17, 0x26, 0x15, 0x4D, 0xD8, 0xBD, 0xBD, 0xAC, + 0x6, 0x15, 0x17, 0x27, 0xB6, 0xAA, 0x39, 0x6, 0x14, 0x17, 0x26, 0x26, 0x27, 0xEF, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, + 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xBD, + 0xB8, 0xB5, 0x4E, 0x6, 0x15, 0x14, 0x2, 0x14, 0x26, 0x26, 0x17, 0x15, 0x4D, 0xAC, 0xBC, 0x39, + 0x2, 0x14, 0x17, 0x24, 0xB5, 0xBD, 0xB7, 0x40, 0x6, 0x24, 0x26, 0x26, 0x24, 0xAC, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, + 0xBD, 0xBD, 0xB8, 0x27, 0x17, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x15, 0x2, 0x6, 0x27, 0x6, + 0x2, 0x2, 0x17, 0x24, 0xB5, 0xBD, 0xBD, 0xB6, 0x16, 0x15, 0x26, 0x17, 0x17, 0x4E, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, + 0xD8, 0xBD, 0xBD, 0x4E, 0x15, 0x17, 0x14, 0x14, 0x14, 0x17, 0x26, 0x17, 0x15, 0x14, 0x2, 0x2, + 0x2, 0x2, 0x15, 0x15, 0x4E, 0xBD, 0xBD, 0xBD, 0x6F, 0x15, 0x24, 0x14, 0x2, 0x27, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xA3, + 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xBD, 0xBD, 0xB6, 0x16, 0x14, 0x14, 0x14, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, 0x15, 0x15, + 0x15, 0x15, 0x15, 0x15, 0x39, 0xE9, 0xBD, 0xBD, 0xB4, 0x16, 0x24, 0x14, 0x2, 0x2, 0x35, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xA3, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, + 0xEE, 0xBD, 0xBD, 0xBD, 0x4E, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x17, 0x15, 0x14, 0x15, 0x17, + 0x17, 0x17, 0x17, 0x17, 0x39, 0xE9, 0xBD, 0xBD, 0xA9, 0x16, 0x17, 0x15, 0x15, 0x2, 0x6, 0xB8, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x41, + 0xE, 0xE, 0xE, 0xA3, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xE9, 0xBD, 0xBD, 0xB6, 0x25, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x2, 0x2, 0x2, 0x15, + 0x15, 0x17, 0x17, 0x15, 0x4E, 0xE9, 0xBD, 0xBD, 0x39, 0x2, 0x17, 0x17, 0x17, 0x15, 0x15, 0x4E, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xE, 0xAA, 0x2C, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF8, 0xEE, 0xD8, 0xBD, 0xBD, 0xA5, 0x15, 0x15, 0x14, 0x14, 0x17, 0x15, 0x14, 0x14, 0x2, 0x2, + 0x2, 0x14, 0x15, 0x16, 0xBC, 0xE9, 0xAC, 0x4E, 0x27, 0x2, 0x14, 0x17, 0x26, 0x15, 0x15, 0x4E, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xE, 0xE9, 0xBD, 0x38, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xB8, 0x4E, 0x6, 0x2, 0x14, 0x15, 0x15, 0x15, 0x14, 0x14, 0x2, + 0x2, 0x2, 0x14, 0x35, 0xD8, 0xA5, 0x16, 0x2, 0x2, 0x2, 0x14, 0x15, 0x15, 0x14, 0x2, 0x40, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xB7, 0x4E, 0x9, 0x15, 0x14, 0x2, 0x0, 0x2, 0x2, 0x2, + 0x2, 0x15, 0x16, 0xB6, 0xB8, 0x27, 0x14, 0x17, 0x2, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x27, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, + 0x33, 0x3A, 0x41, 0xA8, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF5, 0xEA, 0xD8, 0xBD, 0xB7, 0xAA, 0x35, 0x6, 0x2, 0x14, 0x14, 0x14, 0x15, + 0x15, 0x16, 0xA5, 0xB6, 0x2E, 0x6, 0x14, 0x17, 0x17, 0x15, 0x17, 0x17, 0x26, 0x26, 0x17, 0x27, + 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xBD, 0xA5, 0x35, 0x16, 0x16, 0x16, 0x16, + 0x3C, 0xB8, 0xBD, 0xB4, 0x9, 0x2, 0x2, 0x15, 0x17, 0x17, 0x26, 0x24, 0x15, 0x26, 0x15, 0x24, + 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xEA, 0xE9, 0xE9, 0xE9, 0xE9, 0xEB, 0xEB, 0xEB, + 0xEA, 0xD8, 0xBD, 0xB7, 0x35, 0x16, 0x2, 0x15, 0x24, 0x24, 0x26, 0x26, 0x15, 0x15, 0x17, 0x39, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF7, 0xF7, 0xF8, 0xF9, 0xFD, 0xFD, 0xF9, + 0xF5, 0xEA, 0xD8, 0xBD, 0xB6, 0xA9, 0x16, 0x15, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x24, 0xC6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, + 0x41, 0xE, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF7, 0xEA, 0xD8, 0xBD, 0xBD, 0xA5, 0x27, 0x27, 0x27, 0x17, 0x26, 0x26, 0x15, 0x99, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xE, 0xF7, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF2, 0xF2, 0xF2, 0xF2, + 0xF2, 0xEF, 0xE9, 0xE9, 0xEE, 0xE9, 0xD8, 0xB8, 0xBC, 0xBC, 0x4D, 0x24, 0x24, 0xB5, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, + 0x31, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xE9, 0x99, 0x4D, 0x16, 0x6, 0x9, 0x6, + 0x6, 0x6, 0x15, 0x27, 0x40, 0xB6, 0xD8, 0xE9, 0xEE, 0xF5, 0xF5, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0x31, 0x3F, 0x41, 0xF8, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xB5, 0x39, 0x16, 0x2, 0x2, 0x2, 0x2, 0x14, 0x14, + 0x14, 0x14, 0x14, 0x2, 0x2, 0x2, 0x16, 0x4D, 0xEB, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA8, + 0xF9, 0xF0, 0xE, 0xE, 0xE, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0x99, 0x15, 0x2, 0x2, 0x14, 0x15, 0x26, 0x26, 0x24, 0x15, + 0x15, 0x17, 0x26, 0x17, 0x15, 0x15, 0x15, 0x2, 0x16, 0xC5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xB6, 0xE, 0x2C, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0x99, 0x15, 0x2, 0x2, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x15, + 0x2, 0x14, 0x24, 0x15, 0x15, 0x15, 0x17, 0x17, 0x15, 0x24, 0xB5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF5, 0xE9, 0xBD, 0x99, 0x15, 0x2, 0x14, 0x15, 0x2, 0x2, 0x15, 0x24, 0x26, 0x26, 0x24, + 0x15, 0x14, 0x15, 0x15, 0x14, 0x15, 0x17, 0x15, 0x15, 0x26, 0x15, 0x4D, 0xF9, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xE9, 0xBD, 0xB6, 0x27, 0x2, 0x15, 0x26, 0x15, 0x2, 0x2, 0x2, 0x15, 0x15, 0x17, 0x24, + 0x24, 0x24, 0x17, 0x15, 0x15, 0x17, 0x15, 0x2, 0x15, 0x26, 0x26, 0x15, 0xBC, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, + 0xEE, 0xD8, 0xBD, 0x6F, 0x2, 0x2, 0x26, 0x26, 0x15, 0x24, 0x17, 0x14, 0x15, 0x15, 0x2, 0x15, + 0x24, 0x24, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x17, 0x14, 0x14, 0x16, 0xE9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xBD, 0xBD, 0x2E, 0x0, 0x14, 0x26, 0x26, 0x15, 0x26, 0x17, 0x17, 0x17, 0x17, 0x15, 0x17, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x14, 0x15, 0x26, 0x15, 0x2C, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, + 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x38, 0xA3, 0xB4, 0xE9, 0xE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xD8, 0xBD, 0xB6, 0x16, 0x0, 0x2, 0x24, 0x17, 0x2, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x15, 0x17, 0x26, 0x15, 0x9, 0xF0, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xBD, 0xB4, 0xA3, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, + 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x0, 0x2, 0x26, 0x26, 0x26, 0x17, 0x17, 0x17, 0x15, 0x15, 0x17, + 0x2, 0x14, 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x14, 0x26, 0x26, 0x26, 0x24, 0x6, 0xB8, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x14, 0x2, 0x14, 0x26, 0x26, 0x17, 0x17, 0x17, 0x15, 0x14, 0x17, + 0x2, 0x40, 0xAC, 0xAC, 0x4D, 0x16, 0x2, 0x15, 0x14, 0x24, 0x26, 0x26, 0x17, 0x15, 0x2E, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xF9, 0xA8, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x15, 0x14, 0x15, 0x39, 0x27, + 0x4E, 0xD8, 0xD8, 0xBD, 0xBD, 0xAC, 0x27, 0x2, 0x0, 0x14, 0x26, 0x17, 0x17, 0x17, 0x15, 0xBC, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x17, 0x15, 0x14, 0x14, 0x17, 0x24, 0x14, 0x2, 0xAC, 0xF9, 0xF6, + 0xF9, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, 0xB6, 0x40, 0x2, 0x2, 0x24, 0x14, 0x15, 0x17, 0x15, 0x4E, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAA, 0x6, 0x2, 0x14, 0x14, 0x14, 0x14, 0x15, 0x14, 0x24, 0x27, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x24, 0x14, 0x2, 0x14, 0x14, 0x2E, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x4E, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xA9, 0x2, 0x14, 0x17, 0x15, 0x15, 0x14, 0x2, 0x16, + 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, + 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x2C, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xE9, 0xB8, 0xB6, 0xAC, 0x27, 0x2, 0x15, 0x26, 0x17, 0x17, 0x15, 0x15, 0x39, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, + 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, + 0xBD, 0xBD, 0xB8, 0x27, 0x2, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x15, 0x9, 0xF0, 0xF9, 0xF8, + 0xF7, 0xF7, 0x4E, 0x6, 0x6, 0x9, 0x16, 0x2, 0x15, 0x24, 0x15, 0x17, 0x26, 0x15, 0x15, 0x99, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xD8, 0xBD, 0xBD, 0x35, 0x2, 0x2, 0x2, 0x2, 0x2, 0x15, 0x24, 0x2, 0x9, 0xEF, 0xF7, 0xE9, + 0xB8, 0xBC, 0x4E, 0x2, 0x14, 0x15, 0x15, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x14, 0x6, 0xEB, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, + 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xBD, 0xBD, 0xAA, 0x6, 0x2, 0x14, 0x15, 0x6, 0x15, 0x14, 0x2, 0x2, 0xBD, 0xE9, 0x2E, + 0x2, 0x6, 0x15, 0x14, 0x14, 0x2, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0xF2, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, + 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xEA, 0xBD, 0xBD, 0xB8, 0x4E, 0x6, 0x24, 0x6, 0x14, 0x15, 0x14, 0x2, 0x2, 0x4E, 0xB6, 0x6, + 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x17, 0x17, 0x17, 0x17, 0x15, 0x17, 0x17, 0x15, 0x4E, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, + 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF5, 0xE9, 0xBD, 0xBD, 0xB8, 0x97, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x39, 0xB6, 0x9, + 0x2, 0x2, 0x2, 0x2, 0x6, 0x2, 0x15, 0x17, 0x17, 0x17, 0x26, 0x26, 0x24, 0x16, 0xF2, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, + 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xB8, 0x4E, 0x15, 0x17, 0x17, 0x17, 0x17, 0x14, 0x3C, 0xD8, 0xB6, + 0x3C, 0x35, 0x35, 0x4E, 0xAA, 0x4E, 0x2, 0x15, 0x24, 0x24, 0x26, 0x26, 0x17, 0x4D, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF5, 0xE9, 0xD8, 0xBD, 0xB8, 0xA5, 0x16, 0x15, 0x17, 0x15, 0x27, 0xE9, 0xF5, 0xF7, + 0xF5, 0xAC, 0x6, 0x6, 0x97, 0x4E, 0x2, 0x24, 0x15, 0x17, 0x26, 0x26, 0x15, 0xBC, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF7, 0xEE, 0xE9, 0xD8, 0xE9, 0xC6, 0x99, 0x4E, 0x99, 0xF2, 0xF9, 0xFD, 0xFD, + 0xF9, 0xAC, 0x2, 0x15, 0x16, 0xAA, 0x35, 0x16, 0x27, 0x27, 0x24, 0x24, 0x4D, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF0, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF2, 0x35, 0x16, 0x35, 0xD8, 0xD8, 0xBC, 0xEB, 0xF2, 0xF2, 0xF2, 0xF9, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF7, 0xEB, 0x99, 0x4E, 0x4D, 0x4D, 0x4D, 0x4E, 0xAC, 0xEF, + 0xF6, 0xF9, 0xF5, 0xEB, 0xF0, 0xF7, 0xF7, 0xF7, 0xEF, 0xC6, 0xF2, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xC6, 0x4D, 0x6, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x6, + 0x16, 0x4D, 0x99, 0xEB, 0xEB, 0xEF, 0xF7, 0xEF, 0x35, 0x6, 0x24, 0x27, 0x97, 0xF6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF7, 0xF0, 0xE9, 0xB5, 0x24, 0x2, 0x14, 0x17, 0x17, 0x26, 0x26, 0x17, 0x24, 0x15, 0x2, + 0x2, 0x2, 0x2, 0x6, 0x6, 0x16, 0x4D, 0x16, 0x2, 0x14, 0x26, 0x14, 0x14, 0x27, 0xEB, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB3, 0xD6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, + 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x94, 0x31, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xEE, 0xE9, 0xB8, 0x27, 0x2, 0x15, 0x26, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x15, + 0x2, 0x14, 0x15, 0x15, 0x2, 0x2, 0x2, 0x2, 0x14, 0x17, 0x26, 0x17, 0x15, 0x17, 0x4D, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xF2, 0xF5, 0xFB, 0x67, 0x1E, 0x6C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF9, + 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, + 0xF0, 0xD8, 0xBD, 0x97, 0x2, 0x14, 0x26, 0x26, 0x15, 0x2, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, + 0x15, 0x14, 0x15, 0x14, 0x2, 0x14, 0x14, 0x15, 0x14, 0x17, 0x26, 0x15, 0x15, 0x14, 0x97, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF2, 0xEA, 0xBD, 0xEF, 0xDC, 0x66, 0x1E, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, + 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xB6, 0xF5, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xBD, 0xB6, 0x25, 0x2, 0x14, 0x15, 0x26, 0x26, 0x14, 0x14, 0x14, 0x15, 0x15, 0x17, 0x26, + 0x2A, 0x24, 0x17, 0x14, 0x14, 0x15, 0x24, 0x14, 0x15, 0x26, 0x26, 0x17, 0x15, 0x15, 0x4D, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xEB, 0xBD, 0xB6, 0xD8, 0x37, 0x4, 0x1F, 0x1E, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x33, + 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0x31, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xD8, 0xBD, 0xAC, 0x6, 0x2, 0x15, 0x26, 0x26, 0x26, 0x24, 0x15, 0x14, 0x15, 0x14, 0x15, 0x24, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x15, 0x24, 0xF2, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF6, 0xE9, 0xB4, 0xAA, 0xB6, 0x20, 0x4, 0x29, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xB6, + 0x20, 0x20, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x24, 0x26, 0x26, 0x26, 0x15, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x17, 0x17, 0x26, 0x14, 0x2, 0x25, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF4, 0xD8, 0xAA, 0x94, 0xA8, 0x30, 0x4, 0x25, 0x1E, 0xD7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xE9, 0xEA, 0xB6, + 0x4, 0x1E, 0x1F, 0x30, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE9, 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x0, 0x2, 0x24, 0x26, 0x26, 0x26, 0x17, 0x14, 0x16, 0x39, 0x4D, 0x35, + 0x16, 0x15, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x14, 0x15, 0x15, 0x17, 0x15, 0x2, 0xD, 0xF5, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xBD, 0xA3, 0x41, 0xA3, 0x20, 0x6, 0x29, 0x4, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xBD, 0xB4, 0xBA, 0xA7, + 0x4, 0x1E, 0x4, 0xB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, + 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x2, 0x0, 0x2, 0x26, 0x26, 0x26, 0x17, 0x4D, 0xC6, 0xD8, 0xBD, 0xBD, + 0xAC, 0x27, 0x15, 0x17, 0x17, 0x14, 0x15, 0x14, 0x14, 0x26, 0x26, 0x26, 0x24, 0x2, 0x9, 0xF0, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xBD, 0xA4, 0x41, 0x6F, 0xD, 0x6, 0x29, 0x4, 0x97, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xEA, 0xB6, 0x94, 0x94, 0xA7, + 0x1F, 0x20, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, + 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0x4D, 0x2, 0x14, 0x14, 0x2, 0x14, 0x26, 0x26, 0x15, 0x99, 0xF7, 0xF0, 0xE9, 0xBD, + 0xBD, 0xB8, 0x97, 0x24, 0x24, 0x15, 0x16, 0x2E, 0x2E, 0x24, 0x26, 0x26, 0x17, 0x2, 0x4E, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xBD, 0x94, 0x3F, 0x41, 0xD, 0x6, 0x29, 0x1F, 0x71, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFC, 0xF6, 0xF6, 0xF6, 0xF4, 0xF6, 0xF6, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFB, + 0xFD, 0xFD, 0xF5, 0xF7, 0xFD, 0xF6, 0xF4, 0xF6, 0xFD, 0xF2, 0xF4, 0xF6, 0xF6, 0xF4, 0xE2, 0xB5, + 0xA9, 0x6F, 0xB0, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xAA, 0x6F, 0x41, 0x3A, + 0x1E, 0x25, 0x20, 0xD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, + 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, + 0xBD, 0xBD, 0x35, 0x2, 0x17, 0x15, 0x14, 0x14, 0x15, 0x26, 0x26, 0x27, 0xF2, 0xF8, 0xF5, 0xEE, + 0xE9, 0xE9, 0xE9, 0xC6, 0xC6, 0xBC, 0xB8, 0xBD, 0xBD, 0xB8, 0x39, 0x24, 0x15, 0x4D, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xBC, 0x41, 0x3C, 0x3C, 0xD, 0x4, 0x25, 0x1F, 0x71, 0xD5, 0xB5, 0xA7, 0xB0, 0xBA, 0xD8, + 0xE9, 0xE9, 0xEB, 0xD8, 0xB0, 0x40, 0x30, 0xD, 0xD, 0x20, 0x20, 0x20, 0xD, 0x20, 0xD, 0x20, + 0x20, 0x1F, 0x6, 0x6, 0x4, 0x4, 0x4, 0x4, 0xD, 0xB, 0xB, 0x40, 0xF4, 0xFD, 0xF6, 0xE0, + 0xD8, 0x6F, 0xB, 0x32, 0xD8, 0xF6, 0xF6, 0xF4, 0xE0, 0xB5, 0x72, 0x38, 0x3E, 0x25, 0x1F, 0xAF, + 0xF7, 0xF0, 0xEF, 0xF4, 0xB5, 0x1F, 0xFE, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, + 0x0, 0x0, 0xFE, 0x4, 0xB0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF5, 0xF0, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xA3, 0x41, 0x40, 0x30, + 0x1F, 0x6B, 0x37, 0xD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, + 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, + 0xBD, 0xBD, 0x2E, 0x2, 0x17, 0x17, 0x15, 0x14, 0x14, 0x17, 0x26, 0x14, 0x35, 0xF2, 0xF9, 0xF8, + 0xF7, 0xF7, 0xF8, 0xF9, 0xF8, 0xF7, 0xF0, 0xE9, 0xE9, 0xF0, 0xF2, 0xBC, 0xC6, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xEF, 0xBC, 0xA3, 0x3C, 0x38, 0xB, 0x4, 0x25, 0x28, 0x25, 0x1F, 0x0, 0xFE, 0x0, 0x0, 0x0, + 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x6, 0x6, 0x4, 0x6, 0x4, 0x4, + 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x25, 0x6C, 0x97, 0x37, 0x4, + 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0xD, 0x6E, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x0, 0x39, + 0xE2, 0xE2, 0xD7, 0x72, 0x1F, 0x4, 0x1E, 0x1F, 0x1F, 0x20, 0x1F, 0x6, 0x6, 0x20, 0x20, 0x20, + 0x1F, 0x1F, 0x25, 0xB, 0x0, 0xB, 0x20, 0x4, 0xB, 0xB, 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, + 0x5, 0x0, 0xFE, 0xFE, 0x0, 0x40, 0xFD, 0xFD, 0xFD, 0x40, 0xB0, 0xBA, 0x41, 0x3A, 0x32, 0x37, + 0x37, 0x97, 0x37, 0xB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, + 0xBD, 0xBD, 0x32, 0x0, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x24, 0x26, 0x2, 0x27, 0xC6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xBD, 0xA3, 0x3A, 0x33, 0xB, 0x6, 0x29, 0x25, 0x4, 0x0, 0x4, 0x6, 0x20, 0x20, 0x20, + 0x25, 0x20, 0x20, 0x20, 0x6, 0x6, 0xD, 0x20, 0x20, 0x25, 0x25, 0x25, 0x20, 0x25, 0x20, 0x25, + 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x20, 0x20, 0x37, 0x3E, 0x30, 0x6, 0x4, 0x4, 0x20, + 0x37, 0x25, 0x20, 0x25, 0x30, 0x20, 0x6, 0x0, 0x20, 0x25, 0x20, 0x20, 0x20, 0x25, 0x22, 0x1F, + 0x25, 0x39, 0x37, 0x1F, 0x4, 0x1F, 0x29, 0x1F, 0x1F, 0x20, 0x1F, 0x1E, 0x1F, 0x20, 0x20, 0x1F, + 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xB, 0x6, 0x20, 0x20, 0x25, 0x30, 0x25, 0x20, 0x20, 0x37, 0x6C, + 0xA7, 0x6C, 0x3E, 0x72, 0x37, 0x25, 0x6F, 0x6C, 0x39, 0x0, 0x4, 0x4, 0x0, 0x0, 0x4, 0xB, + 0xFE, 0x0, 0x0, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, + 0xBD, 0xBD, 0x4E, 0x2, 0x2, 0x2, 0x2, 0x15, 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x6, 0x97, + 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xB7, 0x94, 0x3A, 0x33, 0xB, 0x4, 0x30, 0x25, 0x4, 0x6, 0x20, 0x6, 0x4, 0x4, 0x1E, + 0x6, 0x6, 0x6, 0x6, 0x4, 0x6, 0x6, 0x4, 0x4, 0x6, 0x1F, 0x1F, 0x4, 0x1F, 0x6, 0x4, + 0x1F, 0x4, 0x6, 0xB, 0x6, 0xB, 0xB, 0x5, 0x20, 0x4, 0x4, 0xB, 0x37, 0x37, 0x1F, 0x25, + 0x25, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x6, 0x1F, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x25, 0x1F, + 0x1E, 0x1E, 0x4, 0x1E, 0x20, 0x1F, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, + 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x1F, 0x4, 0x1F, 0x25, 0x29, + 0x29, 0x4, 0x1F, 0x20, 0x37, 0x29, 0x0, 0x4, 0x4, 0x20, 0x20, 0xB, 0x5, 0x4, 0x4, 0x4, + 0x0, 0x4, 0x4, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xBD, 0x2C, + 0xE, 0x31, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, + 0xBD, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x17, 0x15, 0x14, 0x15, 0x15, 0x15, 0x2, 0x2, 0x2, 0x2, + 0x16, 0x99, 0xEF, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xE9, 0xB7, 0xA3, 0x3A, 0x31, 0x7, 0x4, 0x25, 0x32, 0x4, 0x0, 0xD, 0x6, 0x1F, 0x1F, 0x1F, + 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x25, 0x25, 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x1F, 0x25, 0x1F, 0x1F, + 0x1F, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x20, 0xD, 0x20, 0x6, 0x1F, 0x6, 0xB, 0x20, 0x4, 0xB, + 0x20, 0x6, 0x4, 0x1F, 0x20, 0x1F, 0x1F, 0x6, 0x6, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x1F, 0x20, + 0x1F, 0x1F, 0x22, 0x1F, 0x1E, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x25, 0x29, 0x29, 0x25, 0x20, 0x25, + 0x20, 0x1F, 0x1F, 0x20, 0x1F, 0x6, 0x6, 0x6, 0x4, 0x1F, 0x4, 0x0, 0x0, 0x6, 0x6, 0x6, + 0x6, 0x1F, 0x6, 0x4, 0x1F, 0x1F, 0x1F, 0x20, 0x1F, 0x1F, 0x20, 0xB, 0x5, 0x4, 0x4, 0x4, + 0xB, 0x37, 0x30, 0x4, 0xD7, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xE9, + 0xFD, 0xF0, 0x3C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, + 0xD8, 0xBD, 0xB8, 0xA5, 0x16, 0x14, 0x15, 0x15, 0x14, 0x15, 0x17, 0x15, 0x14, 0x14, 0x2, 0x2, + 0x0, 0x2, 0x2, 0x6, 0x16, 0x4E, 0xEF, 0xFD, 0xEB, 0x40, 0xC6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xE2, 0xB0, 0x40, 0x30, 0xD, 0x0, 0x2, 0x16, 0xD, 0x4, 0x4, 0x1F, 0x20, 0x1F, 0x25, 0x25, + 0x25, 0x30, 0x25, 0x25, 0x25, 0x25, 0x29, 0x29, 0x67, 0x29, 0x29, 0x29, 0x29, 0x30, 0x20, 0xB, + 0x39, 0x6B, 0x37, 0x29, 0x25, 0x37, 0x39, 0x30, 0x20, 0x25, 0x25, 0x20, 0x6, 0x25, 0x1F, 0x1F, + 0x1F, 0x28, 0x22, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0xB, 0x20, 0x25, 0x30, 0x20, 0x20, 0x1F, 0xD, + 0x6, 0x1F, 0x1F, 0x1F, 0x6, 0x1F, 0x25, 0x29, 0x39, 0x37, 0x39, 0x65, 0x29, 0x25, 0x39, 0x71, + 0x96, 0x71, 0x71, 0x71, 0x96, 0x96, 0x29, 0x70, 0x67, 0x70, 0x67, 0xB2, 0x6E, 0x37, 0x71, 0x29, + 0x22, 0x29, 0x29, 0x1F, 0x6, 0x1F, 0x1F, 0x1F, 0x29, 0x1F, 0x6, 0xD, 0x4, 0x4, 0x0, 0x0, + 0x6, 0x29, 0x1F, 0x1F, 0xF4, 0xF4, 0xD8, 0xEB, 0xB0, 0x6F, 0xA3, 0x94, 0x5, 0x4, 0xF4, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xB4, 0x3A, 0xF7, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xEE, 0xD8, 0xBD, 0xBD, 0xB4, 0x16, 0x2, 0x2, 0x2, 0x15, 0x24, 0x15, 0x15, 0x15, 0x14, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x14, 0x2, 0x16, 0xB5, 0x39, 0x2, 0x15, 0xBC, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xFC, 0xD8, 0x72, 0xD6, 0x97, 0x39, 0x39, + 0x25, 0x25, 0x25, 0x20, 0xD, 0x0, 0x0, 0x16, 0x32, 0x25, 0x20, 0x25, 0x29, 0x25, 0x30, 0x32, + 0x30, 0xD, 0xB, 0x30, 0x25, 0x29, 0x29, 0x29, 0x29, 0x29, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x25, 0x25, 0x20, 0x25, 0x37, 0x25, 0x20, 0x20, 0x39, 0x30, 0x25, 0x25, 0xD, 0x29, 0x29, 0x29, + 0x29, 0x29, 0x29, 0x25, 0x25, 0x25, 0x25, 0x30, 0x37, 0x37, 0x37, 0x37, 0x30, 0x37, 0x20, 0x6, + 0x25, 0x39, 0x37, 0x20, 0x25, 0x37, 0x37, 0x39, 0x37, 0x37, 0x6B, 0x71, 0x6B, 0x71, 0x9B, 0xAF, + 0xB5, 0xDB, 0x68, 0x4, 0x39, 0xE6, 0xDB, 0xDA, 0xE6, 0xE6, 0xDB, 0xE8, 0xD5, 0xE6, 0xE8, 0xE6, + 0xE6, 0xE6, 0xE2, 0xD7, 0xD7, 0xB5, 0x25, 0x6, 0xB5, 0xAE, 0x72, 0x72, 0x6F, 0xA7, 0x97, 0x71, + 0x9B, 0xB2, 0xB2, 0x7A, 0xD6, 0xB, 0x0, 0x32, 0x39, 0x2C, 0x16, 0xE, 0x4, 0x4, 0xED, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x3A, 0xE, 0x31, + 0xBD, 0xF0, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0xE, 0x31, 0xAA, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xEE, 0xD8, 0xBD, 0xBD, 0xA9, 0x6, 0x15, 0x2, 0x2, 0x14, 0x2, 0x2, 0x2, 0x14, 0x2, + 0x2, 0x14, 0x14, 0x15, 0x15, 0x15, 0x2, 0x27, 0x27, 0x14, 0x17, 0x4D, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xEA, 0xEE, 0x5, 0x1E, 0xB2, 0x71, 0xB2, 0xB2, + 0xAF, 0x6E, 0x6B, 0x71, 0x6E, 0x25, 0x35, 0xB5, 0xA9, 0x6E, 0x97, 0x97, 0x6E, 0x6C, 0x6F, 0x6C, + 0x30, 0xB, 0xD, 0xA7, 0x97, 0xAF, 0xAF, 0xAF, 0x7A, 0x71, 0x6B, 0x39, 0x39, 0x37, 0x39, 0x39, + 0x37, 0x37, 0x39, 0x39, 0x72, 0x3E, 0xB, 0x4, 0xD6, 0xAE, 0x6E, 0x97, 0x6E, 0x97, 0xB2, 0xB2, + 0xB5, 0xB5, 0xB2, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xB0, 0xB0, 0xA7, 0x6C, 0x39, 0x39, 0x25, 0x6, + 0x37, 0x97, 0x97, 0x97, 0xB5, 0xE2, 0xE2, 0xED, 0xE2, 0xE2, 0xEF, 0xE6, 0xDB, 0xD5, 0xB5, 0xA9, + 0x35, 0x3E, 0xD, 0xFE, 0x6, 0x40, 0x39, 0x6C, 0xAF, 0xA9, 0xAF, 0xB5, 0x40, 0xAF, 0x6E, 0x97, + 0xA9, 0x6E, 0x39, 0x37, 0x32, 0x25, 0xFE, 0x0, 0x37, 0x37, 0x30, 0x20, 0xD, 0x20, 0x20, 0x20, + 0x6, 0x20, 0x29, 0x29, 0x37, 0x4, 0x0, 0x20, 0x20, 0x6, 0x9, 0x4, 0x0, 0xB, 0xEE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xE9, + 0xA3, 0x33, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x41, 0xB6, 0xF9, 0xFD, 0xF8, 0xBD, 0x33, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xB6, 0x35, 0x15, 0x15, 0x14, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x16, 0x99, 0x16, 0x17, 0x24, 0xB5, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xBD, 0xBB, 0x33, 0x4, 0x1E, 0x4, 0x4, 0x4, + 0x4, 0x0, 0x0, 0x4, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0xB, + 0xB, 0x0, 0xFE, 0xD, 0x4, 0x6, 0x6, 0x6, 0x1F, 0x1F, 0x1E, 0x1E, 0x6, 0x4, 0x5, 0x5, + 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xB, 0xB, 0x4, 0x1F, 0x1F, 0x6, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, + 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x1E, 0x4, 0x4, 0x4, 0xB, 0x4, 0xB, 0x4, 0x4, + 0x4, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x0, 0x0, 0xFE, 0x4, 0x3E, 0xFB, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF8, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xB4, 0x32, 0x6, 0x15, 0x15, 0x14, 0x14, 0x15, 0x15, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x2, 0x14, 0x15, 0x16, 0x99, 0xB5, 0x99, 0x6, 0x15, 0x4D, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xB4, 0xAA, 0xAA, 0x3A, 0x30, 0x30, 0x30, 0x20, + 0xD, 0xB, 0x5, 0x0, 0x0, 0x0, 0x4, 0x5, 0x4, 0xFE, 0x4, 0xB, 0x6, 0xB, 0x5, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x5, 0x4, 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, + 0xD, 0xB, 0x6, 0x6, 0x7, 0x5, 0x5, 0xB, 0x5, 0x1F, 0x1E, 0x1F, 0x1F, 0x4, 0x1E, 0x1F, + 0x1F, 0x1F, 0x6, 0x6, 0x1F, 0x1F, 0x1F, 0x6, 0xB, 0x6, 0x1F, 0x1F, 0x4, 0x1E, 0x1E, 0x1F, + 0x1F, 0x1E, 0x1E, 0x1F, 0x1E, 0x4, 0x1E, 0x4, 0x1F, 0x1E, 0x1E, 0x1F, 0x1E, 0x1F, 0x1F, 0x1F, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x4, 0x1F, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x4, + 0x4, 0x4, 0x1E, 0x1F, 0x4, 0x6, 0x6, 0x4, 0x6, 0x4, 0x4, 0x5, 0x4, 0x4, 0x0, 0x0, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x25, 0x20, 0x25, 0xD, 0xD, 0x6, 0xB, 0xB6, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0x3F, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xD8, 0xD8, 0xB8, 0xA5, 0x39, 0x35, 0x27, 0x16, 0x15, 0x9, 0x6, + 0x2, 0x14, 0x14, 0x14, 0x2, 0x15, 0x2, 0x14, 0x6, 0x35, 0x99, 0x24, 0x26, 0x24, 0xF2, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xB9, 0xB4, 0xA5, 0xAA, 0xB4, 0x94, 0x41, 0x33, + 0x33, 0x2C, 0xC, 0x0, 0x5, 0x0, 0x0, 0x23, 0x20, 0xD, 0x20, 0x20, 0xCC, 0xCC, 0xBF, 0xCB, + 0xE3, 0xC7, 0xC9, 0xCA, 0xCA, 0xCA, 0xC9, 0xC9, 0xC9, 0xC9, 0x5C, 0xBF, 0xF3, 0xCF, 0xCF, 0xCF, + 0xC4, 0x2F, 0xA, 0x1, 0x1, 0xE, 0x1A, 0x2F, 0x3A, 0x48, 0xA6, 0xAB, 0xAD, 0xC1, 0xC9, 0xCD, + 0xCD, 0xC1, 0xEC, 0x5A, 0xBF, 0xC9, 0xAD, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xAD, 0xCB, 0xC9, 0xC9, + 0xC9, 0xCB, 0xCB, 0xCB, 0xCF, 0xCF, 0xCE, 0xCE, 0xCE, 0xAD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC2, 0xC2, + 0xC2, 0xC2, 0xC2, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xCA, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x0, + 0x4, 0xB, 0xD, 0x4, 0x4, 0xA7, 0x6F, 0x6F, 0xA3, 0xB8, 0xE9, 0xEB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, + 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x38, 0xE9, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, 0xF0, 0xEE, 0xE9, 0xE9, 0xE9, 0xD8, 0xB8, 0xB6, 0xAC, 0xAC, + 0x4E, 0x35, 0x15, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0xD7, 0x27, 0x15, 0x27, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, 0xAA, 0xA5, 0xA3, 0x3B, 0x3A, + 0x31, 0x2E, 0xE, 0xFE, 0x0, 0x5, 0x5, 0x23, 0x30, 0x5, 0x20, 0x25, 0xC9, 0xC9, 0xC9, 0x55, + 0xC9, 0xE3, 0xC3, 0xCA, 0xCA, 0xCA, 0xC9, 0x5C, 0x5A, 0x56, 0x56, 0x56, 0x5C, 0xCE, 0xEC, 0x41, + 0x7, 0x7, 0x9, 0xE, 0x7, 0x12, 0x2D, 0x2F, 0x36, 0x52, 0xAD, 0xAD, 0xAD, 0xBF, 0xCD, 0xCD, + 0xCD, 0xC9, 0xEC, 0x59, 0xCD, 0xCD, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xBF, 0x53, 0x55, 0x52, + 0x36, 0xAD, 0xCE, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0x55, 0xC9, 0xCB, 0xCB, 0xCC, 0xCC, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x7, + 0xB, 0x20, 0x20, 0x4, 0x4, 0xB5, 0xA9, 0xB6, 0xBD, 0xE9, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xBD, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF8, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xF0, 0xE9, 0xD8, + 0xBD, 0xB8, 0xA5, 0x16, 0x6, 0x14, 0x15, 0x16, 0x39, 0xAC, 0xF7, 0xF2, 0xB5, 0xF2, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF5, 0xEE, 0xEF, 0xD8, 0xAC, 0xA3, 0x3C, + 0x33, 0x2C, 0xE, 0x0, 0x0, 0x4, 0x4, 0x30, 0x30, 0x4, 0x4, 0x5, 0xC9, 0xC9, 0x5C, 0x55, + 0x52, 0x52, 0x53, 0x50, 0x4F, 0x4F, 0x4F, 0x5C, 0x5A, 0x56, 0x56, 0x46, 0x1A, 0x3, 0x1, 0x1, + 0x1, 0x1, 0x0, 0x1, 0x1, 0xA, 0x1A, 0x34, 0x3D, 0xAD, 0xAD, 0xAD, 0xAD, 0xCD, 0xCE, 0xCE, + 0xCD, 0xC9, 0xCD, 0x50, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xD0, 0xCC, 0xCA, 0xBF, 0xBF, + 0xC0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, + 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x9, + 0xB, 0x25, 0x25, 0x4, 0x4, 0xEF, 0xD8, 0xE9, 0xEC, 0xF1, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0x3F, 0xFD, 0xFD, 0x2C, 0xEE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEF, 0xEF, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xF8, 0xF5, 0xEE, + 0xE9, 0xD8, 0xD8, 0xB8, 0x40, 0x35, 0x4E, 0x97, 0x4D, 0x4E, 0xBC, 0xF2, 0xF6, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, 0xB6, 0x94, + 0x3A, 0x31, 0x2C, 0x0, 0x0, 0x4, 0x5, 0x37, 0x33, 0x0, 0x0, 0x0, 0x9, 0x1, 0x0, 0x7, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x55, 0x5C, 0x56, 0x56, 0x46, 0x0, 0x0, 0x0, 0x1, + 0x1, 0x1, 0x0, 0x0, 0x1, 0x7, 0xA, 0x2F, 0x54, 0xAD, 0xAD, 0xC4, 0xCE, 0xD0, 0xD0, 0xD0, + 0xD0, 0xD0, 0xF1, 0x4F, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x7, + 0x6, 0x25, 0x30, 0xB, 0x4, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, + 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x6, 0x16, 0x35, 0x97, 0xEF, 0xF9, 0xF2, 0xEF, 0xEB, 0xC6, + 0xAC, 0x4D, 0x99, 0x35, 0x9, 0x16, 0x3C, 0x6, 0x2, 0x2, 0x2, 0x6, 0x16, 0x99, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xAA, + 0x3B, 0x33, 0x2C, 0x7, 0x0, 0x0, 0x4, 0x30, 0x30, 0x0, 0x0, 0x0, 0x9, 0x3, 0x1, 0x0, + 0x1, 0x0, 0x1, 0x1, 0x3, 0x1, 0x1, 0x53, 0xBF, 0x56, 0x56, 0x47, 0x1, 0x1, 0x1, 0x3, + 0x3, 0x3, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0xA, 0x1A, 0x2F, 0x2F, 0x2F, 0x2F, 0x3D, 0x3D, + 0xAD, 0xD0, 0xF1, 0x43, 0xD0, 0xD0, 0xC9, 0xBF, 0xBF, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x5A, 0x5A, 0x7, + 0x4, 0x20, 0x20, 0x4, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAC, 0x15, 0x15, 0x15, 0x16, 0xAC, 0xAC, 0x16, 0x6, 0x16, 0x6, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0x14, 0x17, 0x17, 0x17, 0x2, 0x2, 0x2, 0x99, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, + 0x41, 0x33, 0x31, 0xE, 0x7, 0x0, 0x4, 0x25, 0x25, 0x4, 0x0, 0x4, 0x12, 0x3, 0xA, 0x1, + 0x1, 0x0, 0x0, 0x1, 0x9, 0x1, 0x0, 0x4F, 0xC9, 0x56, 0x56, 0x50, 0x3, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x8, 0x7, 0x7, 0xA, 0x1A, 0x34, 0x34, 0x36, 0x48, 0x54, 0x53, 0xAB, 0xAD, + 0xAD, 0xAD, 0xA6, 0x1A, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0x54, 0x55, 0xAD, 0xBF, 0xBF, + 0xC9, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0xB, + 0xB, 0x3E, 0x37, 0xB, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, + 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEF, 0x35, 0x27, 0x4D, 0x4D, 0x27, 0x2, 0x14, 0x24, 0x15, 0x2, + 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x17, 0x17, 0x17, 0x15, 0x14, 0x14, 0x15, 0x27, 0xF6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, + 0x6F, 0x38, 0x33, 0xE, 0x7, 0x0, 0x4, 0x20, 0x1F, 0x4, 0x4, 0x4, 0x3, 0x3, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x4F, 0xC9, 0x56, 0x56, 0x59, 0xA, 0x3, 0x3, 0x3, + 0x1, 0x1, 0x0, 0x1, 0x7, 0xE, 0x2D, 0x2F, 0x3D, 0x54, 0xC4, 0xBF, 0xAD, 0xAD, 0xAD, 0xAD, + 0xAD, 0xBF, 0x36, 0x10, 0x55, 0xAD, 0xAD, 0xAD, 0xAD, 0x4C, 0x18, 0x10, 0x12, 0x36, 0x46, 0x46, + 0x4F, 0x53, 0x55, 0x5A, 0x5C, 0xC9, 0xC9, 0xCA, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, + 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0xB, + 0xD, 0x3E, 0x33, 0xB, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, + 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF8, 0xBD, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF8, 0xF7, 0xF5, 0x99, 0x16, 0x6, 0x2, 0x2, 0x2, 0x17, 0x26, 0x26, 0x26, 0x15, + 0x2, 0x14, 0x24, 0x15, 0x14, 0x15, 0x17, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x26, 0x24, 0xB5, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, + 0x6F, 0x38, 0x31, 0x7, 0x1, 0x0, 0x2, 0xD, 0x6, 0x4, 0x4, 0x4, 0x1A, 0xA, 0x1, 0x0, + 0xE, 0x1, 0x0, 0x1, 0x7, 0x0, 0x0, 0x46, 0xCD, 0x56, 0x56, 0x59, 0x10, 0x3, 0x1, 0x9, + 0x1, 0x3, 0x1, 0x0, 0x1, 0x1, 0x3, 0x1A, 0x1A, 0x36, 0x3D, 0x48, 0x3D, 0x3D, 0x48, 0x54, + 0x55, 0xBF, 0x4C, 0x3, 0x52, 0xBF, 0xAD, 0x1A, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1D, 0x47, + 0x47, 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x55, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x58, 0x5A, 0x6, + 0x0, 0x4, 0x5, 0x4, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF5, 0xEE, 0xE9, 0xB8, 0x24, 0x15, 0x17, 0x15, 0x2, 0x14, 0x15, 0x24, 0x26, 0x26, 0x24, + 0x15, 0x14, 0x24, 0x15, 0x14, 0x15, 0x17, 0x15, 0x15, 0x17, 0x26, 0x17, 0x15, 0x26, 0x17, 0x99, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, + 0x6F, 0x38, 0x2C, 0x5, 0x0, 0x0, 0x2, 0xD, 0xD, 0x4, 0x4, 0x4, 0x3, 0xA, 0x1, 0x0, + 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1C, 0xC9, 0x51, 0x56, 0x59, 0x18, 0x3, 0x1, 0x3, + 0x3, 0x1, 0x3, 0x3, 0x3, 0x1A, 0x2F, 0x36, 0x36, 0x4C, 0x54, 0xAD, 0xAD, 0xBF, 0xC9, 0xC9, + 0xC9, 0xC9, 0x54, 0x3, 0x52, 0xC9, 0x34, 0x8, 0x52, 0x0, 0x0, 0x1, 0x3, 0x52, 0x52, 0xBF, + 0xC9, 0xCD, 0xCE, 0xCA, 0xCC, 0xD0, 0xD0, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0x5D, 0x5D, 0xCA, 0x5D, 0xCA, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x5A, 0x5A, 0x6, + 0x4, 0x0, 0x4, 0x4, 0xD, 0xED, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBB, 0xA8, 0xE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xEA, 0xD8, 0xBD, 0x4D, 0x15, 0x26, 0x26, 0x26, 0x14, 0x14, 0x14, 0x15, 0x15, 0x17, 0x26, + 0x2A, 0x24, 0x17, 0x15, 0x15, 0x17, 0x24, 0x15, 0x15, 0x26, 0x26, 0x17, 0x17, 0x26, 0x24, 0xC6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, + 0x41, 0x38, 0x30, 0x4, 0x4, 0x0, 0x0, 0xE, 0xD, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x2F, 0xCE, 0x57, 0x57, 0x5A, 0x1D, 0xA, 0x3, 0x3, + 0x1, 0x3, 0x12, 0x2C, 0xA, 0xA, 0x2E, 0x3D, 0x4C, 0x4C, 0x52, 0xAD, 0xAD, 0xAD, 0xBF, 0xC9, + 0xC9, 0xAD, 0x19, 0x11, 0x11, 0x10, 0x1, 0x3, 0x10, 0x0, 0x0, 0x1, 0x10, 0x19, 0x19, 0x18, + 0x1C, 0xCE, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x57, 0x58, 0x5B, 0x5B, 0x6, + 0x4, 0x37, 0x37, 0x6, 0x4, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xBD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xE9, 0xBD, 0xBD, 0x39, 0x15, 0x26, 0x26, 0x26, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x15, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x26, 0x26, 0x15, 0x14, 0x2, 0x4D, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, + 0x41, 0x38, 0x30, 0x4, 0x4, 0x4, 0x0, 0xE, 0x20, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x1, + 0x0, 0x1, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1A, 0xCA, 0x57, 0x57, 0x51, 0x43, 0x3, 0x3, 0x3, + 0xA, 0xA, 0x3, 0x1A, 0xA, 0xA, 0x8, 0x36, 0x52, 0x4C, 0x4C, 0x52, 0x48, 0x4C, 0x4C, 0x4C, + 0x36, 0x1A, 0x11, 0x10, 0x35, 0x2B, 0x3, 0x3, 0x3, 0xFE, 0x0, 0x1, 0x18, 0x18, 0x19, 0x1B, + 0x1B, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x5B, 0x6, + 0x6, 0x37, 0x25, 0x1F, 0x4, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x41, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xE9, 0xD8, 0xBD, 0xA9, 0x35, 0x35, 0x27, 0x24, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x17, + 0x26, 0x26, 0x15, 0x15, 0x24, 0x15, 0x15, 0x2, 0x15, 0x26, 0x15, 0x17, 0x15, 0x2, 0x4E, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, + 0x41, 0x38, 0xE, 0x4, 0x4, 0x4, 0x4, 0x30, 0x25, 0x4, 0x4, 0x4, 0x3, 0x1, 0x1, 0x1, + 0x3, 0x1, 0x3, 0xF, 0xF, 0xF, 0x10, 0x10, 0xC9, 0x5A, 0x57, 0x57, 0x43, 0xF, 0xF, 0x10, + 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0xF, 0xF, 0x10, 0x3, 0x32, 0x16, 0x3, 0x3, 0x3, 0x0, 0x1, 0x3, 0x10, 0x18, 0x18, 0x46, + 0x18, 0xCE, 0xCE, 0xCD, 0xCE, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCC, + 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x58, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x1F, + 0x21, 0x71, 0x37, 0x25, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xEA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF8, 0xF5, 0xF0, 0xF0, 0xE9, 0xD8, 0xBD, 0xBC, 0xAC, 0x27, 0x15, 0x17, 0x17, 0x15, 0x15, 0x24, + 0x15, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x2, 0x94, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, + 0x3B, 0x38, 0xE, 0x4, 0x4, 0x4, 0x0, 0x23, 0x20, 0x4, 0x4, 0x4, 0x1, 0x1, 0x0, 0x0, + 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5C, 0x5A, 0x57, 0x5A, 0x46, 0x1, 0xF, 0xF, + 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xF, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x10, 0x12, 0x10, 0x10, 0x12, 0x12, 0x55, + 0x12, 0x1D, 0x46, 0x43, 0x46, 0x4F, 0x46, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x4F, 0x50, 0x50, 0x51, + 0x55, 0x5C, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x1F, + 0x28, 0x71, 0x39, 0x20, 0x4, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x31, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xEA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xD8, 0xBC, 0xA5, 0x39, 0x35, 0x39, 0x4D, 0x4D, + 0x27, 0x2, 0x2, 0x17, 0x17, 0x14, 0x15, 0x14, 0x14, 0x17, 0x17, 0x24, 0x16, 0xB6, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB4, + 0x3B, 0x38, 0x2C, 0x4, 0x4, 0x0, 0x0, 0x25, 0x20, 0x4, 0x4, 0x4, 0xF, 0xF, 0xF, 0xF, + 0x1, 0x0, 0xFE, 0x1, 0x13, 0x1B, 0x42, 0x43, 0x5C, 0x5C, 0x57, 0x57, 0x56, 0x47, 0x47, 0x47, + 0x1A, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1A, 0x53, 0x53, 0x55, 0xBF, 0xBF, + 0xA, 0x3, 0x10, 0xF, 0x3, 0x10, 0x3, 0xF, 0xF, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x1B, 0xCA, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x1E, + 0x28, 0xB2, 0x37, 0xD, 0x0, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x31, 0xFD, 0xFD, 0xFD, 0x41, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, 0xF0, 0xF0, 0xEE, 0xE9, 0xE9, 0xBD, 0x4E, 0x9, + 0x2, 0x2, 0x15, 0x17, 0x17, 0x15, 0x15, 0x6, 0x9, 0x39, 0x97, 0x99, 0xF2, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, + 0x3F, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x0, 0x25, 0x20, 0x4, 0x4, 0x4, 0x10, 0xF, 0xF, 0x1, + 0x1, 0x1, 0x0, 0x1, 0x1B, 0x44, 0x46, 0x4F, 0x55, 0x5C, 0x57, 0x57, 0x56, 0x47, 0x47, 0x53, + 0x50, 0x19, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, + 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x53, 0xBF, 0xC9, 0xC9, 0xBF, + 0x1D, 0x46, 0x36, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x34, 0x55, 0xC0, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1E, + 0x28, 0xD5, 0xA7, 0x4, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0xE, + 0xFD, 0xF9, 0x3A, 0xE, 0x33, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, 0xFD, 0xBB, 0xE, 0xF0, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, 0xAC, 0x15, 0x15, + 0x14, 0x14, 0x17, 0x17, 0x17, 0x24, 0x4D, 0xBC, 0xEB, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3F, 0x33, 0x2C, 0x7, 0x4, 0x0, 0x4, 0x25, 0x25, 0x4, 0x4, 0x1E, 0x1, 0x1, 0x1, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x50, 0x5C, 0x51, 0x51, 0x56, 0x10, 0xF, 0xF, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0xF, 0x10, 0x10, 0x10, 0x10, + 0x1, 0xF, 0xF, 0xF, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x12, 0xBF, 0xBF, 0xC9, 0xBF, + 0xAD, 0xBF, 0xBF, 0xBE, 0xBE, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xA4, 0xA6, 0x53, + 0xA4, 0x52, 0x2D, 0x3, 0x10, 0x10, 0x18, 0x1B, 0x19, 0x1B, 0x1D, 0x50, 0x5A, 0x5B, 0x5A, 0x5B, + 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x4, + 0x28, 0xB5, 0x97, 0x4, 0x4, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF7, + 0xFD, 0x94, 0xE, 0xE, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xE, 0x31, 0xB6, 0xE, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xC6, 0xAC, 0xF2, 0xFD, 0xFD, 0xF7, 0xEA, 0xBD, 0xBD, 0x4D, 0x15, 0x15, + 0x14, 0x2, 0x15, 0x17, 0x15, 0x27, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, + 0x3C, 0x32, 0x2C, 0xB, 0x4, 0x0, 0x4, 0x25, 0x25, 0x4, 0x4, 0x1E, 0x0, 0x0, 0x0, 0x0, + 0x2B, 0x7, 0x2B, 0x0, 0x0, 0x0, 0x1, 0x1, 0x4F, 0x5C, 0x57, 0x51, 0x51, 0x1, 0x1, 0x1, + 0x1, 0x3, 0x3, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0x1, + 0x11, 0x19, 0x11, 0x11, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x52, 0xAD, 0xBF, 0xBF, + 0x1C, 0x3, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, + 0x1, 0x1, 0xF, 0xF, 0x10, 0x10, 0x10, 0x3, 0x2E, 0x10, 0x10, 0x19, 0x19, 0x59, 0x5A, 0x5A, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1E, + 0x28, 0xB5, 0x37, 0xD, 0x4, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, + 0xE9, 0xE, 0xE, 0xB7, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xF5, 0xF5, 0xA9, 0x6, 0x2, 0x9, 0x40, 0xEB, 0xF2, 0xE9, 0xBD, 0xBD, 0xA5, 0x16, 0x15, + 0x17, 0x15, 0x15, 0x17, 0x15, 0x2, 0x27, 0xC6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, + 0x3A, 0x32, 0xE, 0x6, 0x4, 0x0, 0x4, 0x30, 0x30, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x4, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x43, 0x5C, 0x51, 0x51, 0x51, 0x1, 0x0, 0x0, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x7, 0x2B, 0x7, 0x2B, 0x7, 0x4B, 0x9, 0x0, 0x0, 0x1, 0x1, + 0x18, 0x10, 0x10, 0x10, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1A, 0xBF, 0xBF, 0xBF, + 0x1B, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, + 0x0, 0x0, 0x7, 0x27, 0x1, 0x1, 0x1, 0x1, 0x96, 0x12, 0x11, 0x11, 0x19, 0x19, 0x34, 0x36, + 0x36, 0x43, 0x46, 0x46, 0x46, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x28, 0xD5, 0x6E, 0xB, 0x4, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, 0xE, + 0xE, 0xE, 0x3A, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xEA, 0xE9, 0xD8, 0x25, 0x14, 0x2, 0x2, 0x2, 0x9, 0x4E, 0xC6, 0xD8, 0xBD, 0xB7, 0xA5, 0x35, + 0x15, 0x14, 0x17, 0x17, 0x15, 0x14, 0x2, 0x6, 0x4E, 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x33, 0xD, 0x4, 0x4, 0x0, 0x0, 0x32, 0x29, 0x4, 0x4, 0x1E, 0x8, 0x7, 0x7, 0x1, + 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0x0, 0x1, 0x1, 0x43, 0xC0, 0x51, 0x57, 0x51, 0x1A, 0x10, 0x3, + 0x10, 0x10, 0x10, 0x10, 0x3, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, + 0x10, 0x10, 0x10, 0x10, 0x12, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x36, 0xBF, 0xBF, + 0x1A, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x9, 0x16, 0x7, 0xD, + 0x0, 0x0, 0x7, 0x2B, 0x0, 0x0, 0x0, 0x0, 0x2B, 0x9, 0x3, 0x10, 0x19, 0x19, 0xBF, 0xBF, + 0xBF, 0xC0, 0xC0, 0xC0, 0x5A, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x4, + 0x28, 0xB2, 0x6B, 0x20, 0x4, 0x30, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x3A, + 0xE, 0x33, 0xF5, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xB4, 0x41, 0xFD, 0xFD, 0xAA, 0x38, 0xEE, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xD8, 0xBD, 0xB6, 0x16, 0x2, 0x15, 0x17, 0x15, 0x2, 0x2, 0x16, 0x39, 0x35, 0x2E, 0x2, 0x2, + 0x14, 0x2, 0x14, 0x17, 0x17, 0x15, 0x15, 0x14, 0x2, 0x39, 0xEF, 0xF2, 0xF2, 0xF6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x32, 0xB, 0x4, 0x4, 0x4, 0x2, 0x25, 0x29, 0x1F, 0x4, 0x6, 0x52, 0x52, 0xA6, 0x46, + 0x52, 0x36, 0x0, 0x0, 0xFE, 0x3, 0x46, 0x4F, 0x50, 0xCA, 0x57, 0x57, 0x56, 0x46, 0x46, 0x1D, + 0x43, 0x46, 0x43, 0x43, 0x43, 0x43, 0x1A, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x10, + 0x10, 0x10, 0x10, 0x1B, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x46, 0x4F, + 0x18, 0x3, 0x10, 0x10, 0x10, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x3, 0x3, 0x1, 0x1, 0x7, + 0x1, 0x0, 0x0, 0x7, 0x1, 0x1, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1, 0x12, 0x19, 0x4F, 0x59, + 0x5A, 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x29, 0x9D, 0x37, 0x25, 0x6, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE9, 0xA3, 0xFD, 0xFD, 0xD8, 0x2C, 0xFD, 0xFD, 0xFD, 0xF8, 0xEA, + 0xBD, 0xBD, 0xAC, 0x16, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14, 0x2, 0x0, 0x0, 0x2, 0x2, + 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, 0x15, 0x17, 0x15, 0x2, 0x15, 0x6, 0x9, 0x16, 0xC6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x3A, 0x2E, 0x5, 0x0, 0x4, 0x4, 0x0, 0xD, 0x20, 0x1F, 0x6, 0x4, 0xBF, 0xAB, 0xC4, 0x52, + 0x55, 0x55, 0x34, 0xF, 0x10, 0x10, 0x10, 0x10, 0x1B, 0xCC, 0x5A, 0x57, 0x57, 0x1B, 0x10, 0x11, + 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, 0x18, 0x10, 0xF, 0x1, 0x1, 0x1, 0x4F, 0x53, + 0x53, 0x52, 0x52, 0x53, 0x1B, 0x3, 0x1, 0x1, 0x1, 0x10, 0x1A, 0x13, 0x18, 0x13, 0x18, 0x18, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x13, 0x13, 0x1A, 0x8, 0x8, 0x3, 0x8, 0x8, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x12, 0x12, 0x18, + 0x1A, 0x46, 0x50, 0x50, 0x56, 0x57, 0x58, 0x57, 0x56, 0x4F, 0x4F, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x29, 0xD5, 0x71, 0xB, 0xFE, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xB6, 0xA8, 0xFD, 0xEE, 0xE, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x6, 0x14, 0x14, 0x2, 0x2, 0x2, 0x15, 0x24, 0x15, 0x15, 0x14, 0x2, 0x2, + 0x2, 0x2, 0x14, 0x15, 0x15, 0x17, 0x15, 0x17, 0x14, 0x2, 0x2, 0x15, 0x14, 0x2, 0x3C, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0xA3, + 0x33, 0x2C, 0x5, 0x4, 0x6, 0x4, 0xFE, 0x4, 0xB, 0x6, 0x4, 0x4, 0x54, 0x54, 0xAD, 0x54, + 0xC9, 0xC9, 0x4F, 0x46, 0x49, 0x53, 0x53, 0x53, 0x53, 0xCE, 0x5A, 0x57, 0x57, 0x50, 0x49, 0x47, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x3, 0x0, 0x0, 0x53, 0xC9, + 0xC9, 0xC9, 0xC9, 0x5C, 0x1B, 0x1, 0x1, 0x0, 0x0, 0x1, 0x36, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xAD, 0x55, 0xAD, 0x55, 0xBF, 0xBF, + 0xAD, 0xAD, 0xAB, 0x55, 0xAD, 0xAD, 0xAD, 0x55, 0x53, 0x53, 0x53, 0x52, 0x3D, 0x34, 0x12, 0x48, + 0x46, 0x46, 0x36, 0x1D, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x1D, 0x50, 0x5B, 0x5B, 0x5D, 0x5, + 0x29, 0xD6, 0x39, 0x1F, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, 0x2C, 0xBD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, + 0xBD, 0xBD, 0xAC, 0x16, 0x15, 0x14, 0x9, 0x6, 0x6, 0x15, 0x14, 0x2, 0x2, 0x2, 0x14, 0x2, + 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, 0x2, 0x15, 0x15, 0x15, 0x15, 0x16, 0xF2, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, + 0x38, 0x31, 0xE, 0x5, 0x4, 0x4, 0xFE, 0xB, 0x20, 0x5, 0x4, 0x4, 0x0, 0xFE, 0x0, 0x0, + 0x1A, 0x55, 0x55, 0x55, 0xCE, 0xC2, 0xCE, 0xC2, 0xC2, 0xC9, 0x5C, 0x5A, 0x57, 0xC0, 0xC2, 0xC2, + 0xC1, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xCE, 0xAB, 0x1, 0x0, 0x12, 0xBF, + 0xC9, 0xCD, 0xCE, 0xC9, 0x1B, 0x1, 0x0, 0x0, 0x0, 0x1, 0x8, 0xAB, 0xC1, 0xC1, 0xC2, 0xC2, + 0xC1, 0xC1, 0xC1, 0xC2, 0xC2, 0xC2, 0xEC, 0xEC, 0xC2, 0xEA, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, + 0xCD, 0xCD, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xCE, 0xCF, 0xF3, 0xCF, 0xBE, + 0xBE, 0xBE, 0xBE, 0xBE, 0xAB, 0xAB, 0x53, 0x53, 0x47, 0x47, 0x49, 0x53, 0x5B, 0x5B, 0x5D, 0xB, + 0x25, 0xD7, 0x71, 0x1F, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB6, + 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, + 0xD8, 0xE9, 0xBC, 0x27, 0x16, 0x4E, 0xAC, 0xA9, 0x16, 0x14, 0x2, 0x2, 0x14, 0x15, 0x15, 0x15, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x14, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x99, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, + 0x33, 0x31, 0xE, 0xB, 0x4, 0x0, 0x20, 0xA7, 0x37, 0x5, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x3, 0x55, 0xBF, 0xBF, 0xC2, 0xCD, 0xBF, 0xBF, 0x5C, 0x5C, 0x5A, 0x5A, 0x5C, 0xC9, 0x55, + 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0xBF, 0x55, 0x12, 0x1, 0x0, 0x1, 0x1A, + 0xAD, 0x55, 0x55, 0xBF, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x1B, 0x1B, 0x1B, 0x59, + 0xAD, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCD, 0xBF, 0xCD, 0xC9, 0xCD, 0xCD, 0xCE, 0xCD, + 0xCD, 0xCD, 0xBF, 0xBF, 0xBF, 0xC9, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xCD, 0xCF, 0xD0, 0xD0, 0xC2, + 0xC2, 0xC2, 0xCE, 0xCE, 0xC2, 0xCE, 0xCE, 0xC9, 0xBE, 0xBE, 0xBE, 0xC0, 0x5B, 0x5B, 0x5D, 0xC, + 0x1F, 0x9D, 0x96, 0x0, 0x4, 0xF2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, + 0xF0, 0xF0, 0xF5, 0xEB, 0xC6, 0xD8, 0xBD, 0xBD, 0xB6, 0x27, 0x14, 0x14, 0x14, 0x15, 0x15, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x2, 0x14, 0x24, 0x15, 0x15, 0x17, 0x26, 0x24, 0x26, 0x26, 0x26, 0x4E, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x38, 0x31, 0x2C, 0x5, 0x4, 0x0, 0x30, 0xB0, 0x37, 0x4, 0x0, 0x4, 0x1A, 0x12, 0x12, 0x3, + 0x1, 0x1, 0x3, 0x1A, 0x4C, 0xC9, 0xCA, 0xCA, 0xC9, 0x5C, 0xC0, 0x5A, 0x5C, 0x5C, 0x5C, 0x55, + 0xBF, 0xBF, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x55, 0xBF, 0x5C, 0x43, 0x1, 0x0, 0x1, 0x3, + 0x12, 0x55, 0xC9, 0xC9, 0x1D, 0x18, 0x18, 0x18, 0x12, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x5A, + 0x36, 0x3D, 0x4C, 0x4C, 0x4F, 0x52, 0x52, 0x52, 0xA6, 0x54, 0xC9, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, + 0xCE, 0xCE, 0xBF, 0xC9, 0xC6, 0x9B, 0x9B, 0xB2, 0xAC, 0xC9, 0xCD, 0xCD, 0xCF, 0xD0, 0xD0, 0x5C, + 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5A, 0xC0, 0x5B, 0x5D, 0x5B, 0x5D, 0xC, + 0x25, 0x9D, 0x6B, 0x4, 0x25, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF8, 0xF9, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xE9, 0xE9, 0xBD, 0xA5, 0x4D, 0x97, 0xAC, 0x4E, 0x2E, + 0x9, 0x14, 0x14, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x24, 0x26, 0x24, 0x26, 0x26, 0x17, 0x4E, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x38, 0x31, 0xE, 0x4, 0x6, 0x0, 0x30, 0x72, 0x25, 0x0, 0x0, 0x4, 0xCE, 0xC9, 0xCE, 0xCD, + 0x36, 0x1, 0x1, 0x12, 0x18, 0xBF, 0xC9, 0xC9, 0xC9, 0x5C, 0xC9, 0x5C, 0x5C, 0x5C, 0xC9, 0xAD, + 0xBF, 0xC9, 0xBF, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0xAD, 0xBF, 0xBF, 0xBF, 0x12, 0x0, 0x3, 0x1B, + 0x1, 0x8, 0x55, 0xC9, 0x1D, 0x18, 0x18, 0x18, 0x12, 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x5A, + 0x1A, 0x1A, 0x2D, 0x1A, 0x2F, 0x34, 0x34, 0x34, 0x34, 0x4C, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, + 0xCD, 0xCE, 0xBF, 0xC9, 0xB4, 0x39, 0x39, 0x39, 0x48, 0xBF, 0xBF, 0xC9, 0xCF, 0xD0, 0xCC, 0x5B, + 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xC, + 0x37, 0xE6, 0x9B, 0x25, 0x29, 0x4, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF5, 0xF5, 0xF7, 0xF5, 0xF0, 0xE9, 0xD8, 0xBD, 0xB8, + 0xAC, 0x39, 0x15, 0x14, 0x14, 0x15, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x26, 0x17, 0x99, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x38, 0x32, 0xE, 0x4, 0x4, 0x0, 0x37, 0x6C, 0x20, 0x4, 0x4, 0x4, 0xBF, 0xBF, 0xBF, 0xBF, + 0x55, 0x3, 0x18, 0xC9, 0xCC, 0x5A, 0xC9, 0xC9, 0xC9, 0x5C, 0xC9, 0x5C, 0x5A, 0x5C, 0x5C, 0xBF, + 0xBF, 0xC8, 0xC3, 0xC4, 0xC7, 0xAD, 0xE1, 0x9D, 0xAD, 0xBF, 0xAD, 0xBF, 0x4F, 0x1, 0x1, 0xBF, + 0x1A, 0x0, 0x8, 0xAD, 0x36, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x34, 0x3C, 0x2F, 0x3A, 0x1D, 0x5A, + 0x4C, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCE, 0xCD, 0xCD, 0xC9, 0xCD, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, + 0xC9, 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xCF, 0xD0, 0xBF, 0x53, + 0x56, 0x59, 0x5A, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xC, + 0x4, 0x6D, 0x25, 0x1F, 0x30, 0x0, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xD8, + 0xBD, 0xB8, 0xAC, 0x35, 0x16, 0x14, 0x15, 0x17, 0x26, 0x26, 0x26, 0x26, 0x17, 0x26, 0x24, 0xEF, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x31, 0xE, 0x0, 0x4, 0x4, 0x39, 0x71, 0x29, 0x4, 0x0, 0x4, 0x55, 0xBF, 0xBF, 0x5C, + 0x5C, 0x1B, 0x1A, 0x53, 0xCE, 0x5A, 0xC9, 0xBF, 0xBF, 0xBF, 0xCE, 0x5C, 0x5A, 0x5C, 0xAD, 0xAD, + 0xBF, 0xAD, 0x55, 0xAD, 0xC3, 0x55, 0xC6, 0xC5, 0xAD, 0x55, 0xBF, 0xBF, 0xBF, 0xA, 0x1, 0x55, + 0xBF, 0x34, 0x1, 0xA, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xCD, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0x5A, + 0x52, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xCE, 0xCE, 0xCD, 0xCD, 0xC9, 0xC9, + 0xC9, 0xCD, 0xBF, 0xC9, 0xE9, 0xC6, 0xB8, 0xC4, 0xC9, 0xC9, 0xC9, 0xCD, 0xCF, 0xD0, 0xAD, 0x52, + 0x53, 0x53, 0x55, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5, + 0x4, 0x0, 0xB, 0x6, 0x25, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, + 0x41, 0xBD, 0xF9, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, + 0xE9, 0xD8, 0xBD, 0xB7, 0xAA, 0x35, 0x16, 0x17, 0x17, 0x17, 0x15, 0x17, 0x17, 0x17, 0x4D, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, + 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, + 0x3A, 0x33, 0xE, 0x0, 0x4, 0x4, 0x30, 0x39, 0x25, 0x6, 0x4, 0x4, 0x36, 0x36, 0x36, 0x46, + 0x46, 0x46, 0x53, 0xC9, 0xCE, 0x5A, 0x5C, 0xBF, 0xC9, 0xBF, 0xCE, 0x5A, 0x5A, 0x5C, 0x5C, 0xBF, + 0xC9, 0xC9, 0xC9, 0xC4, 0xAC, 0x54, 0xC3, 0xC3, 0xAD, 0x53, 0xBF, 0xBF, 0xBF, 0x34, 0x1, 0x52, + 0xC9, 0xBF, 0x36, 0x1, 0xA, 0x55, 0xBF, 0xBF, 0xBF, 0xC9, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0x59, + 0x52, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xBF, 0xAD, + 0xAD, 0xAD, 0xAD, 0xBF, 0x6B, 0x77, 0x65, 0x65, 0xBF, 0xC9, 0xCE, 0xCF, 0xF3, 0xF3, 0xCA, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x23, + 0x5, 0x25, 0x25, 0xB, 0x4, 0x39, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0xE, 0x38, 0xB4, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xB8, 0xAC, 0x39, 0x24, 0x15, 0x17, 0x17, 0x17, 0x27, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, + 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, + 0x3A, 0x33, 0xE, 0x4, 0x4, 0x0, 0x20, 0x37, 0x1F, 0x1F, 0x4, 0x4, 0x52, 0x53, 0x54, 0x55, + 0x55, 0xAD, 0xAB, 0x4F, 0xC9, 0xC0, 0x55, 0xBF, 0xBF, 0xBF, 0xCE, 0x5C, 0x5A, 0x5C, 0x5C, 0xBF, + 0xBF, 0xBF, 0xBF, 0xC9, 0xC4, 0xAD, 0xC9, 0xAD, 0xBF, 0x54, 0xBF, 0xBF, 0xBF, 0x4F, 0x3, 0x46, + 0xBF, 0xC9, 0xBF, 0x36, 0x1, 0x3, 0x53, 0x55, 0x55, 0xBF, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0x59, + 0x4F, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0x55, 0x55, 0xAD, 0xAD, 0xBF, 0xBF, + 0xBF, 0xC9, 0xBF, 0xBF, 0xAD, 0xAD, 0x55, 0xAD, 0xBF, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5, + 0x30, 0x97, 0x25, 0x20, 0x4, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, + 0xBD, 0x41, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEF, 0xEF, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF7, 0xE9, 0xB6, 0xB8, 0xBD, 0x97, 0x27, 0x15, 0x24, 0x27, 0x4D, 0xF2, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3C, 0x33, 0x2C, 0x5, 0x4, 0x0, 0x20, 0x39, 0x1F, 0x1F, 0x4, 0x4, 0x53, 0x53, 0x53, 0x53, + 0x53, 0x53, 0xBE, 0xC2, 0xC9, 0x5C, 0xBF, 0xBF, 0xAD, 0xBF, 0xCE, 0x5A, 0x5A, 0x5A, 0xBF, 0xAD, + 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0x55, 0x55, 0x55, 0x55, 0x36, 0x1, 0x34, + 0xCD, 0xBF, 0xBF, 0xC9, 0x52, 0x1, 0x3, 0x52, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0x59, + 0x52, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, + 0xC9, 0xC9, 0xC0, 0xC9, 0xC9, 0xBF, 0xC0, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5B, 0x5D, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5, + 0x37, 0xB5, 0x29, 0x20, 0x6, 0x37, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE9, 0xA8, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x6, 0x16, 0x35, 0x99, 0xEF, 0xF9, 0xF2, 0xF2, 0xF2, 0xEB, + 0xB6, 0x97, 0xAC, 0x35, 0x6, 0x16, 0x39, 0x2, 0x2, 0x2, 0x2, 0x6, 0x16, 0x99, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, + 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3C, 0x33, 0x2C, 0xD, 0x0, 0x0, 0x20, 0x39, 0x1F, 0x20, 0x4, 0x4, 0xBF, 0xC9, 0xC9, 0xC9, + 0xBF, 0xC9, 0xBF, 0xBF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xCE, 0x5C, 0x5C, 0x5A, 0x55, 0x46, + 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x12, 0x12, + 0xCD, 0xBF, 0xC9, 0xC9, 0xC9, 0x53, 0x3, 0x1A, 0x2F, 0x52, 0xAB, 0xBF, 0xBF, 0xBF, 0xC9, 0x55, + 0x52, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCB, 0xCD, 0xCF, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5D, 0xD, + 0x37, 0xD5, 0x6B, 0x20, 0x37, 0xFE, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB5, 0x15, 0x15, 0x6, 0x16, 0xAC, 0xAC, 0x24, 0x6, 0x16, 0x9, + 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x14, 0x17, 0x26, 0x17, 0x2, 0x2, 0x2, 0x99, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, + 0x3C, 0x2E, 0x2C, 0x20, 0x0, 0x4, 0x20, 0x37, 0x20, 0x20, 0x4, 0x4, 0xD0, 0xC9, 0x36, 0x1A, + 0xA, 0x3, 0x1, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1A, 0xC9, 0x5A, 0x5C, 0x5A, 0x36, 0x34, + 0x34, 0x4F, 0x53, 0x59, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x46, 0x3, + 0xCD, 0xBF, 0xC9, 0xC9, 0xCD, 0xC9, 0x34, 0x43, 0x52, 0xAD, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0x55, + 0x52, 0xC9, 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCD, 0xCF, 0xCA, 0xCA, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x25, 0xD5, 0x71, 0xB, 0x30, 0xFE, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEF, 0x39, 0x27, 0x4D, 0x35, 0x16, 0x2, 0x14, 0x24, 0x24, 0x6, + 0x15, 0x14, 0x14, 0x15, 0x2, 0x2, 0x14, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x15, 0x27, 0xF6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, + 0x3C, 0x2E, 0xE, 0x20, 0x0, 0x0, 0xB, 0x37, 0x20, 0xB, 0x4, 0x0, 0xD0, 0x4C, 0x1A, 0x12, + 0xA, 0x8, 0x1A, 0xA, 0x12, 0x12, 0x1A, 0x8, 0x8, 0x1A, 0xBF, 0xC0, 0x5C, 0x5A, 0x36, 0x2F, + 0x2D, 0x2D, 0x2F, 0x36, 0x52, 0x55, 0x59, 0x59, 0x53, 0x53, 0x52, 0x52, 0x53, 0x54, 0x54, 0x1A, + 0xAD, 0xBF, 0xBF, 0xAD, 0xBF, 0xAD, 0x36, 0x4F, 0x55, 0xBF, 0xAD, 0xBF, 0xC4, 0x9D, 0xAD, 0x5A, + 0x52, 0xC9, 0xCD, 0xCB, 0xCB, 0xCF, 0xCB, 0xCD, 0xCE, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x2, + 0x1F, 0xE6, 0x97, 0xB, 0x4, 0x6E, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF8, 0xF7, 0xF5, 0x99, 0x16, 0x6, 0x6, 0x0, 0x2, 0x2, 0x15, 0x15, 0x17, 0x26, + 0x2A, 0x24, 0x17, 0x15, 0x15, 0x17, 0x24, 0x15, 0x15, 0x15, 0x17, 0x15, 0x15, 0x26, 0x15, 0xB5, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, + 0x3A, 0x32, 0x2C, 0x25, 0x0, 0x0, 0x5, 0x37, 0x20, 0xB, 0x4, 0x0, 0x36, 0x1A, 0x12, 0xA, + 0x12, 0x12, 0x8, 0xA, 0x12, 0x2D, 0x12, 0xA, 0x8, 0x2C, 0x55, 0xC9, 0xC0, 0x5C, 0x4C, 0x34, + 0x33, 0x38, 0x38, 0x3B, 0x48, 0x48, 0xA6, 0xAD, 0x55, 0x55, 0x55, 0x55, 0x53, 0x53, 0x53, 0x48, + 0x55, 0xCE, 0xCD, 0xCD, 0xCD, 0xCD, 0x54, 0x55, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xA1, 0xC3, 0x55, + 0x2D, 0x2F, 0x36, 0x3D, 0x3D, 0x3D, 0x48, 0x3D, 0x3D, 0x46, 0x4F, 0x52, 0x52, 0x53, 0x53, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x2, + 0x4, 0xDB, 0x39, 0xB, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF5, 0xEE, 0xE9, 0xB8, 0x24, 0x15, 0x17, 0x26, 0x24, 0x17, 0x17, 0x15, 0x15, 0x15, 0x24, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x24, 0x15, 0x14, 0x15, 0x17, 0x26, 0x26, 0x14, 0x15, 0x17, 0x24, + 0xE, 0x2C, 0x2C, 0xE, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA5, + 0x3A, 0x31, 0x25, 0x5, 0x4, 0x0, 0xD, 0x37, 0x20, 0x5, 0x4, 0x4, 0x1A, 0x1A, 0xA, 0x8, + 0x8, 0x3, 0x8, 0x3, 0x3, 0x3, 0xA, 0x2C, 0x12, 0x2D, 0x55, 0xC9, 0x5C, 0x5C, 0x52, 0x3B, + 0x3C, 0x33, 0x38, 0x3D, 0xA3, 0xA3, 0xA4, 0xAD, 0xAD, 0xBF, 0xBF, 0xAD, 0x55, 0x59, 0x55, 0x55, + 0x53, 0xC9, 0xCE, 0xCE, 0xCE, 0xCD, 0x54, 0xBF, 0xBF, 0xCF, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xAD, + 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xBF, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x1F, 0xE2, 0x6E, 0xB, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xEA, 0xD8, 0xBD, 0x3A, 0x15, 0x26, 0x26, 0x26, 0x26, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, + 0x26, 0x26, 0x17, 0x15, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x26, 0x15, 0x2, 0x15, 0x25, + 0x2C, 0x3A, 0xAA, 0x3A, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, + 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x30, 0xD, 0x0, 0x0, 0x0, 0xD, 0x39, 0x30, 0x1F, 0x0, 0x4, 0x2F, 0x1A, 0x12, 0x12, + 0x8, 0x8, 0x3, 0x3, 0xE, 0x2C, 0x33, 0x3C, 0x2F, 0x2F, 0x53, 0xCE, 0x5C, 0x5C, 0x52, 0x3A, + 0x2F, 0x3A, 0x48, 0xA6, 0xAD, 0xAD, 0xAD, 0xC4, 0xBF, 0xC9, 0xBF, 0xC4, 0xC4, 0xBF, 0xAD, 0xBF, + 0x59, 0x55, 0xCF, 0xCF, 0xCF, 0xCF, 0x54, 0xBF, 0xBF, 0xC9, 0xCF, 0xCD, 0xCD, 0xCD, 0xCF, 0xCE, + 0xBF, 0xC9, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5A, 0x5B, 0x5D, 0x6, + 0x6, 0xD7, 0x6E, 0x1F, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB6, + 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xE9, 0xBD, 0xBD, 0x2E, 0x2, 0x24, 0x26, 0x26, 0x26, 0x17, 0x17, 0x15, 0x14, 0x14, 0x15, + 0x15, 0x17, 0x17, 0x24, 0x24, 0x15, 0x15, 0x14, 0x15, 0x26, 0x26, 0x15, 0x6, 0x0, 0xD, 0x2E, + 0x2C, 0x2C, 0x2C, 0x41, 0xA8, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x3A, 0x31, 0xB, 0x0, 0x0, 0x0, 0xD, 0x37, 0x37, 0x1F, 0x0, 0x4, 0x1B, 0x1B, 0x1B, 0x18, + 0x12, 0x12, 0x8, 0x3, 0x3, 0x3, 0x8, 0x1A, 0x1A, 0x2C, 0x4F, 0xCE, 0x5A, 0x5A, 0x53, 0x2F, + 0x1A, 0x2F, 0x34, 0x48, 0x52, 0xA6, 0xA6, 0xAB, 0xAD, 0xAD, 0xAD, 0xA6, 0xA6, 0xA6, 0xA6, 0xAD, + 0xAD, 0xBF, 0xAD, 0xC4, 0xC4, 0xAD, 0x4C, 0x55, 0xC9, 0x5A, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xCD, + 0x5A, 0xC9, 0xCE, 0xCE, 0xD0, 0xD0, 0xCD, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x1F, 0xD7, 0x71, 0x6, 0x0, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xBB, 0x41, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF5, 0xE9, 0xD8, 0xBD, 0xA3, 0x2C, 0x32, 0x27, 0x24, 0x15, 0x15, 0x15, 0x15, 0x17, 0x17, 0x17, + 0x14, 0x15, 0x17, 0x26, 0x17, 0x14, 0x15, 0x14, 0x14, 0x17, 0x17, 0x26, 0x24, 0x2, 0xE, 0xE, + 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0x41, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x3A, 0x32, 0xB, 0x0, 0x2, 0x0, 0xD, 0x37, 0x25, 0x6, 0x4, 0x4, 0x1B, 0x19, 0x19, 0x10, + 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0xF, 0x10, 0x46, 0xCE, 0x5A, 0x5C, 0x53, 0x1A, + 0x18, 0x1A, 0x3B, 0x3B, 0x3B, 0x3D, 0xA5, 0x52, 0x48, 0x48, 0x52, 0xA4, 0x52, 0xA4, 0xA4, 0xA6, + 0xC4, 0xCD, 0xAD, 0xCD, 0xBF, 0xBF, 0x46, 0xBF, 0x4C, 0x5C, 0xC9, 0xC9, 0xC9, 0xC4, 0xC5, 0xC4, + 0x5A, 0xC9, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x1F, 0xD7, 0x71, 0x6, 0x0, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF8, 0xF5, 0xF0, 0xF0, 0xE9, 0xD8, 0xBB, 0xB6, 0x35, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, + 0x2, 0x14, 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, 0x14, 0x24, 0x26, 0x26, 0x17, 0x14, 0x16, 0x41, + 0xAA, 0xA8, 0xA8, 0xA3, 0x33, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x41, 0xBB, 0xF7, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x33, 0x2E, 0x6, 0x0, 0x2, 0x0, 0xD, 0x39, 0x29, 0x1F, 0x4, 0x4, 0x1C, 0x1A, 0x1D, 0x18, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1A, 0x2F, 0x10, 0x11, 0x1D, 0xD0, 0x5C, 0x5C, 0x55, 0x11, + 0x19, 0x19, 0x18, 0x3D, 0x48, 0x3D, 0x48, 0xA6, 0x55, 0xBF, 0xC9, 0xBF, 0xC4, 0xBF, 0xBF, 0xBF, + 0xBF, 0xC1, 0xC4, 0xC9, 0xBF, 0x55, 0x53, 0xBF, 0x4F, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, + 0xBF, 0x52, 0x52, 0x52, 0x53, 0x50, 0x53, 0x53, 0x55, 0x55, 0x55, 0x55, 0x50, 0x53, 0x5A, 0x5C, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x5D, 0x4, + 0x4, 0xB5, 0x6B, 0x1F, 0x4, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x1, 0x7, + 0x7, 0x7, 0xE, 0x2C, 0x2C, 0x7, 0xE, 0x7, 0x0, 0x2C, 0x35, 0x16, 0x16, 0x16, 0x16, 0x15, + 0x2, 0x2, 0x2, 0x17, 0x17, 0x17, 0x15, 0x14, 0x2, 0x14, 0x15, 0x15, 0x15, 0x4D, 0x6F, 0x2C, + 0xE, 0xE, 0x2C, 0x31, 0xAA, 0x3A, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x38, 0x2C, 0x6, 0x0, 0x2, 0x2, 0x25, 0x39, 0x29, 0x1E, 0x4, 0x4, 0x36, 0x1A, 0x55, 0x12, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x2E, 0x1A, 0x10, 0x10, 0x1B, 0xCE, 0x5C, 0x5C, 0x59, 0x18, + 0x19, 0x19, 0x19, 0x19, 0x3D, 0x48, 0x54, 0x54, 0x55, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0x54, 0xAD, + 0x55, 0x55, 0x55, 0xAD, 0x54, 0x3D, 0x59, 0xAD, 0x36, 0xAD, 0x53, 0x1B, 0x1B, 0x1B, 0x1D, 0x1A, + 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x34, 0x53, 0xBF, 0xC2, 0xC0, 0xAB, 0xBF, 0xBF, 0xBF, 0xBF, + 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x4, 0xB2, 0x39, 0x1F, 0x4, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x33, 0xAA, + 0x3C, 0x2C, 0x3A, 0x3C, 0x3A, 0x38, 0x41, 0x2C, 0xE, 0xE, 0xE, 0x31, 0x3F, 0xE, 0x9, 0x2, + 0x2, 0x0, 0x2, 0x17, 0x17, 0x17, 0x15, 0x2, 0x2, 0x6, 0x16, 0x16, 0x2E, 0x33, 0x33, 0x2C, + 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0xAA, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, + 0x38, 0x25, 0x6, 0x0, 0x4, 0x4, 0x25, 0x39, 0x29, 0x1E, 0x4, 0x1E, 0x1C, 0x36, 0x59, 0x12, + 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x1A, 0x18, 0x18, 0x10, 0xCE, 0xC0, 0x5A, 0x5A, 0x10, + 0x18, 0x19, 0x19, 0x19, 0x18, 0x19, 0x19, 0x19, 0x19, 0x11, 0x11, 0x19, 0x1A, 0x18, 0x1A, 0x1C, + 0x19, 0x19, 0x19, 0x42, 0x1D, 0x1B, 0x59, 0x12, 0x1A, 0x55, 0x53, 0x1A, 0x1A, 0x1A, 0x53, 0x36, + 0x46, 0x1B, 0x1B, 0x1C, 0x1C, 0x1B, 0x42, 0x4F, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xD, + 0x1F, 0x9B, 0x37, 0x6, 0x4, 0x6F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x38, 0xA3, 0x38, + 0x3F, 0xA3, 0x38, 0x2C, 0x33, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x3F, 0xE, 0x2, 0x15, + 0x17, 0x15, 0x15, 0x17, 0x17, 0x15, 0x9, 0x2E, 0x3A, 0x2C, 0x31, 0x33, 0x31, 0x31, 0x31, 0x2C, + 0x33, 0x38, 0x31, 0xE, 0x2C, 0x41, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, + 0x33, 0x25, 0x6, 0x4, 0x4, 0x0, 0x25, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0xC9, 0xC9, 0x55, 0xC9, + 0xCD, 0xC9, 0xCE, 0xD0, 0xC9, 0xC9, 0xCB, 0xCC, 0xCC, 0xCC, 0x53, 0xC9, 0xC9, 0x5A, 0x1C, 0x10, + 0x10, 0x18, 0x12, 0x10, 0x10, 0x12, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1A, 0x1A, 0x12, 0x12, 0x12, + 0x1A, 0x1B, 0x4F, 0x36, 0x36, 0x36, 0x53, 0x1B, 0xBF, 0x53, 0xBF, 0xAD, 0xBF, 0xBF, 0x55, 0xBF, + 0xC9, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xAD, 0x52, 0x4F, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x6, 0x71, 0x29, 0x4, 0x4, 0xA9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xA3, + 0xE, 0xE, 0x33, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x2C, 0x3F, + 0x41, 0x33, 0x41, 0xAA, 0x2E, 0x16, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0x38, 0x2C, 0x6, 0x14, 0x17, + 0x17, 0x17, 0x17, 0x17, 0x14, 0x15, 0x4E, 0x3A, 0x31, 0x2C, 0x2C, 0xB6, 0x3A, 0x2C, 0x2C, 0x31, + 0x33, 0x33, 0x38, 0xE, 0x2C, 0x3A, 0x33, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, + 0x33, 0xB6, 0xE9, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, + 0x32, 0x25, 0x4, 0x0, 0x6, 0x0, 0x25, 0x37, 0x29, 0x1E, 0x1E, 0x1F, 0xCE, 0xC9, 0x55, 0xC9, + 0xC9, 0xC9, 0xC9, 0xCE, 0xC9, 0xC9, 0xCB, 0xCB, 0xCB, 0xCE, 0xCB, 0xBF, 0xCA, 0x46, 0x43, 0x1B, + 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x1A, 0x55, 0xC9, 0xC9, 0xCA, 0xC9, 0xC9, 0xCE, 0xCE, 0xC9, + 0xC9, 0xC0, 0xC9, 0xC9, 0xC9, 0x46, 0x50, 0x1B, 0xCD, 0xAD, 0x5C, 0xC9, 0xC9, 0xCD, 0x55, 0xC9, + 0xCB, 0xC9, 0xC9, 0xC9, 0xCD, 0xD0, 0xF3, 0xF3, 0xCD, 0xBF, 0xBE, 0xBF, 0xBF, 0xBF, 0xC0, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x4, 0x37, 0x37, 0x1F, 0x4, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF5, 0xF5, 0xE, 0x2C, 0x33, 0x33, + 0xE, 0x3F, 0x3C, 0x25, 0x2, 0x2, 0x2, 0x9, 0x16, 0xE, 0x2C, 0x3F, 0x38, 0x9, 0x2, 0x14, + 0x15, 0x17, 0x17, 0x17, 0x15, 0x2, 0x16, 0x16, 0x2C, 0x2C, 0x2C, 0xB6, 0xE, 0xE, 0x2C, 0x2C, + 0x31, 0x33, 0x33, 0x2C, 0x33, 0xA3, 0x33, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, + 0x33, 0x3A, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x2E, 0x25, 0x6, 0x0, 0x4, 0x0, 0x30, 0x67, 0x29, 0x1E, 0x1E, 0x1F, 0xC9, 0xC9, 0xA6, 0x9D, + 0x9F, 0x9F, 0xA1, 0xA1, 0xA2, 0xA1, 0xA2, 0xA1, 0xC4, 0xC9, 0xCB, 0xBF, 0xC9, 0x1A, 0x5A, 0x55, + 0x18, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0xC9, 0xCC, 0xCC, 0xCB, 0xCB, 0xC9, 0xCB, 0xCE, + 0xCE, 0xCE, 0xCD, 0xCB, 0xBF, 0x50, 0x55, 0x1B, 0xCD, 0xBF, 0x5C, 0xC9, 0xC9, 0xCD, 0x55, 0xC9, + 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xCF, 0xF3, 0xFA, 0xCD, 0x55, 0x55, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5D, 0x6, + 0x4, 0x3E, 0x37, 0x1F, 0x1E, 0xB2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xAA, + 0xF9, 0xFD, 0xEA, 0x3F, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xE9, 0xE9, 0xE, 0x3A, 0x41, 0x41, + 0x2C, 0x2C, 0x2C, 0x16, 0x15, 0x15, 0x14, 0x2, 0x2, 0xD, 0x3C, 0x9, 0x2C, 0x3C, 0x2E, 0x6, + 0x2, 0x2, 0x15, 0x15, 0x15, 0x14, 0x2, 0x2, 0x16, 0x2C, 0x2C, 0xB4, 0x3A, 0x2C, 0x2C, 0x33, + 0x33, 0x31, 0x2C, 0x31, 0x33, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xD8, 0x3A, 0x3A, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0x94, 0x38, + 0x2C, 0x20, 0xD, 0x0, 0x6, 0x0, 0x25, 0x37, 0x29, 0x1F, 0x1E, 0x1F, 0xC9, 0xCE, 0x52, 0x52, + 0x52, 0x52, 0x54, 0x52, 0x54, 0x54, 0x54, 0x55, 0xC9, 0xC9, 0xC9, 0xBF, 0x55, 0x43, 0x5B, 0x50, + 0x43, 0x19, 0x1B, 0x1B, 0x4D, 0x1B, 0x42, 0xAD, 0xCF, 0xD0, 0xD0, 0xD0, 0xD0, 0xC9, 0xCB, 0xCF, + 0xCB, 0xCF, 0xCE, 0xCE, 0x55, 0x59, 0xC9, 0x36, 0xBF, 0x55, 0xBF, 0xC9, 0xC4, 0xCD, 0x55, 0x55, + 0xAD, 0xBF, 0xC9, 0xC9, 0xCD, 0xF3, 0xFA, 0xFA, 0xD0, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x97, 0x37, 0x1F, 0x1E, 0xB2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, 0xBD, 0xE, 0xA3, 0x33, 0xE, + 0x31, 0x3C, 0x2C, 0x2, 0x2, 0x14, 0x2, 0x2, 0x0, 0x2, 0x6, 0x9, 0x6, 0x9, 0x2, 0x0, + 0x0, 0x0, 0x2, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x15, 0x2C, 0xE, 0x38, 0xA3, 0x3C, 0x31, + 0x2C, 0xE, 0x2C, 0x38, 0x33, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE9, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, 0x94, 0x38, + 0x2C, 0x25, 0xD, 0x4, 0x6, 0x0, 0x4, 0x1F, 0x22, 0x1F, 0x1E, 0x1E, 0xBF, 0xCE, 0x54, 0x9D, + 0x9D, 0x9D, 0x9F, 0x9F, 0x9D, 0x9D, 0x9D, 0x9D, 0xC4, 0xCA, 0xC9, 0xBF, 0xAD, 0x50, 0x5A, 0x4F, + 0x1D, 0x1B, 0x1B, 0x1B, 0x36, 0x1B, 0xAD, 0xF3, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xC3, + 0xC9, 0xC9, 0xCB, 0xC9, 0x52, 0x5A, 0xC9, 0x4C, 0xC9, 0xBF, 0x5C, 0xCD, 0xC9, 0xCD, 0x53, 0x53, + 0xBF, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0xCA, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xD, + 0x6, 0x25, 0xB, 0x6, 0x6, 0xAE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x33, 0x3C, + 0xF5, 0xFD, 0xFD, 0xFD, 0xEE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xBD, 0xBD, 0xBB, 0xBB, 0xE, 0x33, 0x38, 0x3A, + 0x33, 0x2C, 0x2C, 0x6, 0x15, 0x15, 0x15, 0x15, 0x6, 0x14, 0x2, 0x0, 0x0, 0x0, 0x2, 0x2, + 0x0, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x2, 0x2, 0x6, 0x35, 0xA8, + 0x3C, 0xE, 0x38, 0xB4, 0x41, 0x1, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, + 0xE, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, 0x94, 0x38, + 0x2C, 0x2C, 0xD, 0xB, 0x0, 0x0, 0x4, 0x4, 0x20, 0x1E, 0x4, 0x1E, 0x54, 0xCD, 0x53, 0xAD, + 0xAD, 0x55, 0xAD, 0xAD, 0xAD, 0xBF, 0xC9, 0xC9, 0xC9, 0xCA, 0xC9, 0xBF, 0xCE, 0x4F, 0x46, 0xBF, + 0x55, 0xBF, 0xC9, 0xC9, 0xCA, 0xCE, 0xF3, 0xF3, 0xF3, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC0, 0xCD, + 0xCD, 0xCD, 0xCD, 0xCD, 0x46, 0x5C, 0xC9, 0xBF, 0xCD, 0xBF, 0x5C, 0xC9, 0xC9, 0xCE, 0x55, 0xAD, + 0xBF, 0xBF, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xD, + 0x4, 0x4, 0x4, 0x4, 0x1F, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xE, + 0x2C, 0xFD, 0xFD, 0xFD, 0xE, 0x38, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBB, 0xBB, 0x31, 0xA5, 0x31, 0x31, + 0x2C, 0x33, 0x32, 0x14, 0x26, 0x26, 0x26, 0x24, 0x15, 0x15, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x17, 0x14, 0x2, 0x14, 0x15, 0x15, 0x14, 0x16, 0xE, + 0x38, 0xAA, 0x94, 0x31, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, + 0xF7, 0x41, 0xF0, 0x31, 0xEE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x31, 0x2C, 0x20, 0x20, 0xFE, 0x0, 0x20, 0x25, 0x22, 0x1E, 0x1E, 0x1E, 0xC4, 0xCD, 0xBF, 0x96, + 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0x9D, 0x99, 0x99, 0xAD, 0xCA, 0xCA, 0xBF, 0xCC, 0xCB, 0xD0, 0x5C, + 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCE, 0xF3, 0xF3, 0xCD, 0xBF, 0xC9, 0xCD, 0xCD, 0xC9, 0x55, 0x53, + 0x4F, 0x52, 0x52, 0x52, 0x1D, 0x5A, 0x4F, 0x4F, 0xCE, 0xC9, 0x5C, 0xCD, 0xCE, 0xD0, 0x55, 0x53, + 0x55, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0xB, + 0x1F, 0x20, 0xB, 0x6, 0x1F, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, + 0x3F, 0xFD, 0xFD, 0xFD, 0x38, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0x33, 0xA3, 0x38, + 0xE, 0x0, 0xD, 0x15, 0x26, 0x15, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, + 0x14, 0x2, 0x14, 0x14, 0x2, 0x14, 0x24, 0x17, 0x15, 0x2, 0x15, 0x26, 0x26, 0x26, 0x15, 0x9, + 0x9, 0x7, 0x9, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3F, + 0xE9, 0xD8, 0xF5, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3F, + 0x33, 0x2C, 0x20, 0xD, 0x0, 0x0, 0x37, 0x3E, 0x25, 0x1F, 0xB, 0x4, 0xC4, 0xCD, 0xBF, 0x55, + 0xCB, 0xCE, 0xD0, 0xCE, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0x5C, 0xD0, 0xC9, 0x5C, 0x5C, + 0xC9, 0xCA, 0xCB, 0xCD, 0xC9, 0xCD, 0xCD, 0xBF, 0xC9, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xBF, + 0xC9, 0xC2, 0xC2, 0xC2, 0x46, 0xC0, 0xCE, 0xCE, 0xCE, 0xCD, 0xC9, 0xF3, 0xF3, 0xF3, 0xCE, 0xCE, + 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xB, + 0x1F, 0x29, 0x20, 0x1F, 0x1F, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0x2C, 0xE, 0x31, + 0x38, 0xE, 0x6F, 0x16, 0x15, 0x35, 0x40, 0x3C, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x2, 0x15, 0x15, 0x15, 0x15, 0x24, 0x24, 0x24, 0x26, 0x26, 0x26, 0x4D, + 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, + 0xE, 0x41, 0xAA, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xAA, 0x41, + 0x33, 0x30, 0xD, 0x4, 0x7, 0xFE, 0x32, 0x37, 0x20, 0x5, 0x5, 0x4, 0xCF, 0xC4, 0xC9, 0x5C, + 0x55, 0xC9, 0xD0, 0xD0, 0xC9, 0xBF, 0x54, 0x53, 0x53, 0x52, 0x55, 0x53, 0xCE, 0x5C, 0x5A, 0x5C, + 0xC4, 0x52, 0x36, 0x36, 0x52, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xCD, 0xD0, 0xD0, 0xD0, + 0xD0, 0xC9, 0xD0, 0xBF, 0x50, 0xCC, 0xF3, 0xD0, 0xD0, 0xD0, 0xC9, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, + 0xCC, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0x1F, 0x37, 0xB, 0x4, 0x4, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBB, 0xBB, 0xBB, 0x2C, 0x3C, 0x2C, 0x2C, + 0xE, 0x7, 0xAA, 0xA5, 0xA3, 0x94, 0x94, 0x41, 0x40, 0x16, 0x15, 0x24, 0x15, 0x16, 0x15, 0x15, + 0x15, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x15, 0x17, 0x26, 0x26, 0x26, 0x17, 0x26, 0x17, 0x39, + 0xEE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xB4, 0x33, 0xE, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, + 0x38, 0x31, 0xD, 0xD, 0x4, 0x4, 0x3E, 0x6B, 0x25, 0x4, 0x4, 0x4, 0xF3, 0xCD, 0xCE, 0x5C, + 0x5C, 0x5C, 0x5A, 0x55, 0x1A, 0x1A, 0x3, 0x3, 0x10, 0x1A, 0x36, 0x36, 0xC9, 0xC9, 0x5C, 0x5A, + 0x48, 0x36, 0x1C, 0x1C, 0x4C, 0x54, 0xBF, 0xCD, 0xCF, 0xD0, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, + 0xD0, 0xC9, 0xD0, 0x52, 0x5A, 0xCC, 0xD0, 0xD0, 0xD0, 0xD0, 0xC0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x37, 0x6, 0xFE, 0x71, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xE, 0x41, 0xA8, 0x3C, + 0x2C, 0xE, 0xBB, 0xB7, 0xB6, 0xAA, 0xA5, 0xA3, 0xA3, 0xA3, 0x40, 0x35, 0x39, 0x40, 0x39, 0x16, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x15, 0x15, 0x17, 0x26, 0x26, 0x17, 0x17, 0x26, 0x17, 0x39, + 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x3B, 0x2C, 0xD, 0x20, 0x0, 0x0, 0x3E, 0x6E, 0x25, 0x4, 0x4, 0x4, 0xCE, 0xC9, 0xCE, 0xC9, + 0x5C, 0x5C, 0x5C, 0x4F, 0xA, 0x1A, 0x18, 0x12, 0x1A, 0x1B, 0x36, 0x36, 0xC9, 0xC9, 0x5C, 0x5A, + 0x46, 0x3D, 0x3D, 0x3D, 0x3D, 0x4C, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x55, 0xC9, 0xCD, + 0xCD, 0xBF, 0xCE, 0x46, 0x5A, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0x5C, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x37, 0x20, 0x20, 0xD5, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xE, + 0xE, 0xE, 0x2C, 0x41, 0xB6, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xE, 0x2C, 0x2C, 0x41, + 0xA3, 0x2C, 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xB7, 0xB7, 0xBD, 0xB7, 0xB6, 0xB4, 0xAA, 0xA8, 0xA3, + 0x4E, 0x35, 0x9, 0x6, 0x2, 0x14, 0x17, 0x17, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x17, 0x99, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x3A, 0x2C, 0x25, 0x25, 0x0, 0x0, 0x3E, 0x6E, 0x25, 0x1E, 0x4, 0x4, 0xC9, 0xC9, 0xC9, 0xD0, + 0x5C, 0x5C, 0x50, 0x1A, 0x3, 0xA, 0x12, 0x18, 0x1C, 0x1C, 0x36, 0x36, 0xBF, 0xC9, 0x5C, 0x5A, + 0x46, 0x3D, 0x4C, 0x48, 0x52, 0x52, 0x52, 0x52, 0x52, 0x54, 0x53, 0x55, 0x54, 0x55, 0xAD, 0x55, + 0xAD, 0xAD, 0xC1, 0x1D, 0x5A, 0xBF, 0xC9, 0xC9, 0xD0, 0xD0, 0x5C, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x6, + 0x1F, 0x39, 0x20, 0x4, 0x6, 0x39, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, + 0x41, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xE9, 0x2C, 0x31, 0x2C, 0x2C, + 0x2C, 0xE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xF5, 0xF5, 0xF7, 0xF5, 0xF0, 0xEE, 0xE9, 0xBD, 0xB7, + 0xB6, 0xB4, 0xA5, 0x35, 0x9, 0x6, 0x15, 0x17, 0x17, 0x17, 0x26, 0x26, 0x26, 0x26, 0x24, 0xEB, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, + 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x94, + 0x38, 0x2C, 0x25, 0x20, 0x0, 0x0, 0x6C, 0x39, 0x20, 0x1E, 0x4, 0x4, 0x52, 0x52, 0x52, 0x52, + 0x52, 0x36, 0x12, 0x3, 0xA, 0x3, 0x18, 0x12, 0x1A, 0x34, 0x36, 0x36, 0x55, 0xC9, 0x5C, 0x5A, + 0x46, 0x36, 0x3D, 0x48, 0x52, 0xAB, 0x55, 0xBF, 0xBF, 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, + 0xAD, 0xAD, 0xBF, 0x1D, 0x5A, 0xBF, 0xC9, 0xBF, 0xCD, 0xC9, 0xBF, 0xCE, 0xCD, 0xCC, 0xCC, 0xCC, + 0xCC, 0xD0, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x6B, 0x25, 0x6, 0x0, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEE, 0x2C, 0xE, 0x2C, 0x2C, + 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF0, + 0xE9, 0xD8, 0xBD, 0xB8, 0xAA, 0x35, 0x16, 0x15, 0x17, 0x17, 0x15, 0x15, 0x17, 0x26, 0x4D, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, + 0x33, 0x30, 0xD, 0x5, 0x4, 0x4, 0x6C, 0x39, 0x20, 0x1E, 0x4, 0x1E, 0xE, 0x7, 0x3, 0x1, + 0x3, 0x3, 0xA, 0xA, 0x1A, 0xA, 0x18, 0x1A, 0x1B, 0x34, 0x36, 0x36, 0x53, 0xC9, 0x5C, 0x5A, + 0x4F, 0x3D, 0x3D, 0x3D, 0x52, 0xA6, 0x54, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, + 0xAD, 0xAD, 0xAB, 0x46, 0xBF, 0xBF, 0xBF, 0xBF, 0xAD, 0xAD, 0x55, 0xBF, 0xBF, 0xC9, 0xCE, 0xCE, + 0xCE, 0xC9, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xC0, 0xC0, 0xC0, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x39, 0x20, 0x25, 0x1F, 0x39, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x31, + 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xF0, 0xE9, 0xD8, 0xBD, 0xBB, 0xAC, 0x39, 0x24, 0x15, 0x17, 0x17, 0x17, 0x27, 0xF6, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, + 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, + 0x33, 0x25, 0x6, 0x4, 0x4, 0x4, 0x37, 0x37, 0x20, 0x1F, 0x4, 0x1E, 0x2C, 0x2C, 0x8, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0xA, 0x1A, 0x1A, 0x2F, 0x36, 0x36, 0x34, 0x52, 0xC9, 0x5C, 0x59, + 0x34, 0x36, 0x3B, 0x3D, 0x36, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x52, 0xAB, 0xAD, 0xBF, 0x36, + 0x8, 0xAD, 0x3D, 0x50, 0xBF, 0xAD, 0xAD, 0xBF, 0xBF, 0xAD, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, + 0xAD, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC2, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5D, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x6, + 0x1F, 0x97, 0x25, 0x6, 0x6, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF7, 0xF0, 0xE9, 0xE9, 0xD8, 0xBD, 0xB8, 0x97, 0x4D, 0x4D, 0x99, 0xF6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, 0x3A, + 0x32, 0x25, 0x6, 0x4, 0xB, 0x4, 0x30, 0x25, 0x25, 0x1F, 0x4, 0x1E, 0x2C, 0x2F, 0xA, 0xA, + 0x3, 0xA, 0xA, 0x1A, 0x12, 0x12, 0x1A, 0x1A, 0x2F, 0x36, 0x2F, 0x34, 0x4F, 0xC9, 0x5C, 0x50, + 0x1A, 0x3B, 0x3D, 0x3D, 0x3D, 0x48, 0x54, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xBF, 0xA6, 0x1, + 0x8, 0x52, 0x2F, 0x56, 0xAD, 0xAD, 0xAD, 0xBF, 0xCD, 0xC1, 0xBF, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, + 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, + 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x6, 0xB5, 0x6E, 0x6, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x31, 0x2C, 0x2C, + 0x3F, 0x7, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF5, 0xF0, 0xF0, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x30, 0x25, 0x4, 0x4, 0x5, 0x4, 0x30, 0x30, 0x20, 0xB, 0x4, 0x4, 0x1A, 0xA, 0xA, 0x1A, + 0x1C, 0x36, 0x36, 0x36, 0x1A, 0x1A, 0xA, 0x3, 0x7, 0xA, 0xA, 0x2F, 0x3D, 0xCE, 0x5A, 0x1D, + 0x12, 0x3B, 0x3D, 0x3D, 0x48, 0x54, 0xAD, 0xBF, 0xBF, 0xAD, 0xAD, 0xAD, 0xBF, 0xAD, 0x1, 0x8, + 0x8, 0x36, 0x12, 0x57, 0xBF, 0xBF, 0xBF, 0xCD, 0xCD, 0xC1, 0x55, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, + 0xCE, 0xF3, 0xF3, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x1E, 0xA7, 0x3E, 0x1F, 0x1F, 0x20, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0xE, 0x2C, 0x2C, 0x3A, + 0xAA, 0xE, 0x33, 0xB6, 0x41, 0x3A, 0x3A, 0x31, 0x2C, 0x2C, 0x31, 0x33, 0x2C, 0x1, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, 0x3A, + 0x32, 0x30, 0x5, 0x4, 0x5, 0x4, 0x25, 0x25, 0x20, 0x1F, 0x4, 0x4, 0x2F, 0x12, 0x12, 0x1A, + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1C, 0x34, 0x2F, 0x1A, 0x12, 0x2F, 0x2D, 0x36, 0xCE, 0x5A, 0xA, + 0x8, 0x3B, 0x3D, 0x3D, 0x52, 0xAD, 0xAD, 0xAD, 0xAB, 0xA6, 0xA6, 0xA6, 0x52, 0x7, 0x3, 0x3, + 0x3, 0x7, 0x8, 0x43, 0x3D, 0x36, 0x36, 0x3D, 0x3D, 0x3D, 0x36, 0x34, 0x34, 0x34, 0x34, 0x36, + 0xCD, 0xC9, 0xCD, 0xCE, 0xD0, 0xCE, 0xCE, 0xCD, 0xCE, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x4, 0xAF, 0x39, 0xB, 0x4, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xF0, 0x31, 0x41, 0x31, 0xA8, + 0x2C, 0x2C, 0xE, 0x3A, 0x3A, 0x38, 0x3A, 0x31, 0x2C, 0x2C, 0x31, 0x33, 0x38, 0x2C, 0x0, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, + 0x33, 0x2C, 0xB, 0x4, 0x4, 0x4, 0x30, 0x25, 0x20, 0xB, 0x0, 0x4, 0x1A, 0x1A, 0x1A, 0x12, + 0xA, 0x12, 0x1A, 0x36, 0x36, 0x34, 0x34, 0x2F, 0x1A, 0x1A, 0x1A, 0x2F, 0x2F, 0xCE, 0x50, 0x0, + 0x7, 0x3D, 0x3B, 0x3D, 0x48, 0x52, 0xAB, 0xA6, 0x3, 0xF, 0x1, 0x1, 0x12, 0x1D, 0x18, 0x3, + 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x1, 0x0, 0xF, 0xF, 0xF, 0x10, 0x10, 0x19, + 0xBF, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x50, 0x51, 0x5A, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x4, 0xB2, 0x6B, 0xD, 0x4, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, + 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEE, 0x41, 0x1, 0xA5, 0x3A, + 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x33, 0xE, 0x2C, 0x2C, 0x2C, 0x33, 0x38, 0x31, 0xE, 0x7, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, + 0x33, 0x2C, 0xE, 0x5, 0x4, 0x0, 0x30, 0x25, 0x20, 0xB, 0x0, 0x4, 0x2F, 0x1C, 0x1C, 0x1C, + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x2F, 0x34, 0x2F, 0x34, 0x34, 0x34, 0x34, 0x2F, 0xC9, 0x43, 0x0, + 0x1, 0x3D, 0x36, 0x3A, 0x36, 0x3D, 0x48, 0xA, 0x1, 0x1, 0x0, 0xFE, 0x52, 0x55, 0x10, 0x0, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x1, 0xF, 0x10, 0x11, 0x43, + 0xBF, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0x5D, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x4F, 0x0, 0x3, 0x10, 0x10, 0x10, 0x1B, 0x42, 0x43, 0x43, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x4, 0xD5, 0x97, 0xB, 0x4, 0xE6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, + 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xEA, 0xF7, 0x94, 0x0, 0x2C, + 0x2C, 0x2C, 0xE, 0x2C, 0x31, 0x31, 0x2C, 0x2C, 0x2C, 0x31, 0x31, 0x31, 0x2C, 0x2C, 0x3C, 0x33, + 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x33, 0x2C, 0x2C, 0xB, 0x4, 0x0, 0x30, 0x25, 0x20, 0x5, 0x0, 0x4, 0xA, 0x3, 0x3, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, + 0x1, 0xF, 0xF, 0xF, 0xF, 0x1, 0x0, 0x1, 0x0, 0xFE, 0xFE, 0x0, 0x52, 0x59, 0x1, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x10, 0x42, + 0x36, 0x53, 0x54, 0x1B, 0x52, 0x19, 0x43, 0x1B, 0x1B, 0x1D, 0x1D, 0x43, 0x1D, 0x1D, 0x1B, 0x1D, + 0x1B, 0x1D, 0x1B, 0x1B, 0x1A, 0x1, 0x1, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x3, 0x3, 0x5B, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x1E, 0xD7, 0x97, 0x6, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xE9, 0xEA, 0xEE, 0x3F, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x7, 0xA8, 0xA8, 0xB4, 0x41, 0x31, 0xB4, 0x38, + 0x7, 0x0, 0x9, 0xE, 0xE, 0xE, 0x31, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0xE, 0x2C, 0xE, + 0xE, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x38, 0x31, 0x2C, 0x5, 0x4, 0x4, 0x30, 0x37, 0x20, 0x5, 0x4, 0x4, 0x8, 0x10, 0x3, 0x1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0xF, 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x52, 0x50, 0x0, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xA, 0x1A, 0x1A, 0x1A, 0x12, 0x12, 0x1B, 0x1D, + 0xF, 0x10, 0x1, 0xF, 0x1, 0x10, 0x1, 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x46, 0x46, 0x50, + 0x50, 0x59, 0x56, 0x51, 0x57, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x1F, 0xDB, 0xA9, 0x4, 0x4, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, + 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xD8, 0xE9, 0x3F, 0x0, 0x2C, 0x2C, 0x38, 0xA3, 0x33, 0x3F, + 0xA8, 0x31, 0xE, 0xE, 0xE, 0x41, 0x3F, 0x2C, 0x33, 0x31, 0x2C, 0x38, 0x38, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, + 0x38, 0x31, 0xE, 0x4, 0x5, 0x4, 0x20, 0x30, 0x20, 0x6, 0x4, 0x4, 0x53, 0x53, 0x50, 0x47, + 0x49, 0x45, 0x1B, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x52, 0x46, 0x0, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x12, 0x53, 0x54, 0x54, 0xB9, 0xAD, 0x53, 0x1B, + 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x3, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x12, 0x47, 0x49, 0x49, 0x49, 0x47, 0x49, 0x46, + 0x42, 0x44, 0x42, 0x42, 0x1B, 0x1D, 0x1B, 0x42, 0x1D, 0x50, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x1F, 0xDB, 0x97, 0x4, 0x4, 0xD5, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, + 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, 0x41, 0x0, 0x2C, 0x2C, 0x33, 0xAA, 0x7, + 0x7, 0x38, 0xA3, 0x38, 0x33, 0xA3, 0x2C, 0x33, 0x33, 0x31, 0x3A, 0xB4, 0xAA, 0x33, 0x31, 0x2C, + 0x2C, 0x33, 0x33, 0x33, 0x2C, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x38, 0x31, 0xE, 0x0, 0x7, 0x4, 0xD, 0x25, 0x25, 0xB, 0x4, 0x4, 0xEC, 0xEC, 0xC2, 0xC1, + 0xC1, 0xC1, 0xC1, 0xC1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xA, 0x52, 0x42, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x52, 0x54, 0xAD, 0xA1, 0x99, 0x53, 0x1A, + 0xFE, 0xFE, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xAB, 0xBE, 0xBE, 0xBE, 0xC1, 0xC2, + 0xC2, 0xC2, 0xCE, 0xCE, 0xC0, 0xC0, 0xC0, 0xC2, 0xC0, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x1F, 0xD5, 0x97, 0xB, 0x6, 0x6B, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, + 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xE9, 0x41, 0x0, 0x2C, 0xE, 0xAA, 0x7, + 0x7, 0xE, 0x2C, 0x41, 0xA3, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0xAA, 0xAA, 0x94, 0x3A, 0xA3, 0x33, + 0x3F, 0x31, 0x33, 0x33, 0x2C, 0xE, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, + 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x38, 0x33, 0xE, 0x0, 0x4, 0x4, 0x20, 0x30, 0x29, 0x6, 0x4, 0x4, 0x48, 0x3D, 0x3D, 0x3D, + 0x3B, 0x3B, 0x3A, 0x3B, 0x7, 0x0, 0x1, 0x0, 0x1, 0x3, 0x8, 0xA, 0xA, 0x1, 0xFE, 0xFE, + 0x0, 0x12, 0x1A, 0x2D, 0x12, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1A, 0x53, 0x1B, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x34, 0x54, 0xAD, 0xE1, 0xAD, 0x53, 0x44, + 0x1B, 0x7, 0x0, 0x3, 0x0, 0x1, 0x1, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xBE, 0xC2, 0xC2, 0xC2, 0x5D, + 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5A, 0x6, + 0x6, 0xAF, 0x97, 0x20, 0x1F, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, + 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, + 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xE9, 0x3F, 0x0, 0x2C, 0x3A, 0x7, + 0x7, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x33, 0x3A, 0x38, 0x33, 0x38, 0x31, 0x94, 0x2C, 0x3A, + 0xB6, 0x33, 0x38, 0xA3, 0xA3, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, + 0x3A, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x30, 0x29, 0x25, 0x1E, 0x4, 0x4, 0x2F, 0x1A, 0xA, 0x3, + 0x3, 0xA, 0x3, 0x1, 0x3, 0xA, 0x1A, 0x12, 0x2F, 0x34, 0x34, 0x34, 0x36, 0xA, 0xFE, 0x0, + 0x0, 0x1A, 0x4C, 0x48, 0x2F, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1B, 0x53, 0x10, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x53, 0x55, 0xA6, 0x54, 0x53, 0x53, + 0xB9, 0xC9, 0xBF, 0x46, 0xBF, 0x43, 0x55, 0x59, 0x5A, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x50, 0x3, 0x1, 0x1, 0x0, 0x1, 0x36, 0xC2, 0xC2, 0xCE, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x1F, + 0x1E, 0x71, 0x39, 0x25, 0x25, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, + 0xF7, 0xF7, 0xF5, 0xEE, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xD8, 0x3A, 0xE, 0x2C, 0x9, + 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x2C, + 0x31, 0x2C, 0x2C, 0xE, 0xE, 0x31, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, + 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, + 0x3B, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x20, 0x29, 0x25, 0x1F, 0x4, 0x4, 0xA, 0x3, 0x3, 0x3, + 0x1, 0x1, 0x1, 0x3, 0x7, 0x7, 0x7, 0x3, 0xA, 0xA, 0x3, 0xA, 0xA, 0x7, 0xFE, 0x0, + 0x0, 0x3, 0xA, 0x8, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1C, 0x53, 0x1, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x36, 0xAD, 0x9D, 0x54, 0x53, 0xA, + 0x4C, 0xCC, 0xCA, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x50, 0x50, 0x50, 0x50, 0x56, 0x57, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x1F, + 0x1F, 0x71, 0x39, 0xD, 0x39, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, + 0x3A, 0x33, 0x2C, 0x0, 0x4, 0x0, 0x4, 0x1F, 0x25, 0x20, 0x6, 0x4, 0x1, 0x0, 0x0, 0x0, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x2A, 0x16, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, + 0x1, 0x1, 0x1, 0x1, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0xFE, 0x36, 0x53, 0x1, 0xFE, 0xFE, + 0x24, 0x1F, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x53, 0x55, 0xAD, 0x50, 0x1B, + 0x1A, 0x4F, 0x50, 0x50, 0x50, 0x53, 0x51, 0x50, 0x51, 0x51, 0x50, 0x50, 0x50, 0x50, 0x4F, 0x50, + 0x50, 0x50, 0x4F, 0x46, 0x46, 0x47, 0x46, 0x46, 0x42, 0x42, 0x42, 0x50, 0x5A, 0x5B, 0x58, 0x58, + 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x5A, 0x5B, 0x5B, 0x5B, 0x58, 0x6, + 0x4, 0x97, 0x3E, 0x6, 0x6B, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x7, + 0x9, 0x7, 0x31, 0x1, 0x7, 0xE, 0x2C, 0x9, 0x7, 0x7, 0x7, 0x7, 0xE, 0x7, 0x7, 0x7, + 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x2C, 0x31, 0xE, 0x7, 0x7, 0x7, 0x7, 0x9, 0x9, + 0x7, 0x7, 0x7, 0x7, 0x0, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x32, 0xD, 0x0, 0x5, 0x0, 0x4, 0x6, 0x25, 0x20, 0x6, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x2B, 0x95, 0xD, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, + 0x0, 0x0, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0xFE, 0x0, 0x4F, 0x53, 0x0, 0xFE, 0xFE, + 0x2B, 0x2A, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x4C, 0x53, 0x54, 0x4F, 0xBF, + 0xB9, 0x3, 0x1, 0xF, 0xF, 0x10, 0x10, 0xF, 0x10, 0xF, 0xF, 0xF, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF, 0x10, 0x10, 0x10, 0x19, 0x43, 0x57, 0x58, + 0x58, 0x5A, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x29, 0xB2, 0x6E, 0x1F, 0x39, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x94, 0x0, 0xE, + 0xB4, 0x3A, 0x41, 0xE, 0x2C, 0x9, 0x7, 0x33, 0xB4, 0x41, 0x2C, 0x94, 0xB4, 0x3C, 0x33, 0x2C, + 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0x31, 0x38, 0xA8, 0xAA, 0x33, 0xB4, 0xE, 0x41, 0x33, 0x33, 0x33, + 0x3A, 0xE, 0x2C, 0x2C, 0xAA, 0x7, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x3A, 0x2C, 0x7, 0x0, 0x5, 0x0, 0x25, 0x29, 0x25, 0x1F, 0x4, 0x4, 0x0, 0x0, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x2, 0x4B, 0x27, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x0, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0x0, 0x4F, 0x4F, 0x0, 0xFE, 0x0, + 0x95, 0x2B, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x3, 0x55, 0x55, 0x53, 0xA, + 0x1, 0xF, 0x1, 0xF, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0x3, + 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0x11, 0x11, 0x42, 0x50, + 0x47, 0x1A, 0x52, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x1F, 0x25, 0x6, 0x1F, 0x37, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x0, 0x2C, 0xE, + 0xE, 0xA3, 0xA8, 0x3C, 0x41, 0xA8, 0x31, 0xE, 0xE, 0x3A, 0xAA, 0x41, 0x2C, 0x2C, 0xE, 0x2C, + 0x2C, 0xE, 0x2C, 0x33, 0x33, 0x33, 0x3C, 0x31, 0x38, 0x3C, 0x33, 0xE, 0xB6, 0x3F, 0x33, 0x3F, + 0xB7, 0x3F, 0x2C, 0x3F, 0x41, 0x31, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x33, 0x2C, 0x6, 0x0, 0x5, 0x0, 0x39, 0x6E, 0x29, 0x1F, 0x4, 0x4, 0xFE, 0x6, 0x2A, 0x0, + 0x2A, 0x16, 0x1F, 0x2A, 0x0, 0x24, 0x4B, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, + 0x1, 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x3, 0x53, 0x46, 0x0, 0xFE, 0x0, + 0x95, 0x25, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x4F, 0x55, 0x53, 0x3, + 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xA, 0x4D, 0x2E, 0x0, 0x3C, 0x4D, 0xA, 0x35, 0x4D, 0x2E, 0x0, 0x1, 0x3, 0x18, 0x18, 0x12, + 0x44, 0x4A, 0xF1, 0x5A, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x1F, + 0x1E, 0x6, 0x4, 0x1F, 0x37, 0x25, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x2C, + 0xE, 0x38, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x31, 0x3F, + 0xA5, 0x2C, 0xE, 0xE, 0xE, 0x7, 0x3A, 0x3F, 0x9, 0xE, 0x2C, 0x2C, 0x2C, 0x31, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x31, 0x33, 0x31, 0x38, 0x2C, 0x2C, 0x31, 0x3C, 0x41, 0xAA, 0x2C, 0x31, 0x2C, + 0x2C, 0x3A, 0xAA, 0xAA, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x33, 0x2C, 0x6, 0x0, 0x5, 0x0, 0x39, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0x27, 0x4B, 0x0, + 0x9, 0x7, 0x1, 0x7, 0x0, 0x1, 0x1, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, + 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x3, 0x52, 0x43, 0x0, 0xFE, 0x0, + 0x24, 0x6, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1A, 0x55, 0x50, 0x3, + 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x18, 0x1B, + 0x59, 0x5D, 0x5B, 0x58, 0x50, 0x1D, 0x56, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x1F, 0x39, 0x25, 0x1F, 0x37, 0x29, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, + 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0x9, 0x3A, 0x33, + 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x94, 0x2C, 0x7, 0xE, 0xE, 0x2C, 0x31, 0x2C, 0x2C, + 0x2C, 0xE, 0xE, 0x3C, 0x3C, 0x38, 0x33, 0xE, 0x2C, 0x2C, 0x2C, 0x41, 0x31, 0x2C, 0x2C, 0xE, + 0x2C, 0x31, 0xA3, 0x2C, 0x31, 0x2C, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, + 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x3A, 0x2E, 0xB, 0x0, 0xB, 0x0, 0x37, 0x35, 0x25, 0x1F, 0x6, 0x1E, 0xFE, 0x2, 0x2, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x12, 0x53, 0x1B, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x53, 0x4F, 0x3, + 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x10, 0x10, + 0x1, 0x3, 0x1B, 0x46, 0x3, 0x10, 0x43, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x6, + 0x4, 0x6E, 0x39, 0x4, 0x6B, 0x29, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xBD, + 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xE9, 0xE9, 0xE9, 0xE, 0x3F, 0x38, + 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x2C, 0x2C, 0x33, 0x3A, 0x7, 0x7, 0x7, 0xE, 0x31, 0xA3, 0x31, + 0x2C, 0xE, 0xE, 0xAA, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x33, 0x33, 0x2C, 0xE, 0x2C, + 0x2C, 0xA3, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, + 0xEA, 0xFD, 0x3C, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB7, 0x94, + 0x38, 0x2E, 0xE, 0x0, 0xB, 0x4, 0x37, 0x37, 0x29, 0x1F, 0x4, 0x4, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x2B, 0x2A, 0x0, + 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x1A, 0x55, 0x12, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1B, 0x53, 0x1B, + 0x1A, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x4F, 0x4F, + 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x36, 0x36, 0x46, 0x36, 0x34, 0x34, 0x12, + 0x12, 0x34, 0x34, 0x34, 0x49, 0xBF, 0xC0, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x6, + 0x4, 0x6C, 0x37, 0x1E, 0x71, 0x37, 0xA7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x33, + 0xFD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xE, 0xA3, 0x31, + 0x2C, 0x33, 0x38, 0x33, 0x38, 0x2C, 0x2C, 0x33, 0xA3, 0xE, 0x7, 0x7, 0x7, 0x3C, 0x31, 0xA8, + 0xA8, 0xE, 0x38, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0x33, 0x38, 0x3A, 0x2C, 0x2C, 0x2C, + 0x41, 0xB7, 0xA3, 0x31, 0x2C, 0x38, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, + 0xFD, 0xBD, 0x38, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x31, 0x2C, 0x0, 0x6, 0x4, 0x37, 0x39, 0x37, 0x1F, 0x4, 0x4, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x6, 0x4B, 0x25, 0xFE, + 0xFE, 0xFE, 0x0, 0x1, 0x1, 0xF, 0x1, 0xF, 0x0, 0x0, 0x1D, 0x55, 0xE, 0x2B, 0x25, 0x0, + 0x1, 0x1, 0x1, 0xF, 0x1, 0xF, 0xF, 0x10, 0x11, 0x11, 0x11, 0x19, 0x19, 0x19, 0x50, 0x5C, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xD0, 0xCC, 0xCC, 0xCE, 0xCC, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xCC, 0xCC, 0xF3, 0xCF, + 0x52, 0xAB, 0xC1, 0xB9, 0xAB, 0xA3, 0x1A, 0x1A, 0x1B, 0x5A, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x1F, + 0x4, 0x6E, 0x37, 0x1F, 0x9B, 0x39, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xE, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, 0xBB, 0xBB, 0x2C, 0x3C, 0xE, + 0x2C, 0x33, 0x33, 0x33, 0x31, 0x31, 0x33, 0x94, 0xA3, 0xE, 0x2C, 0xE, 0xA3, 0x2C, 0x7, 0x0, + 0xE, 0x3F, 0xAA, 0x31, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0x38, 0x31, 0x3C, 0xAA, 0xA3, 0x33, 0x33, + 0xA3, 0xE, 0x3C, 0xAA, 0xA3, 0x38, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xF0, 0x33, 0xEA, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, + 0x3C, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x39, 0x39, 0x29, 0x1E, 0x4, 0x4, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, + 0x0, 0x0, 0x0, 0xF, 0xF, 0xF, 0x1, 0x1, 0x1, 0xFE, 0x1D, 0x55, 0x2E, 0x95, 0x25, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0x10, 0x11, 0x11, 0x19, 0x42, 0x50, 0x5C, + 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0xCB, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCB, 0xCB, 0xD0, 0xD0, 0xD0, 0xD0, 0xF3, 0xD0, 0xD0, 0xF3, 0xD0, + 0xF3, 0xC4, 0x0, 0x0, 0x3, 0xBE, 0xBE, 0xBE, 0xBF, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x1F, + 0x4, 0x97, 0x6B, 0x1E, 0x65, 0x0, 0x39, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0xA3, 0x38, + 0xE, 0x31, 0x38, 0x31, 0x2C, 0x33, 0x3A, 0x38, 0x3A, 0x31, 0x2C, 0x41, 0xA3, 0xE, 0xE, 0x7, + 0x7, 0x0, 0xE, 0xAA, 0xAA, 0x38, 0x2C, 0x2C, 0x2C, 0x31, 0x33, 0x31, 0x2C, 0x31, 0xA3, 0xB4, + 0x2C, 0x2C, 0x2C, 0x2C, 0x38, 0xAA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, + 0xE, 0xA3, 0xFD, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3C, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x39, 0x6B, 0x22, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0x0, 0xFE, + 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0x3, 0x3, 0x3, 0x3, 0x43, 0x4F, 0xA, 0x12, 0x10, 0x12, + 0x12, 0x12, 0x12, 0x12, 0x18, 0x1A, 0x18, 0x10, 0x12, 0x18, 0x18, 0x19, 0x1B, 0x47, 0x1D, 0x1C, + 0x36, 0x4F, 0x5C, 0xCA, 0xCE, 0xCD, 0xCB, 0xCB, 0xC9, 0x5C, 0xC9, 0xC9, 0xCA, 0xCA, 0xCC, 0xCC, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xF3, 0xF3, + 0xF3, 0xD0, 0x12, 0x3, 0x3, 0x59, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x6, + 0x4, 0x71, 0x65, 0x1E, 0x1F, 0xD7, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, + 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x7, 0x31, 0x94, + 0xAA, 0x3A, 0x2C, 0x2C, 0x2C, 0x38, 0x41, 0x3A, 0x38, 0x33, 0x33, 0xAA, 0x2C, 0x2C, 0x2C, 0x2C, + 0x9, 0x7, 0x7, 0x0, 0x38, 0xB7, 0x31, 0x31, 0x2C, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x2C, 0xE, + 0x7, 0x7, 0xE, 0xA3, 0x3A, 0xE, 0x9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3C, 0x33, 0x2C, 0x4, 0x6, 0x4, 0x6B, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0x0, + 0x12, 0x1B, 0x42, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x13, 0x0, 0xFE, + 0xFE, 0x1, 0x47, 0x4F, 0x4F, 0x50, 0x50, 0x53, 0x46, 0x4F, 0x50, 0x4F, 0x4F, 0x50, 0x50, 0x53, + 0x53, 0x53, 0x55, 0x55, 0x55, 0xAD, 0x55, 0x55, 0x53, 0x55, 0x55, 0x55, 0xAD, 0x5C, 0x47, 0x44, + 0x34, 0x34, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x8, 0x8, 0x12, 0x12, 0x12, 0x46, 0xCC, + 0xCA, 0xCB, 0xCB, 0xCB, 0xCD, 0xBF, 0xBF, 0xC9, 0xCB, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, + 0xF3, 0xD0, 0x36, 0x36, 0x34, 0x1D, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x42, 0x1D, 0x1D, 0x6, + 0x4, 0x6B, 0x6B, 0x1E, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, + 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x7, 0x33, 0x2C, + 0x38, 0x41, 0xA8, 0x3A, 0x33, 0xB6, 0xA3, 0x3A, 0x31, 0x2C, 0x41, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0xE, 0xE, 0x9, 0x33, 0xA3, 0x31, 0x31, 0x38, 0xE, 0x0, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, + 0xD8, 0xF0, 0x2C, 0xB6, 0xA8, 0x3F, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, + 0x3C, 0x33, 0x2C, 0x0, 0x6, 0x4, 0x6E, 0x6B, 0x29, 0x1E, 0x4, 0x4, 0xFE, 0xFE, 0xFE, 0x12, + 0xBE, 0xC2, 0xEC, 0xCE, 0xCE, 0xEC, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC1, 0xC1, 0xA4, 0x0, + 0xFE, 0x8, 0x53, 0x52, 0x53, 0x50, 0x50, 0x55, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x52, 0x4F, 0x50, + 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0xC4, 0xC4, 0x55, 0xAD, 0xC0, 0x55, 0xBE, + 0xBE, 0xC1, 0xC1, 0xC1, 0xBE, 0xBE, 0xC1, 0xC1, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xC1, 0xCC, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xBF, 0xAD, 0xBF, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, 0xF3, + 0xF3, 0xD0, 0x46, 0x46, 0x46, 0x1A, 0x3, 0xA, 0x12, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x2D, 0x6, + 0x4, 0x7A, 0x39, 0x1F, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, + 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xE, 0xA3, 0xA3, + 0x38, 0x2C, 0x31, 0x94, 0xA5, 0x38, 0xE, 0xE, 0x2C, 0x41, 0x3F, 0x41, 0xA3, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x33, 0x41, 0x3A, 0x33, 0x31, 0x31, 0x1, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, + 0xD8, 0xF0, 0xE, 0xB4, 0x2C, 0xA3, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, + 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3C, 0x33, 0xE, 0x0, 0x6, 0x0, 0x6B, 0x6B, 0x29, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0x7, + 0xAB, 0xCD, 0xF1, 0x36, 0xA, 0x7, 0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x7, 0x7, 0x0, + 0xFE, 0x12, 0x53, 0x52, 0x50, 0x53, 0x53, 0x55, 0x4F, 0x52, 0x52, 0x53, 0x53, 0x50, 0x4F, 0x4F, + 0x4F, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x9D, 0x9C, 0x52, 0xAD, 0xC0, 0xBF, 0xEC, + 0xF1, 0xCE, 0xD0, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCD, 0xBF, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, 0xCB, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xC9, 0xBF, 0xBF, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCA, 0xC0, 0xC9, 0xBF, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0x6, + 0x4, 0x9B, 0x6B, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, + 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x0, 0x9, 0x31, + 0xA8, 0x38, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x3A, 0x41, 0x3F, 0x2C, 0x33, 0x94, 0xA3, 0x2C, + 0x2C, 0xE, 0x2C, 0xB4, 0x33, 0x31, 0x31, 0x2C, 0x7, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBB, 0xBD, + 0xD8, 0xF0, 0x7, 0x2C, 0x38, 0x2C, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, + 0x3A, 0x33, 0xE, 0x0, 0x6, 0x0, 0x39, 0x6E, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, + 0x0, 0x3, 0xA, 0x3, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0x1A, 0x52, 0x4F, 0x4F, 0x4F, 0x53, 0x53, 0x52, 0x52, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, + 0x52, 0x4F, 0x4F, 0x4F, 0x52, 0x52, 0x53, 0x53, 0x52, 0xE1, 0xC7, 0x52, 0x55, 0xC0, 0x50, 0x5C, + 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0xD0, 0xCC, 0xCB, 0xC9, 0x52, 0x53, 0x55, 0xBF, 0xC9, 0xCB, 0xCB, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCA, 0xCA, 0xC0, 0xCD, 0xEC, 0xF1, 0xF1, 0xF1, 0xEC, 0xEC, 0xF1, 0xF1, 0xF1, 0xB, + 0x1E, 0x96, 0x65, 0x1F, 0x39, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0x0, 0xE, + 0x31, 0xAA, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0xA8, 0x2C, 0x3C, 0x41, 0x3C, 0x41, 0x41, 0xA3, + 0x41, 0xE, 0x41, 0x41, 0xE, 0x2C, 0xE, 0x0, 0xE9, 0xE9, 0xE9, 0xE9, 0xD8, 0xBD, 0xBD, 0xBD, + 0xD8, 0xF0, 0x31, 0x41, 0xE, 0x7, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x38, 0x32, 0x6, 0x0, 0x4, 0x0, 0x39, 0x6B, 0x29, 0x1F, 0x4, 0x1E, 0x1, 0x18, 0x1D, 0x43, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1D, 0x1D, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, + 0x1A, 0x36, 0x4F, 0x4F, 0x4F, 0x50, 0x53, 0x53, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, + 0x52, 0x53, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x53, 0x55, 0xC0, 0x50, 0xC9, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xBF, 0x52, 0x52, 0x53, 0x53, 0x55, 0xBF, 0xCB, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCF, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCA, 0xCA, 0xCA, 0xCE, 0xF1, 0xF1, 0xF1, 0xF1, 0xEC, 0xEC, 0xF1, 0xC2, 0x5D, 0xB, + 0x4, 0x96, 0x65, 0x20, 0x9B, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x9, + 0x9, 0x2C, 0xE, 0xE, 0xE, 0x9, 0x9, 0x2C, 0xE, 0xE, 0xE, 0x9, 0x2C, 0x2C, 0xE, 0x2C, + 0x2C, 0xE, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xF7, 0xF7, 0xF7, 0xF7, 0xF5, 0xEE, 0xD8, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0x3F, 0xAA, 0x3A, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x33, 0x30, 0x20, 0x4, 0x6, 0x0, 0x29, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFE, 0xFE, 0x0, 0x3, + 0x1B, 0x46, 0x50, 0x55, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0x53, 0x4F, 0x4F, 0x53, 0x53, 0x55, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x52, 0x52, 0x52, 0x53, 0x53, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x55, 0xC0, 0x50, 0xBF, + 0xC9, 0xCD, 0xCB, 0xCD, 0xC9, 0xCB, 0xC9, 0xC9, 0x55, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x55, 0xBF, + 0xCB, 0xCB, 0xCB, 0xCB, 0xCD, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xBF, 0xCB, 0xCB, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCA, 0xCA, 0xCA, 0xCE, 0xCA, 0xCA, 0x5D, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5D, 0xD, + 0x4, 0x97, 0x6B, 0x20, 0x6B, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBD, 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x9, 0x7, 0xE, 0xA5, 0x31, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, + 0x33, 0x2C, 0x20, 0x4, 0x6, 0x4, 0x25, 0x6B, 0x29, 0x1F, 0x1E, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x1A, 0x1D, 0x46, 0x53, 0x55, 0x5A, 0x5C, 0xCA, 0xCA, + 0x5D, 0x53, 0x4F, 0x4F, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0xE1, 0x9D, 0x52, + 0x4F, 0x52, 0x4F, 0x4F, 0x55, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x55, 0xC0, 0x46, 0x36, + 0x53, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xBF, 0x52, 0x52, 0x52, 0x52, 0x52, 0x55, 0xAD, + 0xBF, 0xC4, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xBF, 0xC9, 0xC9, 0xCB, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xD0, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0xE, + 0x4, 0x9B, 0x71, 0x25, 0x29, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, + 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0x2C, 0x3A, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3C, + 0x33, 0x2C, 0x20, 0x4, 0x4, 0x4, 0x25, 0x6B, 0x29, 0x1F, 0x1E, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0x1A, 0x3D, 0x54, 0x55, 0x5D, 0x5D, + 0x5C, 0x53, 0x53, 0x53, 0x53, 0x55, 0x55, 0x53, 0x53, 0x53, 0x53, 0x53, 0x52, 0x4E, 0x3A, 0x52, + 0x52, 0x52, 0x52, 0x53, 0xAB, 0x52, 0x53, 0xAB, 0x53, 0x53, 0x53, 0x53, 0xAD, 0x5A, 0x49, 0x49, + 0x44, 0x36, 0x53, 0xCA, 0xCB, 0xCC, 0xCB, 0xCB, 0xBF, 0x55, 0x53, 0x52, 0x52, 0x52, 0x52, 0x55, + 0xAD, 0xEC, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0x9E, 0xC4, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCE, 0x59, 0x51, 0x51, 0x50, 0x50, 0x56, 0x5B, 0x5B, 0x5D, 0xC, + 0xB, 0xB2, 0x71, 0x1F, 0x4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xE9, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0xB8, 0x41, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x3A, 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, + 0x33, 0x30, 0xD, 0x4, 0x5, 0x0, 0x25, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x8, 0x34, 0x52, 0x55, 0xCB, 0xD0, 0xD0, 0xD0, 0xC9, 0x5D, 0x5C, + 0x5C, 0x55, 0x55, 0x55, 0xAD, 0xBF, 0xBF, 0x52, 0x53, 0x53, 0x55, 0x55, 0x53, 0x55, 0x55, 0x53, + 0x53, 0x53, 0x55, 0x55, 0xAD, 0x52, 0x55, 0x53, 0x55, 0x55, 0x55, 0x55, 0xBF, 0xC0, 0x55, 0xC1, + 0xCD, 0xCE, 0xCE, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xC9, 0xBF, 0xBF, 0x55, 0x53, 0x52, 0x52, 0x53, + 0x54, 0xE9, 0xB2, 0xD5, 0xE5, 0x9B, 0x9A, 0xAF, 0x9B, 0xD5, 0xE5, 0x6B, 0xC4, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCD, 0x2D, 0x1A, 0x13, 0x13, 0x13, 0x1B, 0x5A, 0x5B, 0x5B, 0xB, + 0x20, 0xD5, 0x71, 0x6, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, + 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xEE, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, + 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, + 0xEE, 0xF5, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x0, 0xA3, 0x31, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xF9, 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, 0x3C, + 0x33, 0x30, 0xB, 0x4, 0x5, 0x0, 0x20, 0x37, 0x29, 0x1F, 0x4, 0x1E, 0x0, 0x0, 0xFE, 0x0, + 0x0, 0x8, 0x36, 0xAD, 0xCF, 0xFA, 0xF3, 0xD0, 0xC9, 0xC9, 0xCB, 0xD0, 0xD0, 0xC9, 0x5C, 0x5D, + 0x5C, 0xCA, 0x4F, 0x7, 0x5B, 0x47, 0x1, 0x1A, 0x5D, 0x59, 0xA, 0x55, 0x5D, 0xC8, 0x9D, 0x5C, + 0x55, 0xBF, 0xF3, 0xD0, 0xCE, 0xBF, 0xC9, 0xBF, 0xBF, 0x5C, 0xC9, 0xC9, 0xCE, 0xC0, 0x59, 0xBF, + 0xC9, 0xCD, 0xC9, 0xC4, 0xC9, 0xCD, 0xCD, 0xCD, 0xAD, 0xCD, 0xCD, 0xCD, 0xC9, 0xBF, 0xAD, 0xAB, + 0xAD, 0xC6, 0x9B, 0xB2, 0xD5, 0x9D, 0x9A, 0x9B, 0xAF, 0xB5, 0xDE, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCC, 0xCC, 0xCC, 0xCE, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x5B, 0x5B, 0x5B, 0xB, + 0x20, 0xD5, 0x71, 0x6, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, + 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xF5, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, + 0x33, 0x30, 0x6, 0x4, 0x5, 0x0, 0x20, 0x39, 0x25, 0x1F, 0x4, 0x1E, 0x7, 0x2F, 0x48, 0xB9, + 0xCE, 0xC9, 0xAD, 0xBF, 0xD0, 0xD0, 0xF3, 0xF3, 0xD0, 0xCB, 0xCB, 0xD0, 0xD0, 0xCB, 0x5C, 0x5D, + 0x5C, 0x5D, 0x46, 0x0, 0x51, 0x50, 0x0, 0x3, 0x5A, 0x5A, 0x0, 0x0, 0x53, 0xCF, 0xC8, 0x5C, + 0x55, 0xBF, 0xD0, 0xF3, 0xCE, 0xAD, 0xC9, 0xAD, 0x55, 0x55, 0xBF, 0xC9, 0xCE, 0xC0, 0x50, 0x54, + 0xC9, 0xCC, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC4, 0xC9, + 0xC9, 0xC6, 0x9B, 0xB2, 0xD5, 0x9F, 0x9A, 0x9B, 0xAF, 0xB5, 0xE5, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xCC, 0xCC, 0xD0, 0xCE, 0xC0, 0xCA, 0xC0, 0xC0, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x25, 0xB5, 0x6E, 0x4, 0xDB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x31, 0xA8, 0x38, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, + 0x33, 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, + 0x33, 0x30, 0x5, 0x4, 0x5, 0x0, 0x20, 0x39, 0x25, 0x1F, 0x4, 0x1E, 0xFA, 0xFD, 0xFA, 0xFA, + 0xF3, 0xD0, 0xC9, 0xAD, 0xBF, 0xCB, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0x5C, 0x5D, 0x5C, 0x5D, + 0x5C, 0x4F, 0x1, 0x1, 0x50, 0x57, 0x0, 0x3, 0x5A, 0x5A, 0x1, 0x1, 0x10, 0xBF, 0xAD, 0x5C, + 0x55, 0xBF, 0xD0, 0xF3, 0xD0, 0xBF, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0xBF, 0xCD, 0xC9, 0x46, 0x34, + 0x1A, 0x36, 0xC9, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xCE, 0xCB, 0xC9, 0xC9, 0xC9, 0xCB, 0xC4, 0xCF, + 0xC4, 0xC6, 0x9B, 0xAF, 0xDE, 0x9D, 0x9A, 0x97, 0xAF, 0xAF, 0xE5, 0x6B, 0xAD, 0xD0, 0xF3, 0xF3, + 0xF3, 0xF3, 0xD0, 0xD0, 0xF3, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x7, + 0x20, 0xAF, 0x6E, 0xFE, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x38, + 0xA3, 0xB4, 0xE9, 0xE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0x38, 0xAA, 0xA8, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xB6, 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xB6, 0x41, + 0x33, 0x2C, 0x23, 0x4, 0x5, 0x0, 0x1F, 0x39, 0x29, 0x1F, 0x4, 0x1E, 0xFA, 0xFA, 0xFA, 0xFA, + 0xFA, 0xF3, 0xD0, 0xCF, 0xAD, 0x4C, 0x46, 0x50, 0x51, 0x5C, 0x5D, 0xCA, 0xCA, 0xCA, 0x5C, 0x5D, + 0xCA, 0x4F, 0x46, 0x1B, 0x50, 0x5B, 0x1, 0x0, 0x55, 0x5A, 0x1A, 0x1B, 0x50, 0x8, 0x7, 0x53, + 0x55, 0xBF, 0xCE, 0xD0, 0xF3, 0xC9, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0x55, 0xC9, 0xC2, 0xAB, 0xC1, + 0xC1, 0xC1, 0xCE, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xD0, 0xCB, 0xC9, 0xC9, 0xBF, 0xC9, 0xCB, 0xCB, + 0xC9, 0xC6, 0x9B, 0x9B, 0x9F, 0x9D, 0x9A, 0x97, 0xAF, 0xAF, 0xDE, 0x6B, 0x54, 0xD0, 0xF3, 0xFA, + 0xFA, 0xF3, 0xD0, 0xD0, 0xF1, 0x34, 0x46, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5A, 0x12, + 0x31, 0xD5, 0x71, 0x0, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, + 0xBD, 0xB4, 0xA3, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x7, 0x2C, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0xA3, + 0x3A, 0x31, 0x23, 0x4, 0x5, 0x0, 0xB, 0x37, 0x29, 0x20, 0x4, 0x1E, 0xFA, 0xFA, 0xF3, 0xFA, + 0xC6, 0x41, 0xE, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x1D, 0x50, 0x5C, 0x5C, 0x5C, + 0x5C, 0x5D, 0x5A, 0x34, 0x50, 0x5D, 0x3, 0x0, 0x51, 0x5C, 0x53, 0x47, 0x5B, 0x53, 0x5A, 0x55, + 0x55, 0x5C, 0xCE, 0xF3, 0xF3, 0xCC, 0xBF, 0xC9, 0x55, 0x55, 0x55, 0x55, 0xBF, 0xC2, 0x53, 0xC9, + 0xCE, 0xCC, 0xCC, 0xD0, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xD0, 0xCE, 0xC9, 0xBF, 0xBF, 0xBF, 0xC9, + 0xC9, 0xC6, 0x9B, 0x9B, 0x9D, 0x9D, 0x9A, 0x6E, 0x97, 0xA9, 0xD5, 0x39, 0x54, 0xD0, 0xFA, 0xFA, + 0xFA, 0xF3, 0xD0, 0xD0, 0xCD, 0xC1, 0xC2, 0x5D, 0x5B, 0x5B, 0x58, 0x57, 0x58, 0x5A, 0x5A, 0x8, + 0xC, 0x25, 0x1F, 0x5, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x9, 0x9, + 0xE, 0xE, 0x9, 0x9, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x7, 0x9, 0xE, 0x9, 0x9, 0x7, 0x2C, + 0x31, 0xE, 0xE, 0x2C, 0x2C, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x31, 0x2C, 0xE, 0xE, 0x2C, + 0xE, 0xE, 0x7, 0x2C, 0x38, 0xA3, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x41, 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, + 0x3A, 0x33, 0xE, 0x4, 0x5, 0x0, 0x5, 0x30, 0x30, 0x20, 0x4, 0x4, 0xCF, 0xA6, 0x33, 0x0, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xA, 0x36, 0x54, 0xAD, 0x5C, + 0xCA, 0x5D, 0x5C, 0x1, 0x1B, 0x5D, 0x12, 0x0, 0x52, 0x5C, 0xC9, 0x51, 0x5A, 0xA, 0x53, 0x55, + 0x55, 0x5C, 0xD0, 0xF3, 0xD0, 0xD0, 0x5C, 0xBF, 0xC9, 0xC9, 0xC9, 0xBF, 0xBF, 0xC9, 0x4F, 0xBF, + 0xD0, 0xCC, 0xCC, 0xCC, 0xD0, 0xF3, 0xF3, 0xD0, 0xF3, 0xF3, 0xCE, 0xC9, 0xCA, 0xC9, 0xBF, 0xBF, + 0xBF, 0xCD, 0x96, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x77, 0x77, 0x9A, 0x71, 0x55, 0xD0, 0xFA, 0xFA, + 0xFA, 0xF3, 0xCA, 0xCE, 0x5D, 0x5B, 0x5B, 0x58, 0x5B, 0x58, 0x5B, 0x58, 0x58, 0x5A, 0x5A, 0x23, + 0x5, 0x1F, 0x4, 0xD, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, + 0xBB, 0xF7, 0xFD, 0xFD, 0xF9, 0xA8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x7, 0x0, + 0x7, 0x1, 0x0, 0x0, 0x38, 0x3A, 0x3A, 0x3A, 0x7, 0x0, 0x7, 0x7, 0x7, 0x7, 0x1, 0x7, + 0x3A, 0xE, 0x3A, 0x41, 0x33, 0xE, 0x2C, 0x31, 0x2C, 0xE, 0x2C, 0x2C, 0x41, 0xAA, 0x41, 0x31, + 0x2C, 0x2C, 0x2C, 0x2C, 0xAA, 0x31, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xB7, 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xA8, + 0x3A, 0x33, 0xE, 0x0, 0x4, 0x4, 0xB, 0x37, 0x30, 0x20, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x1, 0xA, 0x3A, 0xB4, 0xEC, 0xD0, 0xCB, 0xCB, 0xD0, 0xCF, 0x5C, + 0xCA, 0x5A, 0x1A, 0x3, 0x1A, 0x5D, 0x1D, 0x0, 0x4F, 0x5D, 0xCA, 0x5A, 0x56, 0x1, 0xF, 0x46, + 0x55, 0x5C, 0xD0, 0xF3, 0xF3, 0xF3, 0xC9, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0x46, 0xA, + 0xA, 0x1C, 0xAD, 0x5C, 0xCB, 0xCE, 0xD0, 0xD0, 0xD0, 0xD0, 0xCD, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, + 0xBF, 0xC9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0xD0, 0xFA, 0xFA, + 0xFA, 0xEC, 0x4F, 0x4F, 0x46, 0x46, 0x47, 0x59, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0xC, + 0x32, 0xB2, 0x29, 0x20, 0x6, 0xE2, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, + 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x1, + 0x7, 0x7, 0x7, 0x0, 0x7, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, + 0x7, 0x7, 0x3F, 0x33, 0x0, 0x7, 0xE, 0xE, 0x2C, 0x2C, 0x2C, 0x3F, 0x94, 0x38, 0x3C, 0xA3, + 0x94, 0x31, 0xE, 0x94, 0x33, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, + 0xA3, 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, + 0x3B, 0x33, 0xD, 0x0, 0x4, 0x4, 0xB, 0x30, 0x30, 0x20, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0x0, + 0x7, 0x2D, 0x94, 0xB6, 0xF0, 0xF8, 0xFA, 0xCF, 0xF3, 0xFA, 0xFA, 0xF3, 0xC9, 0xCB, 0xCF, 0x5C, + 0xCA, 0x5C, 0x52, 0x52, 0x4F, 0x5D, 0x46, 0x0, 0x46, 0xCA, 0x5C, 0x5C, 0x51, 0x56, 0x10, 0x1, + 0x1B, 0xBF, 0xD0, 0xD0, 0xD0, 0xD0, 0xC9, 0xC9, 0xAD, 0xC9, 0xC9, 0xC4, 0xC9, 0xCE, 0x55, 0xBE, + 0xC1, 0x48, 0x3A, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0x1A, 0x55, 0x5C, 0xC9, 0xCB, 0xC9, 0xCB, 0xCE, 0xC9, 0xCC, 0xCA, 0xD0, 0xFA, 0xFA, + 0xFA, 0xF1, 0xBF, 0xBE, 0xBF, 0xC2, 0xC0, 0xC0, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x57, 0x5A, 0xC, + 0xB, 0x9B, 0x37, 0xB, 0x25, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x2C, 0x1, + 0x7, 0x7, 0x1, 0x7, 0x7, 0x7, 0x1, 0x1, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x1, + 0x7, 0x7, 0x1, 0x1, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x38, 0xB4, 0x3A, 0xA3, 0xE, 0x31, + 0x3C, 0xA3, 0xAA, 0x41, 0x7, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x31, 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBB, 0xA3, + 0x3A, 0x32, 0xB, 0x0, 0x6, 0x0, 0x0, 0x5, 0x30, 0x25, 0x4, 0x1E, 0x1, 0x33, 0xA4, 0xE9, + 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFA, 0xFA, 0xF3, 0xF3, 0xD0, 0xF3, 0xFA, 0xF3, 0xF3, 0xF3, 0x5C, + 0xCA, 0xCA, 0xCA, 0x4F, 0x1C, 0x5D, 0x50, 0x0, 0x36, 0xF3, 0xCC, 0xCA, 0xC9, 0x59, 0x57, 0x43, + 0x3, 0x3, 0x46, 0x5C, 0x5C, 0xBF, 0x5C, 0x5C, 0x5C, 0xC9, 0xC9, 0xCD, 0xBF, 0xCE, 0xBF, 0x3B, + 0x2E, 0x7, 0x1, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x55, 0x55, 0x5C, 0xCA, 0x5C, 0xCA, 0xCA, 0xD0, 0xFA, 0xFA, + 0xF3, 0xC0, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x5B, 0x58, 0x58, 0x57, 0x5A, 0xC, + 0x20, 0x9B, 0x6B, 0x25, 0x29, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xBD, 0x2C, + 0xE, 0x31, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xE, 0xE, 0x0, + 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0xE, 0xE, 0xE, 0x7, + 0x0, 0x7, 0x7, 0x7, 0x1, 0x7, 0x7, 0x7, 0x7, 0x7, 0x3C, 0x3F, 0xA5, 0x3A, 0xA3, 0xA3, + 0x33, 0x3C, 0x38, 0x2C, 0x2C, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0xA3, + 0x38, 0x31, 0xB, 0x4, 0x4, 0x0, 0xFE, 0x5, 0x30, 0x25, 0x1E, 0x1E, 0xFA, 0xFA, 0xFA, 0xFD, + 0xFA, 0xFD, 0xFA, 0xFA, 0xFA, 0xFD, 0xFA, 0xFA, 0xF3, 0xF3, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCC, 0xCA, 0x46, 0x3, 0x3, 0x5D, 0x5B, 0xA, 0x1C, 0xF3, 0xF3, 0xD0, 0xCC, 0xCA, 0x55, 0x51, + 0x56, 0x10, 0xF, 0x1C, 0x5C, 0xBF, 0x5C, 0x5C, 0x5C, 0xC9, 0xCD, 0xAC, 0xBF, 0xCE, 0x5A, 0x3, + 0x7, 0x1, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x3, 0xBF, 0xC9, 0xCA, 0xCC, 0xD0, 0xF3, 0xCA, + 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0xB, + 0x25, 0x9B, 0x37, 0x5, 0x1F, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE, 0xE9, + 0xFD, 0xF0, 0x3C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xEA, 0xEA, 0xEA, 0xEA, 0xE, 0x7, 0x7, + 0x7, 0x7, 0x7, 0xE, 0xE, 0xE, 0xE, 0x9, 0xE, 0x7, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, + 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x2C, 0x2C, 0xE, + 0x2C, 0x31, 0x7, 0x2C, 0x2C, 0x2C, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, + 0x3A, 0x32, 0xB, 0x0, 0x4, 0x4, 0xB, 0x38, 0x25, 0x25, 0x4, 0x1E, 0xD0, 0xF3, 0xFA, 0xFA, + 0xFA, 0xFA, 0xFA, 0xF7, 0xC6, 0xA5, 0x52, 0x4F, 0x53, 0x55, 0xC9, 0xCE, 0xC9, 0xC4, 0xAD, 0xAD, + 0xAD, 0xCB, 0x55, 0x4F, 0x36, 0x5A, 0x5D, 0x5A, 0x1C, 0xF3, 0xF3, 0xF3, 0xF3, 0xD0, 0xC9, 0xAD, + 0x55, 0x5B, 0x1D, 0x3, 0x50, 0x5C, 0x5C, 0x5C, 0xC9, 0x5C, 0xCB, 0xE3, 0xC4, 0xCE, 0x5C, 0x43, + 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x58, 0x58, 0x58, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x58, 0x58, 0x58, 0x5A, 0x5A, 0x7, + 0x20, 0x9D, 0x37, 0x20, 0x20, 0x27, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xB4, 0x3A, 0xF7, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, + 0xF5, 0xF9, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB8, 0x94, + 0x33, 0x2E, 0xB, 0x0, 0x5, 0x4, 0x25, 0x6E, 0x37, 0x1F, 0x4, 0x1E, 0xCD, 0xD0, 0xD0, 0xCD, + 0xAD, 0x3D, 0x2D, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0xA, 0x47, 0xC1, 0x49, 0x1A, 0x1A, 0x35, + 0x36, 0xC9, 0x5C, 0x5A, 0x52, 0x55, 0x5C, 0xCA, 0x5C, 0xCC, 0xD0, 0xD0, 0xD0, 0xF3, 0xC9, 0xC9, + 0x5C, 0x5A, 0x5B, 0x59, 0x51, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, 0xC9, 0xC4, 0x5C, 0xCE, 0x5D, 0x46, + 0xCA, 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, + 0x5B, 0x5B, 0x58, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x7, + 0xD, 0x9B, 0x37, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x3A, 0xE, 0x31, + 0xBD, 0xF0, 0xAA, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xEA, + 0xF7, 0xFD, 0x7, 0x2C, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB7, 0x94, + 0x38, 0x32, 0xE, 0x0, 0x5, 0x0, 0xB, 0x37, 0x29, 0x1F, 0x1E, 0x1E, 0x52, 0x2F, 0xA, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0xA, 0x2E, 0xA, 0x34, 0xBF, 0xBF, 0x36, 0x1A, 0x1C, + 0x36, 0xC9, 0x5C, 0x5A, 0x52, 0x4C, 0x3D, 0x4E, 0x52, 0xC9, 0xCA, 0xCB, 0xCB, 0xCA, 0xC9, 0x5C, + 0x5C, 0x5C, 0x1A, 0x5A, 0x5A, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, 0xCB, 0xE3, 0xC3, 0xCE, 0xC0, 0x1D, + 0x55, 0xC4, 0xBF, 0xBF, 0xC9, 0xCA, 0xCC, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x58, 0x5A, 0xE, + 0x20, 0x9B, 0x37, 0x20, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xE9, + 0xA3, 0x33, 0xE, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xE9, + 0xF5, 0xF9, 0x0, 0xE, 0x2C, 0x2C, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, + 0x3A, 0x31, 0xE, 0x0, 0x4, 0x0, 0x6, 0x37, 0x20, 0x1F, 0x1E, 0x4, 0x7, 0x0, 0x0, 0x0, + 0x7, 0x0, 0x1, 0x0, 0x0, 0x9, 0xE, 0xA, 0x16, 0xA, 0x1A, 0x49, 0xEC, 0x47, 0x1A, 0x1C, + 0x4C, 0x5C, 0x5C, 0x5C, 0x53, 0x4C, 0x3D, 0x36, 0x52, 0x55, 0xC9, 0xCD, 0xCB, 0xC9, 0x54, 0xAD, + 0x55, 0x5C, 0x1C, 0x46, 0x5C, 0x5C, 0xC9, 0xC9, 0xC9, 0xCB, 0xCB, 0xC9, 0xC9, 0xCE, 0x5C, 0x7, + 0x1, 0x1, 0x2C, 0x4C, 0xCD, 0xC9, 0xC4, 0x55, 0xAD, 0x5C, 0x5C, 0x5C, 0x5C, 0x55, 0x5A, 0x5A, + 0x5A, 0x57, 0x51, 0x51, 0x51, 0x57, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x5A, 0x5A, 0x58, 0x5A, 0x5A, 0x7, + 0x20, 0x9B, 0x25, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF8, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF0, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, + 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, + 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xE9, 0xE9, 0xBD, 0xBD, 0xBD, + 0xEA, 0xF7, 0x0, 0x7, 0x9, 0xE, 0x7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, + 0xA3, 0xBD, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, + 0x3B, 0x33, 0x2C, 0x4, 0x6, 0x4, 0x25, 0x6E, 0x25, 0x1F, 0x4, 0x1E, 0x8, 0x1, 0x1, 0x1, + 0x3, 0x3, 0x1, 0x1, 0x0, 0x3, 0x3, 0x3, 0x3, 0x3, 0xA, 0x1B, 0xBE, 0xCD, 0x46, 0x1A, + 0x36, 0x5C, 0x5C, 0x5C, 0x55, 0x52, 0x36, 0x1B, 0x1A, 0x1B, 0x12, 0x2C, 0x9, 0x0, 0xFE, 0xFE, + 0xFE, 0x53, 0x46, 0x1D, 0x5D, 0x5A, 0x5A, 0x5C, 0xCD, 0xCE, 0xD0, 0xCD, 0x5C, 0xCD, 0x5C, 0x1B, + 0x1A, 0x12, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x3, 0xF, 0x3, 0x3, 0x3, 0x3, 0x12, 0x50, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x20, 0x79, 0x20, 0xD, 0x22, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, + 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF7, 0xF0, 0xE9, 0xBD, 0xBD, + 0xE9, 0xF5, 0x0, 0x1, 0x1, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xB6, 0x41, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3B, 0x33, 0x2C, 0x4, 0x4, 0x0, 0x25, 0x71, 0x29, 0x1F, 0x1E, 0x1E, 0x2D, 0x1A, 0xA, 0xA, + 0xA, 0xA, 0xA, 0xA, 0x1, 0x1, 0x3, 0x3, 0x3, 0x1A, 0x1C, 0x1A, 0x46, 0xC1, 0xEC, 0x49, + 0x12, 0x12, 0x1C, 0x1D, 0x36, 0x3D, 0x1, 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0xFE, + 0x0, 0x1C, 0xBF, 0x1A, 0xCA, 0x5A, 0xCA, 0xCA, 0xD0, 0xD0, 0xF3, 0xD0, 0xD0, 0xD0, 0x5C, 0x49, + 0x4A, 0x49, 0x49, 0x44, 0x1B, 0x2D, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, + 0x34, 0x34, 0x1B, 0x34, 0x34, 0x34, 0x2D, 0x8, 0x1, 0x12, 0x1B, 0x1D, 0x46, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, + 0x20, 0x9B, 0x25, 0x20, 0x29, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB7, + 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, + 0x3B, 0x33, 0x2C, 0x0, 0x4, 0xFE, 0x30, 0x6E, 0x28, 0x1F, 0x1E, 0x4, 0x12, 0xE, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x1, 0x0, 0x0, 0x3, 0x1A, 0x36, 0x1C, 0x1C, 0x1A, 0x1A, 0x36, 0xBF, 0xF1, + 0xC2, 0xAB, 0x46, 0x1B, 0x12, 0x12, 0x8, 0x8, 0x8, 0x0, 0x43, 0x43, 0x43, 0x43, 0x1B, 0x10, + 0x0, 0x1, 0x5C, 0x5C, 0x5A, 0x51, 0x5C, 0x5C, 0xCA, 0xD0, 0xF3, 0xD0, 0xD0, 0xF3, 0x5C, 0xAB, + 0xBE, 0xBE, 0xAB, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x49, 0x49, 0xAB, 0x5A, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, + 0xC, 0x9B, 0x30, 0x20, 0x29, 0x28, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA3, + 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xAA, + 0x3C, 0x33, 0xE, 0x0, 0x4, 0x0, 0x39, 0x97, 0x28, 0x1F, 0x1E, 0x1E, 0x12, 0x8, 0x8, 0x3, + 0x3, 0xA, 0x1A, 0xA, 0x1, 0x0, 0x3, 0xA, 0x1A, 0x1C, 0x1C, 0x1C, 0x1A, 0x1A, 0x1C, 0x52, + 0xAD, 0xEC, 0xF1, 0xEC, 0xCE, 0xC1, 0xC1, 0xC1, 0xC1, 0xAB, 0x5A, 0x5C, 0x5C, 0x5C, 0x5C, 0x5A, + 0x50, 0x10, 0x36, 0xCA, 0x5A, 0x46, 0x18, 0x50, 0x5C, 0xCC, 0xD0, 0xF3, 0xD0, 0xF3, 0xC9, 0xBF, + 0xBF, 0xCD, 0xBF, 0xCD, 0xC1, 0xC2, 0xC2, 0xC2, 0xC1, 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, + 0xBE, 0xBE, 0xC1, 0xC1, 0xC1, 0xC1, 0xF1, 0xCE, 0xCE, 0xC2, 0xC2, 0xCE, 0xC0, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, + 0x5, 0x71, 0x32, 0xC, 0x29, 0x1F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, + 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, + 0xD8, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA5, + 0x3C, 0x32, 0xB, 0x0, 0x5, 0x0, 0x39, 0x6F, 0x22, 0x21, 0x1E, 0x1E, 0x8, 0x7, 0x3, 0x9, + 0x3, 0xA, 0x3, 0x3, 0xA, 0xA, 0x3, 0xA, 0x18, 0x1B, 0x1A, 0x1C, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x4F, 0x5A, 0x56, 0x51, 0x36, 0x1D, 0x1B, 0x1B, 0x34, 0x51, 0x5C, 0xCA, 0xCA, 0x5C, 0xCA, + 0xCA, 0x5D, 0x1B, 0x5C, 0x5A, 0x5A, 0x42, 0x10, 0x51, 0xC9, 0xCC, 0xF3, 0xF3, 0xF3, 0xCA, 0xBF, + 0xC2, 0xCE, 0xEC, 0xF7, 0xF1, 0xF1, 0xF1, 0xEC, 0xCE, 0xCE, 0xEC, 0xEC, 0xCD, 0xCD, 0xCD, 0xC2, + 0xC1, 0xC1, 0xC1, 0xC2, 0xC1, 0xEC, 0xCE, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, + 0x5, 0x97, 0x37, 0xD, 0x37, 0x1F, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, + 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, + 0xE, 0xE, 0xE, 0x9, 0xE, 0xE, 0xE, 0x2C, 0x2C, 0x2C, 0xE, 0xE, 0x2C, 0xE, 0xE, 0xE, + 0xE, 0xE, 0xE, 0x2C, 0x31, 0x2C, 0x2C, 0xE, 0x31, 0x31, 0x2C, 0xE, 0x2C, 0x7, 0x7, 0x7, + 0x7, 0x9, 0x0, 0x7, 0x7, 0x0, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, + 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x38, 0x25, 0x1F, 0x4, 0x4, 0x0, 0x39, 0xA7, 0x28, 0x1F, 0x1E, 0x1E, 0x8, 0x7, 0xA, 0x2C, + 0x1A, 0x12, 0xA, 0x1A, 0x12, 0xA, 0xA, 0x1A, 0x1A, 0x18, 0x1B, 0x1A, 0x1C, 0x1A, 0x1C, 0x1C, + 0x34, 0x4C, 0x5C, 0x51, 0x50, 0xF, 0x10, 0x11, 0x11, 0xF, 0x1B, 0x46, 0x1A, 0x36, 0x50, 0x5C, + 0xCA, 0xCA, 0x5C, 0x50, 0xCA, 0x5C, 0x5C, 0x50, 0x43, 0xA, 0x52, 0xD0, 0xF3, 0xF3, 0xCE, 0xF1, + 0xF1, 0xF1, 0xCE, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xD, + 0x4, 0xA7, 0x39, 0x20, 0x65, 0x1E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x3F, + 0x2C, 0x2C, 0x7, 0x0, 0x7, 0xE, 0xE, 0x31, 0x38, 0x33, 0xE, 0x41, 0x38, 0x3F, 0xA5, 0x2C, + 0x31, 0xA3, 0xB4, 0x41, 0x2C, 0xE, 0xE, 0x3C, 0xA8, 0xE, 0xA3, 0xA3, 0x3A, 0x7, 0x7, 0x0, + 0x0, 0x7, 0x7, 0x7, 0x9, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, + 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xB4, 0x41, + 0x33, 0x25, 0x1F, 0x4, 0x6, 0x0, 0x39, 0x9B, 0x28, 0x1F, 0x1E, 0x1E, 0x8, 0x8, 0xA, 0x12, + 0x1A, 0x1A, 0xA, 0xA, 0x12, 0x12, 0x10, 0xF, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0xF, 0xF, + 0xF, 0x11, 0x11, 0x10, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x43, 0x1B, 0x1, 0x0, 0x0, 0x0, + 0x3, 0x53, 0x5A, 0x50, 0xCA, 0xCA, 0xCA, 0x5C, 0x5D, 0xC0, 0xCA, 0xCC, 0xF3, 0xFA, 0xD0, 0xCE, + 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0xFE, 0xAE, 0x3E, 0x20, 0x6B, 0x1E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, + 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x7, 0x2C, 0x3C, + 0xA3, 0x2C, 0x7, 0x1, 0x7, 0xE, 0xE, 0xE, 0xE, 0x2C, 0x3C, 0x3C, 0xE, 0xB4, 0xB6, 0x3A, + 0x38, 0xA8, 0x38, 0x2C, 0x2C, 0xE, 0xE, 0x7, 0x38, 0x33, 0x0, 0x7, 0xE, 0x7, 0x7, 0x7, + 0x7, 0x1, 0x0, 0x0, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x3A, + 0x31, 0x30, 0x1F, 0x4, 0x6, 0x0, 0x3E, 0xAF, 0x28, 0x1F, 0x4, 0x1E, 0xF, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x3, 0x1, 0x1, 0x1, 0x1, 0xFE, 0xFE, 0xFE, 0xFE, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x46, 0x1A, 0x1, 0x0, 0x1, 0x0, + 0x0, 0x1A, 0x5A, 0x1B, 0x53, 0xCA, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xD0, 0xF3, 0xCE, 0xC9, + 0xC9, 0xC9, 0xCD, 0xC9, 0xAD, 0x43, 0x43, 0x43, 0x5C, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0xFE, 0xBC, 0xA9, 0x20, 0x71, 0x1E, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, + 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0x33, 0x2C, + 0x41, 0xA8, 0x33, 0x7, 0x7, 0x7, 0x7, 0xE, 0x38, 0x41, 0x31, 0xE, 0x31, 0x33, 0x38, 0x3A, + 0x33, 0x38, 0x31, 0x31, 0x33, 0x33, 0x2C, 0xE, 0xE, 0xA8, 0x0, 0x7, 0x7, 0x1, 0x7, 0xE, + 0xE, 0x7, 0x7, 0x0, 0x0, 0x1, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x31, 0x30, 0x6, 0x4, 0x4, 0x0, 0x6C, 0x9B, 0x22, 0x1F, 0x4, 0x1E, 0x1, 0x1, 0x1, 0x1, + 0xF, 0xF, 0xF, 0x1, 0x0, 0xFE, 0x3, 0x4F, 0x53, 0x59, 0x53, 0x53, 0x12, 0x0, 0xFE, 0xFE, + 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x46, 0xA, 0x0, 0x1, 0x1D, 0x0, + 0x0, 0x1, 0x55, 0x1D, 0xA, 0x2F, 0x2F, 0x34, 0x53, 0x55, 0x52, 0x3D, 0x36, 0x36, 0x2F, 0x12, + 0x1A, 0x1A, 0x1B, 0x13, 0x12, 0x46, 0x4F, 0x4F, 0x4F, 0x55, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0xD, + 0xFE, 0xE0, 0xBA, 0x20, 0x9B, 0x1F, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF8, 0xF8, 0xF8, 0xE, 0x2C, 0x2C, + 0x2C, 0x38, 0xA3, 0xB6, 0xA3, 0x33, 0x3C, 0x41, 0x3A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x38, 0xAA, + 0x38, 0x33, 0x31, 0x38, 0x38, 0x33, 0x33, 0xE, 0xE, 0xAA, 0x9, 0x9, 0x7, 0x1, 0x1, 0x7, + 0x9, 0xE, 0xE, 0x7, 0x1, 0x1, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x3A, + 0x33, 0x2C, 0x6, 0x4, 0x4, 0x0, 0x6B, 0x9B, 0x29, 0x1F, 0x4, 0x4, 0x1, 0x1, 0x1, 0x1, + 0x1, 0xF, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, 0xF, 0xF, + 0xF, 0xF, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x46, 0x3, 0x0, 0x1, 0x4C, 0x4B, + 0x0, 0x0, 0xA, 0xA, 0x3, 0x46, 0x52, 0x52, 0x47, 0x47, 0x50, 0x5C, 0x5A, 0x5A, 0x5A, 0x5C, + 0x5C, 0x5C, 0x5C, 0x5C, 0x53, 0x5C, 0xCA, 0xCA, 0xBF, 0x53, 0x55, 0xCA, 0xCC, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, + 0x0, 0xED, 0xD7, 0x1F, 0x9B, 0x1F, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xEE, 0xEA, 0xEA, 0x7, 0x31, 0x2C, + 0x2C, 0xE, 0x2C, 0x31, 0x33, 0x33, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x31, 0xB6, + 0x31, 0x2C, 0x33, 0x38, 0x38, 0x33, 0x31, 0x2C, 0x31, 0xB6, 0x33, 0x2C, 0xE, 0x7, 0x7, 0x7, + 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xAA, 0x3F, + 0x2F, 0x2C, 0x6, 0x4, 0x4, 0x4, 0x37, 0x9B, 0x29, 0x1E, 0x4, 0x4, 0x0, 0x0, 0x2A, 0x6, + 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x8, 0x43, 0x1, 0x0, 0x1, 0x36, 0x27, + 0x0, 0x0, 0x0, 0x8, 0x4F, 0x4F, 0x4F, 0x4F, 0x47, 0x47, 0x55, 0xC9, 0xCB, 0xCA, 0xCB, 0xD0, + 0xCE, 0xCE, 0xCB, 0xCB, 0xC9, 0x5C, 0xCA, 0xCA, 0xCE, 0xCC, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, + 0x0, 0xD8, 0xBA, 0x1F, 0x71, 0x1F, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, + 0xE, 0x31, 0xB6, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xE9, 0xBD, 0xBD, 0xBD, 0x7, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x33, 0xB4, + 0x33, 0x2C, 0x33, 0x38, 0x3A, 0x33, 0x2C, 0x33, 0x38, 0x94, 0x3A, 0x2C, 0x2C, 0x2C, 0xE, 0x9, + 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0x1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, 0x3F, + 0x2F, 0x2C, 0x4, 0x4, 0x6, 0x4, 0x20, 0xB2, 0x37, 0x4, 0x4, 0x1E, 0x0, 0x25, 0x4B, 0x0, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x46, 0x0, 0xFE, 0x0, 0x3, 0x42, + 0x1, 0x0, 0x0, 0x1, 0x4F, 0x53, 0x53, 0x53, 0x47, 0x46, 0x50, 0xC9, 0xCE, 0xCE, 0xCE, 0xCC, + 0xCE, 0xD0, 0xD0, 0xCC, 0xCE, 0xCC, 0xD0, 0xD0, 0xD0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x6, + 0xFE, 0xD8, 0xB0, 0x20, 0x71, 0x1F, 0xF6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, + 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0x7, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x31, 0x2C, 0x2C, 0x2C, 0x2C, 0xE, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x3A, + 0xAA, 0xA3, 0x33, 0x33, 0x31, 0x2C, 0x31, 0x33, 0x38, 0x38, 0x3A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0xE, 0x9, 0x7, 0x1, 0x7, 0x7, 0x0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x3F, + 0x34, 0x2C, 0x4, 0x4, 0x6, 0x4, 0x1F, 0xD5, 0x6B, 0x4, 0x1E, 0x1E, 0xFE, 0x0, 0x0, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0xFE, 0x0, 0x0, 0xFE, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0x1, + 0x1B, 0x3, 0x0, 0x1, 0x1B, 0x50, 0x56, 0x51, 0x46, 0x43, 0x50, 0xC0, 0xCE, 0xD0, 0xD0, 0xD0, + 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x5D, + 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x6, + 0x20, 0xFB, 0xBA, 0x25, 0x6B, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, + 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0x0, 0xE, 0x2C, + 0x2C, 0x33, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0xE, 0x33, 0xA8, 0xA3, 0x33, 0xE, 0x41, 0xB4, 0x3A, 0x3A, 0x31, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x7, 0x7, 0x0, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xAA, 0x3F, + 0x38, 0x30, 0x4, 0x4, 0x4, 0x4, 0x4, 0xD5, 0x71, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x2B, 0x16, 0x24, 0x6, 0x16, 0x9, 0x16, 0x7, 0x24, 0x7, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, + 0x0, 0x1A, 0x0, 0x0, 0x3, 0x5A, 0x5C, 0x5C, 0x46, 0x43, 0x3, 0x18, 0x1D, 0x46, 0x4C, 0x54, + 0xBF, 0xBF, 0xC9, 0xC9, 0xCC, 0xCC, 0xCC, 0x5C, 0x53, 0x53, 0x59, 0x59, 0x50, 0x50, 0x50, 0x50, + 0x50, 0x50, 0x50, 0x50, 0x50, 0x56, 0x56, 0x50, 0x51, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x1F, + 0xB, 0xAF, 0x39, 0xB, 0x37, 0x97, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, + 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0x0, 0x7, + 0x7, 0x2C, 0x7, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xE, 0xE, 0x2C, 0x2C, + 0xE, 0x7, 0x7, 0x7, 0x2C, 0x2C, 0x2C, 0xE, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, + 0x7, 0x7, 0x7, 0x7, 0x0, 0x94, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, + 0x33, 0xE, 0x4, 0x6, 0x4, 0x4, 0x0, 0x9B, 0xB2, 0x4, 0x4, 0x1E, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x98, 0x7, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0x1A, 0x36, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0x0, 0x1A, 0x0, 0x0, 0x1, 0x1D, 0x59, 0x59, 0x43, 0x43, 0x8, 0x3, 0x3, 0xF, 0x10, 0x10, + 0x2F, 0xCD, 0xCE, 0xCE, 0xCE, 0xCD, 0xCE, 0x12, 0x3, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x18, 0x12, 0x12, 0x12, 0x12, 0x1A, 0x12, 0x12, 0x12, 0x50, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x1F, + 0xFE, 0x0, 0x4, 0xB, 0x4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, + 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, + 0xD8, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x31, 0xB, 0x0, 0x6, 0x4, 0x4, 0x4, 0x6C, 0x9B, 0x1E, 0x4, 0x1E, 0x0, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x2, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x1D, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0x12, 0x0, 0x0, 0x0, 0x1, 0x53, 0x5A, 0x42, 0x4F, 0x46, 0x36, 0x36, 0x36, 0x34, 0x1A, + 0x12, 0x1A, 0x34, 0x34, 0x36, 0x46, 0x34, 0x12, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x3D, 0x3D, + 0x3D, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x36, 0x46, 0x4F, 0x50, 0x57, 0x5A, 0x5B, 0x5B, + 0x5D, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x6, + 0xB, 0x29, 0x32, 0x4, 0x20, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xBD, 0xBD, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBD, 0xBD, + 0xE9, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB8, 0x94, 0x3A, + 0x31, 0xB, 0x4, 0x6, 0x4, 0x4, 0x0, 0x5, 0x20, 0x1F, 0x1E, 0x4, 0x0, 0x0, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x0, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0x12, 0xFE, 0x0, 0x0, 0x0, 0x12, 0x5A, 0x43, 0x50, 0x59, 0x55, 0x55, 0x59, 0x53, 0x53, + 0x53, 0x34, 0x34, 0x34, 0x34, 0x34, 0x12, 0x1A, 0x4F, 0x52, 0x52, 0x52, 0x52, 0x55, 0x52, 0x52, + 0x52, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5C, 0x36, 0x1B, 0x1B, 0x1B, 0x1A, 0x59, + 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, + 0x0, 0x9B, 0x6E, 0xFE, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, + 0xEA, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x41, 0x38, + 0x30, 0xD, 0x6, 0x4, 0x4, 0x5, 0xFE, 0x0, 0x1F, 0x1F, 0x1F, 0x1E, 0x46, 0x4F, 0x4F, 0x46, + 0x46, 0x46, 0x4F, 0x46, 0x43, 0x43, 0x1D, 0x1A, 0x3, 0xFE, 0xFE, 0xFE, 0x0, 0x12, 0x12, 0x12, + 0x12, 0x12, 0x0, 0xFE, 0x12, 0x0, 0x0, 0x0, 0x0, 0x12, 0x34, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x0, 0x12, 0x1, 0x1, 0x1, 0x1, 0x1, 0x43, 0x43, 0x55, 0x5C, 0x5C, 0x5C, 0xC0, 0xC0, 0xC0, + 0xBF, 0xC9, 0xCA, 0xC0, 0xC0, 0xCA, 0x36, 0x34, 0xC9, 0xC9, 0xC9, 0xC0, 0xC9, 0xC9, 0x5A, 0x5C, + 0x5C, 0x55, 0x55, 0x55, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xC9, 0x5C, 0xBF, 0x5C, 0x5A, 0x5A, 0xCC, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, + 0x4, 0xAF, 0x3E, 0x0, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, + 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, + 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xE9, 0xEA, + 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x41, 0x38, + 0x2C, 0x2C, 0xD, 0x4, 0x4, 0x4, 0x4, 0x39, 0x71, 0x1F, 0x1E, 0x1E, 0xCA, 0xCA, 0x5C, 0x5C, + 0xCA, 0xC9, 0xCA, 0xCA, 0x5C, 0x5C, 0x5C, 0xC9, 0x4C, 0xFE, 0xFE, 0xFE, 0xA, 0x5C, 0x5C, 0x5C, + 0x5C, 0xBF, 0x1, 0xFE, 0x34, 0x8, 0x0, 0x0, 0x0, 0x12, 0x1A, 0x1, 0x1, 0xF, 0xF, 0xF, + 0x1, 0x2F, 0x96, 0x18, 0x11, 0x11, 0x19, 0x42, 0x43, 0x55, 0xC9, 0xC9, 0xCE, 0xCB, 0xCE, 0xC9, + 0xCD, 0xCD, 0xCF, 0xCF, 0xCE, 0xD0, 0x54, 0x36, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, + 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCA, 0xCB, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCC, 0xCA, + 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x23, + 0x5, 0xAF, 0x37, 0xB, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF7, + 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA3, 0x3A, + 0x2C, 0x2C, 0xD, 0x4, 0x4, 0x4, 0x20, 0xDB, 0xB5, 0x1E, 0x4, 0x1E, 0xC9, 0xC9, 0xC9, 0x5C, + 0xC9, 0xC9, 0xCC, 0xCC, 0xCA, 0xC9, 0x5C, 0x5C, 0x55, 0x0, 0xFE, 0xFE, 0x0, 0x5C, 0x5C, 0x5C, + 0x5C, 0x5C, 0x12, 0x0, 0x43, 0x1A, 0x0, 0x0, 0x0, 0xA, 0x3, 0x1, 0x1, 0xF, 0xF, 0xF, + 0xF, 0xF, 0x10, 0x10, 0x11, 0x11, 0x11, 0x43, 0x43, 0x55, 0xC9, 0xCD, 0xCE, 0xCE, 0xCE, 0xD0, + 0xD0, 0xCD, 0xCE, 0xCC, 0xCC, 0xCC, 0xBF, 0x3D, 0xCB, 0xCB, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xD0, + 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0xC, + 0x4, 0xAF, 0x37, 0x4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, + 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, + 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xD8, 0xA8, 0x3C, + 0x33, 0x2C, 0xD, 0x2, 0x6, 0x4, 0x4, 0xD5, 0xB2, 0x4, 0x4, 0x1E, 0xCB, 0xCB, 0xE4, 0xC6, + 0xCA, 0xC9, 0xCA, 0xCC, 0xCC, 0xC9, 0xC9, 0xC9, 0xC9, 0x36, 0xFE, 0xFE, 0xFE, 0x36, 0x5C, 0xC9, + 0xC9, 0xC9, 0x46, 0x0, 0x43, 0x46, 0x1, 0x0, 0x0, 0x1, 0x1, 0xA, 0x95, 0x2E, 0xF, 0xF, + 0xF, 0xF, 0xF, 0xF, 0x10, 0x10, 0x11, 0x47, 0x43, 0x55, 0xC9, 0xCD, 0xCD, 0xC2, 0xCD, 0xCE, + 0xD0, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xC0, + 0x5D, 0xC0, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5A, 0x58, 0x5B, 0x7, + 0x4, 0x71, 0x6C, 0x0, 0xD7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, 0x41, + 0x33, 0x2C, 0x7, 0x4, 0xB, 0x4, 0x4, 0xD5, 0xB5, 0x4, 0x4, 0x4, 0xCC, 0xCC, 0xC8, 0xC3, + 0xC9, 0xC9, 0xC9, 0x5C, 0x5C, 0xC9, 0xBF, 0x55, 0xAD, 0x53, 0x12, 0xFE, 0xFE, 0x0, 0x1A, 0x55, + 0x55, 0x55, 0x53, 0x0, 0x43, 0x5A, 0x12, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0xF, 0xF, + 0xF, 0xF, 0xF, 0xF, 0xF, 0x10, 0x10, 0x59, 0x42, 0x59, 0x59, 0xBF, 0xCD, 0xCD, 0xCD, 0xCE, + 0xD0, 0xD0, 0xCC, 0xCC, 0xCE, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, + 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x5B, 0x4, + 0x4, 0x79, 0x6B, 0x6, 0x29, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xB6, 0x94, + 0x33, 0x31, 0xC, 0x4, 0x4, 0x4, 0x4, 0xDB, 0xD5, 0x4, 0x4, 0x4, 0xCC, 0xCA, 0xC6, 0xC3, + 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, 0xBF, 0xBF, 0x55, 0x55, 0x1, 0xFE, 0x0, 0x1, 0x46, + 0x5C, 0x5C, 0x5C, 0x12, 0x36, 0x5A, 0x5A, 0x1A, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, + 0x3, 0x27, 0x2E, 0xA, 0x4B, 0x32, 0x12, 0x5C, 0x1B, 0x59, 0x59, 0xC1, 0xBF, 0xAD, 0xAD, 0xAD, + 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5A, 0x5A, 0xB, + 0x4, 0x9B, 0x29, 0x20, 0x29, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBB, 0xA3, + 0x3A, 0x33, 0xE, 0x5, 0x4, 0x4, 0x1F, 0xE6, 0xB2, 0x4, 0x4, 0x1E, 0xCA, 0xC9, 0x5C, 0x5A, + 0x5C, 0xC9, 0x5C, 0xCA, 0xCC, 0xCA, 0xC9, 0x5C, 0xC9, 0x55, 0x5A, 0x46, 0x10, 0x1, 0x0, 0x1, + 0x3, 0x1B, 0x1B, 0x18, 0x18, 0x43, 0x1D, 0x12, 0x1, 0x1D, 0x43, 0x43, 0x36, 0x46, 0x46, 0x46, + 0x46, 0x52, 0x4F, 0x4F, 0x52, 0x4F, 0x53, 0xBF, 0x18, 0x50, 0x56, 0xBF, 0xC2, 0xCD, 0xCD, 0xCD, + 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xD0, 0xD0, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x5B, 0x58, 0x5A, 0x5A, 0xE, + 0x0, 0x79, 0x6B, 0x6, 0xD5, 0x6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xBD, 0xAA, + 0x3C, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xDB, 0xB2, 0x4, 0x4, 0x1E, 0x5C, 0x5C, 0x5C, 0x5C, + 0x5C, 0x5C, 0xBF, 0xCA, 0xCA, 0xC9, 0xC9, 0xC9, 0xC9, 0xAD, 0xBF, 0xBF, 0x49, 0x44, 0x13, 0x13, + 0x10, 0x10, 0xF, 0x10, 0x10, 0x3, 0x1, 0x3, 0x3, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, + 0xBF, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xBF, 0x12, 0x7, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x1A, 0x1B, 0x1A, 0x1A, 0x1B, 0x34, 0x34, 0x1D, 0x36, 0x46, 0x46, 0x46, 0x46, 0x55, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x58, 0x5A, 0x7, + 0x4, 0x9B, 0x6B, 0xD, 0x1F, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xE9, 0xB4, + 0x3C, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xDB, 0xD5, 0x4, 0x4, 0x1E, 0x54, 0x53, 0x53, 0x55, + 0x5A, 0x5A, 0x55, 0x53, 0x55, 0x55, 0x55, 0x53, 0x53, 0x52, 0x53, 0x53, 0x52, 0x4A, 0xBE, 0x4A, + 0x49, 0x49, 0x45, 0x45, 0x45, 0x44, 0x12, 0x34, 0x3, 0xC9, 0x5C, 0xC9, 0xC9, 0xC9, 0xC9, 0xBF, + 0xBF, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, 0xC9, 0xBF, 0x55, 0x53, 0x55, 0x53, 0x53, 0x53, 0x53, 0x53, + 0x53, 0x53, 0x53, 0x53, 0x52, 0x52, 0x4F, 0x4F, 0x46, 0x46, 0x46, 0x4F, 0x4F, 0x46, 0x50, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x5B, 0x5B, 0x5A, 0x5A, 0x7, + 0x4, 0x9A, 0x28, 0xD, 0x9B, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, + 0x41, 0x33, 0x2C, 0xB, 0x4, 0x4, 0x1F, 0xE6, 0xD5, 0x4, 0x4, 0x1E, 0x2F, 0x1A, 0x1C, 0x46, + 0x45, 0x45, 0x44, 0x13, 0x13, 0x13, 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x12, 0x12, 0x44, 0x49, + 0xBE, 0xBE, 0xC1, 0xC1, 0xC1, 0xC2, 0xBF, 0xBF, 0x3, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0xC9, + 0xBF, 0xC9, 0xC9, 0xCE, 0xCD, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCE, 0xCB, 0xCE, 0xCE, 0xCE, 0xCE, + 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x9, + 0x6, 0x77, 0x67, 0xB, 0x28, 0x29, 0xEF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0xBB, + 0xA3, 0x3A, 0x32, 0xB, 0x4, 0x0, 0x6, 0xDB, 0xB2, 0x4, 0x1E, 0x1F, 0x1C, 0x1A, 0x1A, 0x1A, + 0x1A, 0x44, 0x49, 0x4A, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, + 0xC1, 0xC1, 0xBE, 0xBE, 0xBE, 0xBF, 0x5C, 0xC9, 0x46, 0xAD, 0xC9, 0xC9, 0xE7, 0x9D, 0xBF, 0xBF, + 0xAD, 0xBF, 0xC9, 0xBF, 0xC9, 0xC9, 0xCD, 0xC0, 0xC9, 0x5C, 0xBF, 0xC9, 0xC9, 0xCD, 0xCD, 0xCD, + 0xCE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xCE, 0xCE, 0xD0, 0xCC, 0xCE, 0xCC, 0xCC, 0xCC, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0xB, + 0x4, 0x79, 0x37, 0x6, 0x9D, 0x1F, 0x6B, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, + 0x94, 0x3A, 0x33, 0xD, 0x5, 0x4, 0x1F, 0xDB, 0xB2, 0x1E, 0x1F, 0x22, 0x1A, 0x1A, 0x1A, 0x8, + 0x3, 0x3, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x12, 0x1A, 0x1A, 0x1A, 0x2F, 0x34, + 0x36, 0x3D, 0x46, 0x3D, 0x59, 0x59, 0x5C, 0xC9, 0x5C, 0xBF, 0xBF, 0xBF, 0xAD, 0x54, 0xBF, 0x5A, + 0x5C, 0xBF, 0x5C, 0xBF, 0xBF, 0x5C, 0xC9, 0xC0, 0xC0, 0x5C, 0xBF, 0xC9, 0xCD, 0xCD, 0xCE, 0xCE, + 0xCA, 0xCA, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5D, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x5A, 0x57, 0x58, 0x5B, 0x58, 0x58, 0x5B, 0x6, + 0x4, 0x9B, 0x37, 0xB, 0x9D, 0x65, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, + 0xA5, 0x3C, 0x33, 0xC, 0x4, 0x4, 0x1F, 0xDB, 0x9D, 0x4, 0x1F, 0x28, 0x1A, 0xA, 0xA, 0xA, + 0xA, 0x1, 0x1, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3, 0x8, 0x1A, 0x12, + 0x2D, 0x34, 0x34, 0x34, 0x55, 0xC0, 0x59, 0x53, 0x55, 0xC9, 0xCB, 0xCF, 0xCB, 0xCE, 0xCD, 0xCD, + 0xCB, 0xC9, 0xC9, 0xC9, 0xBF, 0xC9, 0xCD, 0xC9, 0xC9, 0x5C, 0xC9, 0xBF, 0xBF, 0xCB, 0xC9, 0xBF, + 0xBF, 0xCA, 0xCA, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x5A, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x5A, 0x5B, 0x6, + 0x4, 0xB5, 0x97, 0x1F, 0xB2, 0x65, 0x6E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, + 0xA5, 0x3C, 0x33, 0xC, 0x4, 0x4, 0x1E, 0xE6, 0xD5, 0x4, 0x1F, 0x1F, 0x2F, 0x1A, 0xA, 0x3, + 0x7, 0x1, 0x3, 0x3, 0x3, 0x8, 0x3, 0x3, 0x8, 0xA, 0xA, 0x8, 0x8, 0xA, 0xA, 0x1A, + 0x2F, 0x34, 0x34, 0x2F, 0x53, 0xC0, 0x5A, 0x52, 0x52, 0xAD, 0xCF, 0xCF, 0xD0, 0xD0, 0xD0, 0xF3, + 0xF3, 0xF3, 0xF3, 0xF3, 0xC4, 0xCF, 0xCF, 0xCE, 0xC0, 0xC9, 0xC9, 0xBF, 0xBF, 0xAD, 0xAD, 0xBF, + 0xBF, 0xBF, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCC, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x57, 0x57, 0x57, 0x58, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x58, 0x5B, 0xB, + 0x4, 0xE2, 0xAF, 0x20, 0xB2, 0x29, 0xAF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, + 0xA5, 0x3C, 0x38, 0xC, 0x4, 0x4, 0x4, 0xDB, 0x9D, 0x4, 0x6, 0x1F, 0x1A, 0x3, 0x3, 0x3, + 0x1, 0x1, 0x8, 0x3, 0xA, 0x12, 0x8, 0x3, 0x1, 0x3, 0x3, 0x12, 0xA, 0x1A, 0x2E, 0x1A, + 0x1A, 0x2F, 0x34, 0x2F, 0x4F, 0xC0, 0x5A, 0x52, 0x52, 0x52, 0xAD, 0xC9, 0xC9, 0xCD, 0xCE, 0xCE, + 0xD0, 0xCE, 0xCE, 0xCE, 0xC9, 0xBF, 0xC9, 0xCD, 0xC0, 0xCE, 0xCD, 0xC9, 0xCD, 0xCD, 0xCD, 0xCE, + 0xCE, 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, 0xCD, 0xCE, 0xCE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5D, 0x5B, 0x5B, 0x5D, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x58, 0x5B, 0xB, + 0x4, 0xDB, 0x97, 0x20, 0xD5, 0x29, 0xD5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, + 0xAA, 0x3C, 0x33, 0xC, 0x5, 0x4, 0x4, 0xD7, 0xB5, 0x4, 0x6, 0x6, 0x1A, 0xA, 0x1A, 0x3, + 0x1, 0x3, 0x8, 0x1, 0x3, 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x1A, 0x1A, 0x1A, 0x2E, 0x1A, + 0x2F, 0x34, 0x36, 0x34, 0x46, 0x5C, 0x5C, 0x53, 0x4C, 0x52, 0x48, 0x48, 0x48, 0x52, 0xA6, 0xA6, + 0x5C, 0xBF, 0xC4, 0xCD, 0xC9, 0xBF, 0xBF, 0xC9, 0xCD, 0xCE, 0xCD, 0xC9, 0xC9, 0xCD, 0xCE, 0xCE, + 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x57, 0x58, 0x58, 0x57, 0x57, 0x58, 0x58, 0x5B, 0x5B, 0x5, + 0x1F, 0xE2, 0x9B, 0x25, 0xB2, 0x29, 0xE6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xB7, 0xBD, 0xF5, 0xF8, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, + 0xA8, 0x3C, 0x33, 0xC, 0x5, 0x4, 0x4, 0xD5, 0xD5, 0x6, 0x6, 0x6, 0x1A, 0xA, 0x12, 0x3, + 0x3, 0x8, 0x8, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0x3, 0x3, 0x3, 0x12, 0x1A, 0x2D, 0x34, + 0x3D, 0x36, 0x3B, 0x36, 0x36, 0x5C, 0x5C, 0x53, 0x52, 0x54, 0x54, 0xAD, 0xBF, 0xBF, 0xBF, 0xAD, + 0xC9, 0xC9, 0xC9, 0xBF, 0xBF, 0xC9, 0xBF, 0xC9, 0xCD, 0xCE, 0xCE, 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, + 0xCE, 0xCE, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5A, 0x58, 0x58, 0x58, 0x58, 0x58, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0xB, + 0x6, 0xE1, 0x97, 0x20, 0x71, 0x1F, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xEE, 0xF0, 0xA3, 0x7, 0x38, 0xA3, 0xB4, + 0xF0, 0xF8, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xE9, + 0xA8, 0x3C, 0x33, 0xB, 0x4, 0x4, 0x4, 0xB5, 0xD5, 0x6, 0x6, 0xD, 0x1A, 0xA, 0x1A, 0x7, + 0x1, 0x1, 0x1, 0x8, 0x8, 0x3, 0x1, 0x1, 0x1, 0x3, 0x3, 0xA, 0x1A, 0x1A, 0x2F, 0x34, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x5C, 0xC0, 0x55, 0x54, 0x54, 0xAD, 0xBF, 0xAD, 0xAD, 0xAD, 0xAD, + 0xC9, 0x5C, 0xC9, 0xC9, 0xC9, 0xCD, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, 0xCD, 0xC9, 0xCD, 0xCE, 0xCE, + 0xD0, 0xD0, 0xD0, 0xCE, 0xCE, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x6, + 0x6, 0xFC, 0xB5, 0x25, 0x71, 0x1F, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x94, 0x2C, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xD8, 0x2C, 0x0, 0xF, 0x8, 0x2D, + 0x3B, 0xA3, 0xB6, 0xEA, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, + 0xA4, 0x3A, 0x33, 0x5, 0x4, 0x4, 0x0, 0xAF, 0xB5, 0x4, 0x6, 0x6, 0x1A, 0xA, 0x3, 0x7, + 0x8, 0x3, 0x1, 0x1, 0x3, 0x8, 0x8, 0xA, 0xA, 0x3, 0xA, 0x3, 0x1A, 0x12, 0x1A, 0x1A, + 0x36, 0x36, 0x36, 0x36, 0x4C, 0xC9, 0xC0, 0x5A, 0xC9, 0xCF, 0xCD, 0xD0, 0xD0, 0xD0, 0xD0, 0xCE, + 0xCA, 0xCA, 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, + 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x20, + 0xB, 0xD7, 0x6E, 0x20, 0x71, 0x28, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0x2C, 0xB6, 0xA3, 0x31, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0x1, 0x1, + 0x8, 0x12, 0x2D, 0x41, 0xB7, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, + 0xA3, 0x3A, 0x33, 0x7, 0x5, 0x4, 0xFE, 0x72, 0x97, 0x2, 0x6, 0xD, 0x2F, 0x1A, 0x12, 0x2C, + 0x2D, 0xA, 0x8, 0x1, 0x1, 0x3, 0x8, 0x3, 0xA, 0x3, 0x3, 0x2E, 0x2E, 0x1A, 0x1A, 0x1C, + 0x36, 0x4C, 0x52, 0x4C, 0x4C, 0x5C, 0x5C, 0x5A, 0xAD, 0xC4, 0xAD, 0xC4, 0xAD, 0xC4, 0xC9, 0xCF, + 0xC9, 0xCA, 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x20, + 0xFE, 0x0, 0x6, 0xB, 0x39, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0x41, 0x33, 0xAA, 0x38, 0xF9, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0x0, 0x0, + 0x0, 0x1, 0x1, 0x8, 0x3B, 0xB7, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEA, 0xB7, + 0x94, 0x38, 0x25, 0xD, 0x4, 0x0, 0x0, 0x5, 0x20, 0xD, 0x25, 0xD, 0x2D, 0x12, 0xA, 0x7, + 0xA, 0x8, 0x1, 0x1, 0x1, 0x3, 0x8, 0x8, 0xA, 0xA, 0x3, 0xA, 0x12, 0xA, 0x12, 0x34, + 0x36, 0x4C, 0x4C, 0x3D, 0x4C, 0x5C, 0xC0, 0x5A, 0xAD, 0x54, 0x54, 0x54, 0x54, 0xA6, 0x54, 0xAD, + 0xC9, 0x5C, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xBF, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCD, 0xC9, 0xC9, + 0xC9, 0xCD, 0xD0, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCC, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x58, 0x5B, 0x5B, 0x25, + 0x4, 0x37, 0x39, 0x1F, 0x1F, 0xDB, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0x31, 0xBB, 0xFD, 0xFD, 0xBB, 0x3A, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x8, 0x2D, 0x2C, + 0x1, 0x0, 0x0, 0x0, 0x8, 0x3B, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF4, 0xF4, 0xF7, 0xE9, 0xB0, + 0x6F, 0x30, 0xB, 0x4, 0x4, 0x4, 0x4, 0xFE, 0x0, 0xD, 0x25, 0xD, 0x1A, 0xA, 0xA, 0x9, + 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x3, 0xA, 0x1A, 0x12, 0x12, 0x12, 0x1A, 0x1C, 0x36, + 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x55, 0x5C, 0x5C, 0xC4, 0x55, 0x54, 0x54, 0x54, 0xAD, 0xC4, 0xBF, + 0xC9, 0x5C, 0xCD, 0xCD, 0xCD, 0xCD, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, + 0xD0, 0xD0, 0xD0, 0xCE, 0xD0, 0xD0, 0xCC, 0xCA, 0xCC, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, + 0x5B, 0x5B, 0x5B, 0x5B, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x20, + 0x1F, 0xD7, 0x97, 0xB, 0xD, 0xE0, 0xE0, 0xED, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x41, 0xEC, 0xF0, + 0xB7, 0x41, 0x2C, 0x1, 0x0, 0x12, 0xAA, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF5, 0xE2, 0x22, 0x4, 0x4, 0x4, 0x1E, + 0x4, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xFE, 0x4, 0xFE, 0x0, 0x4, 0x0, 0x0, 0x4, 0x0, 0x0, + 0xFE, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x4, 0xFE, 0x5, 0x5, + 0x4, 0x0, 0x0, 0xFE, 0x0, 0x4, 0x0, 0xFE, 0x4, 0xFE, 0x0, 0x0, 0x4, 0x5, 0x5, 0x5, + 0x0, 0x4, 0x5, 0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1E, 0x1E, + 0x4, 0x0, 0x4, 0x0, 0x0, 0x4, 0x4, 0x0, 0x6, 0xFE, 0x6, 0x4, 0xFE, 0x0, 0x0, 0x0, + 0xFE, 0x39, 0x25, 0xFE, 0x0, 0xB, 0x0, 0x4, 0x4, 0xB, 0x25, 0xBC, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0x94, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA3, 0xE9, 0xD8, + 0xE9, 0xF0, 0xE9, 0xB4, 0x8, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xBD, 0xB5, 0x64, 0x77, 0x79, 0x70, 0x67, + 0x3E, 0x6C, 0x3E, 0x38, 0x3E, 0x20, 0x20, 0xB3, 0xF6, 0xAE, 0x3E, 0x6E, 0x6C, 0x6F, 0x25, 0x4, + 0x37, 0x97, 0xA7, 0xA7, 0xA9, 0x97, 0x97, 0x71, 0x39, 0x39, 0x37, 0x37, 0x39, 0x39, 0x39, 0x37, + 0x39, 0x37, 0x39, 0x23, 0x1, 0x23, 0xA8, 0xA8, 0x6E, 0x72, 0x72, 0x72, 0xB2, 0xB3, 0xAF, 0x9B, + 0x96, 0x96, 0x96, 0x97, 0x71, 0x6B, 0x6B, 0x71, 0x39, 0x37, 0x39, 0x29, 0x4, 0x4, 0x39, 0x71, + 0x37, 0x6B, 0xD5, 0xE1, 0xD5, 0xD5, 0xE6, 0xE6, 0xF4, 0xF4, 0xE2, 0xB5, 0xAF, 0x3E, 0x25, 0x25, + 0x0, 0xFE, 0x25, 0x6E, 0x37, 0x39, 0x71, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x65, 0x39, + 0x39, 0x32, 0x25, 0x2, 0xFE, 0x4, 0x39, 0x1F, 0x6, 0xD, 0xD, 0x6, 0xB, 0x6, 0x4, 0x4, + 0x1E, 0xD5, 0x39, 0x0, 0xFE, 0x6F, 0x20, 0x4, 0x1F, 0x4, 0x0, 0x38, 0xF7, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF9, 0xFD, 0xFD, 0xA3, 0x94, 0x41, 0x2C, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA3, 0xEA, 0xBD, + 0xB6, 0xB6, 0xBD, 0xF7, 0x33, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xA4, 0x72, 0x64, 0x64, 0x21, 0x21, 0x22, + 0x20, 0x20, 0x20, 0x23, 0x30, 0x4, 0xFE, 0x30, 0xAE, 0x25, 0x6, 0x25, 0x20, 0x37, 0x25, 0xB, + 0x25, 0x32, 0x25, 0x25, 0x25, 0x6, 0x6, 0x1F, 0xD, 0xB, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, + 0x1E, 0x6, 0x20, 0x20, 0xB, 0x30, 0x30, 0xB, 0x16, 0x6, 0x6, 0x1F, 0x20, 0x25, 0x25, 0x1F, + 0x1F, 0x1F, 0x1F, 0x20, 0x25, 0x20, 0x25, 0x29, 0x25, 0x20, 0x25, 0x29, 0x1F, 0x1F, 0x37, 0x37, + 0x1F, 0x20, 0x39, 0x6B, 0x39, 0x37, 0x6B, 0x71, 0x6B, 0x6E, 0x6B, 0x97, 0xD5, 0xB5, 0xB5, 0xF4, + 0x30, 0x6, 0xA7, 0xF4, 0xD5, 0xE1, 0xE6, 0xE8, 0xE8, 0xE8, 0xE6, 0xE6, 0xE6, 0xE6, 0xE1, 0xE6, + 0xE1, 0xD5, 0xE2, 0xA5, 0x6, 0x20, 0xE6, 0xB2, 0x6E, 0xA7, 0x97, 0x3E, 0x39, 0x25, 0x1F, 0x25, + 0x37, 0xFC, 0xE0, 0x0, 0xB, 0xFC, 0xF4, 0xB2, 0x6E, 0x25, 0x4, 0x32, 0xEF, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF5, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xF7, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF0, 0xF7, + 0xEA, 0xB7, 0xB4, 0xF0, 0x31, 0x3, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA4, 0x41, 0x6C, 0x66, 0x21, 0x1F, 0x20, 0x1E, + 0x5, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4, 0x6, 0x4, 0x4, 0x4, 0x0, 0x4, 0x4, 0x5, + 0x6, 0x6, 0x4, 0x4, 0x6, 0x4, 0x4, 0x1E, 0x4, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x1F, + 0x1E, 0x1F, 0x6, 0x6, 0x20, 0x6, 0x6, 0x1F, 0x6, 0x6, 0x6, 0x1F, 0x1F, 0x4, 0x1F, 0x1F, + 0x1F, 0x1F, 0xB, 0xB, 0x20, 0x20, 0x20, 0xB, 0x20, 0xB, 0x20, 0x20, 0x1F, 0x4, 0x20, 0x1F, + 0x4, 0x4, 0x6, 0x1F, 0x1E, 0x4, 0x4, 0x20, 0x0, 0x4, 0x4, 0x0, 0x4, 0x30, 0x30, 0x25, + 0x37, 0x4, 0x37, 0x6C, 0x20, 0x29, 0x25, 0x25, 0x29, 0x29, 0x22, 0x22, 0x22, 0x29, 0x22, 0x67, + 0x1F, 0x20, 0x37, 0x25, 0xB, 0x1F, 0x39, 0x29, 0x37, 0x25, 0x32, 0x25, 0xB, 0x6, 0x0, 0x4, + 0x20, 0xF4, 0xAF, 0x4, 0x4, 0x6E, 0x20, 0x37, 0x25, 0xB, 0x6, 0x2C, 0xEF, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x33, 0xE9, 0xFD, 0xBD, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF5, 0xFD, + 0xFD, 0xF0, 0xB6, 0xF0, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xAA, 0x48, 0x40, 0x29, 0x22, 0x37, 0x37, 0x25, + 0x20, 0xD, 0xE, 0x7, 0x0, 0x0, 0x0, 0x20, 0x1F, 0x4, 0x4, 0x6, 0x4, 0x6, 0xB, 0xB, + 0x1F, 0x1F, 0x6, 0x4, 0x6, 0x20, 0x20, 0x1F, 0x4, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x29, 0x20, 0x6, 0x1F, 0x20, 0x20, 0x20, 0x6, 0x1F, 0x25, 0x25, 0x25, 0x25, 0x1F, 0x20, 0x25, + 0x25, 0x20, 0x25, 0x20, 0x20, 0x25, 0xD, 0x20, 0x20, 0x6, 0xB, 0x1F, 0x25, 0x25, 0x25, 0x1F, + 0x20, 0x1F, 0x4, 0x1F, 0x37, 0x25, 0x20, 0x4, 0x20, 0x20, 0x5, 0x20, 0x23, 0xB, 0x5, 0xB, + 0x5, 0x4, 0x4, 0xB, 0x4, 0xB, 0x1F, 0x1F, 0x4, 0xB, 0xB, 0xD, 0x1F, 0x20, 0x4, 0x6, + 0x20, 0x1F, 0x30, 0x20, 0xB, 0x20, 0x20, 0x20, 0xD, 0xB, 0xB, 0xD, 0x4, 0x4, 0x4, 0x1F, + 0x4, 0xD5, 0x9B, 0x4, 0x20, 0x1F, 0xB, 0x3E, 0xB6, 0xD8, 0xB0, 0x40, 0xEF, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF5, 0xFD, + 0xF9, 0xF5, 0xBD, 0xF0, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xAA, 0xA4, 0x41, 0x3E, 0x6B, 0x40, 0x3A, 0x39, + 0x37, 0x32, 0x2C, 0xE, 0x9, 0xFE, 0xFE, 0x37, 0x3E, 0x6, 0x6, 0x1F, 0x6, 0x6, 0xD, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x25, 0x30, 0x25, 0x20, 0x29, 0x37, 0x37, 0x30, 0x30, 0x25, 0x25, 0x25, + 0x37, 0x37, 0x30, 0x39, 0x6E, 0x37, 0x30, 0x37, 0x20, 0x29, 0x29, 0x29, 0x28, 0x28, 0x6B, 0x37, + 0x25, 0x1F, 0x25, 0x29, 0x29, 0x37, 0x37, 0x6E, 0x40, 0x97, 0xA9, 0x3E, 0x37, 0x25, 0x25, 0x39, + 0x37, 0x6B, 0x6E, 0x39, 0x39, 0x37, 0x6B, 0x25, 0x25, 0x20, 0x5, 0x4, 0x5, 0x4, 0x5, 0x25, + 0x3E, 0xAF, 0x37, 0x30, 0x20, 0xB, 0x37, 0x39, 0x20, 0x25, 0x25, 0x20, 0x25, 0x39, 0x29, 0x37, + 0x25, 0x25, 0x37, 0x25, 0x20, 0x33, 0xE, 0xE, 0x32, 0x6E, 0x30, 0x3A, 0x38, 0xB, 0xB, 0x1F, + 0x4, 0xE8, 0xD5, 0x4, 0x65, 0x6E, 0xB4, 0xB7, 0xE9, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, 0x41, 0x2C, 0x2C, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x3, 0xA4, 0xF0, 0xF7, + 0xB7, 0xEA, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xB7, 0xB4, 0xB4, 0xAA, 0xAA, 0xA8, 0xA3, + 0x3C, 0x33, 0x2D, 0x2D, 0xE, 0x0, 0x0, 0x3E, 0x6E, 0xB, 0xD, 0x20, 0x20, 0x20, 0x20, 0x25, + 0x20, 0x25, 0x20, 0x25, 0x39, 0x20, 0x4, 0x6E, 0x39, 0x37, 0x6E, 0x37, 0x20, 0x39, 0x37, 0x6B, + 0x37, 0x72, 0x6F, 0xBA, 0xD8, 0xA7, 0x6E, 0x37, 0x37, 0x37, 0x25, 0x6C, 0x71, 0x71, 0x3E, 0x37, + 0x37, 0x39, 0x3E, 0x6E, 0x32, 0x39, 0xA9, 0x37, 0x0, 0x0, 0xB0, 0xD8, 0xA7, 0x32, 0x39, 0x6E, + 0x39, 0x37, 0x6F, 0x6E, 0xA7, 0x37, 0x6E, 0x6F, 0xD, 0x6F, 0x30, 0xE2, 0xB0, 0xFB, 0xB0, 0x20, + 0x6, 0x25, 0x37, 0x25, 0x32, 0x37, 0x37, 0x40, 0x37, 0x6E, 0x6E, 0x6F, 0x6E, 0xAF, 0xA9, 0xB5, + 0x97, 0xA9, 0xB0, 0xE2, 0xBC, 0xBC, 0xBA, 0xAF, 0x97, 0xA9, 0xD7, 0x6E, 0xB, 0x20, 0x20, 0x20, + 0x2, 0xE1, 0x9B, 0x1F, 0xB5, 0xBD, 0xD8, 0xE9, 0xF0, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xAA, 0xF5, 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xA4, 0xF0, 0xF5, + 0x31, 0xAA, 0xF0, 0xF5, 0x33, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF0, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xBD, 0xB6, + 0xA3, 0x3C, 0x33, 0x31, 0xE, 0x0, 0xFE, 0x3E, 0x6E, 0x4, 0x5, 0x20, 0x20, 0x20, 0x20, 0x29, + 0x29, 0x37, 0x39, 0x37, 0xD, 0xD, 0xD, 0xB, 0x4, 0x20, 0xAE, 0x97, 0xA7, 0x3E, 0x6E, 0xBA, + 0xBA, 0xB5, 0x20, 0x0, 0x0, 0x0, 0x30, 0xA7, 0x3E, 0x6E, 0x6F, 0x97, 0x6F, 0xAF, 0xAF, 0xB0, + 0x6E, 0x6E, 0xAF, 0xA9, 0x6E, 0x97, 0x39, 0x6, 0x33, 0x30, 0x5, 0xFE, 0xF6, 0xD8, 0xAF, 0x6E, + 0xB0, 0xA7, 0xB5, 0xB0, 0xBC, 0xA7, 0xAF, 0xA9, 0x6F, 0xF6, 0xBC, 0xFB, 0x0, 0xB, 0xFD, 0xEF, + 0x6F, 0x37, 0xBA, 0x39, 0xF4, 0xBA, 0xE2, 0xBC, 0xA7, 0xAF, 0xD7, 0xD7, 0xE2, 0xA9, 0x6, 0xE2, + 0xB5, 0xFC, 0xFC, 0xFE, 0x0, 0xFE, 0x40, 0xFC, 0xFC, 0xF6, 0xEF, 0x3E, 0x4, 0xB, 0x20, 0x30, + 0x1F, 0xE6, 0x9B, 0x20, 0xEF, 0xF5, 0xF1, 0xF0, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0x2C, 0xAA, 0xBD, 0xF0, 0xF9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xA3, 0xBD, 0xF8, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xD8, 0xE, 0x1, 0x94, 0xE9, 0xEA, + 0x2C, 0xA3, 0xEA, 0xF5, 0x31, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xF7, 0xF5, 0xF0, 0xE9, + 0xB4, 0x94, 0x38, 0x31, 0x2C, 0x0, 0x0, 0x3E, 0x6F, 0x6, 0x4, 0x4, 0x5, 0xB, 0xB, 0x4, + 0x1F, 0x6, 0x1F, 0xD, 0x20, 0x33, 0x3C, 0x32, 0x32, 0xD, 0x25, 0xA9, 0x6F, 0xA7, 0x25, 0xB, + 0x20, 0x30, 0x33, 0x3F, 0x3C, 0x33, 0x30, 0xB, 0x30, 0x32, 0x6E, 0x40, 0xD, 0x4, 0x4, 0x37, + 0xA7, 0x30, 0x30, 0x32, 0x40, 0xA7, 0x38, 0x2C, 0x3A, 0x33, 0x3A, 0x30, 0x7, 0x40, 0xB0, 0xBC, + 0xBB, 0xBA, 0xD8, 0xBC, 0xBB, 0xB6, 0xD8, 0xE9, 0xE9, 0xBC, 0xBD, 0x0, 0x32, 0x32, 0xFE, 0x32, + 0xFC, 0xEF, 0xE2, 0xED, 0xEF, 0xFE, 0x40, 0xE2, 0xB5, 0xD8, 0xB5, 0x6F, 0x7, 0xB, 0x32, 0xE, + 0x0, 0xAA, 0x2C, 0x94, 0x94, 0x3B, 0x3C, 0x7, 0x0, 0x0, 0xD, 0x30, 0x33, 0x37, 0x30, 0x25, + 0x4, 0xE6, 0x79, 0x20, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x41, 0x33, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, 0x3F, 0xE, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBB, 0xE9, 0x31, 0x1, 0x2D, 0x3A, 0x34, + 0x2C, 0xA4, 0xEA, 0xF5, 0x33, 0x1, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, + 0xBD, 0xA3, 0x38, 0x33, 0x31, 0x4, 0xFE, 0x3E, 0x6B, 0x30, 0x6E, 0x3E, 0x38, 0x38, 0x30, 0xB, + 0x6, 0xD, 0xD, 0x32, 0xA3, 0xA3, 0x3C, 0x3D, 0x6F, 0x33, 0x30, 0xE, 0x33, 0x38, 0xAA, 0xBD, + 0xBA, 0xB6, 0xA3, 0x41, 0x41, 0x3F, 0x41, 0x41, 0x2C, 0xE, 0xE, 0xE, 0x32, 0xA3, 0x33, 0xE, + 0x5, 0x5, 0xE, 0x33, 0x40, 0x40, 0x41, 0xA3, 0x94, 0x41, 0x41, 0x38, 0x33, 0x2C, 0x31, 0xE, + 0xE, 0x9, 0x7, 0x7, 0x7, 0x7, 0x7, 0x9, 0xE, 0xE, 0xE, 0x38, 0x3A, 0x38, 0x40, 0xD, + 0x0, 0x0, 0x7, 0x0, 0xB, 0x33, 0x7, 0x2C, 0xD, 0x16, 0x16, 0x32, 0x6F, 0xB4, 0xA3, 0xB6, + 0xB4, 0x3A, 0xB7, 0xA4, 0xA4, 0xA4, 0xA4, 0xB4, 0xB7, 0xB4, 0xA3, 0x3B, 0x33, 0x33, 0x37, 0x30, + 0x1F, 0xE6, 0x9B, 0x25, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x3F, 0x33, 0xE9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB8, 0xEE, 0x41, 0x0, 0x1, 0x1, 0x1, + 0x2C, 0xA8, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xD8, 0xA8, 0x3A, 0x33, 0x33, 0x4, 0xFE, 0x39, 0x6E, 0x37, 0xA7, 0x41, 0x3C, 0x3F, 0x6F, 0xA7, + 0xB0, 0xD7, 0xD8, 0xD8, 0xD8, 0xB6, 0xB4, 0xB4, 0xA8, 0xB7, 0xBB, 0xE9, 0xD8, 0xE9, 0xD8, 0xD8, + 0xD8, 0xE9, 0xBD, 0xB7, 0xB4, 0xAA, 0xA3, 0xA3, 0xAA, 0xAA, 0xAA, 0xAA, 0xA3, 0xA8, 0xA3, 0xAA, + 0xB6, 0xBD, 0xBD, 0xD8, 0xE9, 0xE9, 0xE9, 0xE9, 0xB6, 0xB6, 0xA8, 0xA8, 0xAA, 0xA3, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xB4, 0xAA, 0xB4, 0xB4, 0xAA, 0xB4, 0xA3, 0xA3, 0x3C, 0x41, 0xA3, + 0x41, 0xA3, 0x6F, 0xA9, 0xAA, 0xA7, 0xA9, 0xB6, 0xBC, 0xD8, 0xD8, 0xBD, 0xB6, 0xB6, 0xB7, 0xEA, + 0xEB, 0xEF, 0xEB, 0xD8, 0xEA, 0xB7, 0xBD, 0xBD, 0xB9, 0xB7, 0xB4, 0xA3, 0x38, 0x38, 0x3C, 0x37, + 0x1E, 0xE6, 0x9B, 0x29, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0x3A, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xE9, 0xD8, 0x8, 0x0, 0x0, 0x0, + 0x12, 0xA4, 0xEA, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xD8, 0xAA, 0x3B, 0x38, 0x38, 0x4, 0x0, 0x6E, 0x71, 0x6E, 0xBC, 0xB6, 0xB4, 0xB4, 0xB4, 0xBA, + 0xBD, 0xEB, 0xF0, 0xF0, 0xEB, 0xE9, 0xEA, 0xE9, 0xE9, 0xD8, 0xE9, 0xF0, 0xEA, 0xF0, 0xFD, 0xF0, + 0xFD, 0xF0, 0xF1, 0xF1, 0xE9, 0xE9, 0xE9, 0xBD, 0xD8, 0xD8, 0xBD, 0xBD, 0xB7, 0xB7, 0xBD, 0xBD, + 0xBD, 0xE9, 0xEE, 0xEE, 0xF0, 0xF5, 0xF5, 0xF5, 0xE9, 0xE9, 0xE9, 0xBD, 0xBD, 0xD8, 0xB6, 0xB7, + 0xB6, 0xB8, 0xB6, 0xB8, 0xB6, 0xB8, 0xB8, 0xBD, 0xBD, 0xBD, 0xB8, 0xB8, 0xB6, 0xB8, 0xAA, 0xAA, + 0xB4, 0xAA, 0xB6, 0xAA, 0xB8, 0xBB, 0xBB, 0xBD, 0xE9, 0xE9, 0xEE, 0xEE, 0xE9, 0xEA, 0xF0, 0xF0, + 0xEF, 0xFD, 0xF2, 0xF0, 0xF0, 0xF2, 0xEF, 0xF2, 0xF5, 0xEA, 0xBD, 0xB6, 0x94, 0x3F, 0x40, 0x3A, + 0x20, 0x9B, 0x29, 0x37, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xB6, 0xF0, 0xB7, 0xE, 0x1, 0x0, + 0x8, 0x94, 0xEA, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xE9, 0xAA, 0x3B, 0x38, 0x3A, 0x4, 0x4, 0x9B, 0x39, 0xAF, 0xF7, 0xEA, 0xE9, 0xE9, 0xE9, 0xEF, + 0xF7, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xF7, 0xF5, 0xF0, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xF7, 0xF0, 0xF0, 0xF5, 0xF0, 0xF0, 0xF0, 0xF5, 0xF0, 0xF0, 0xF0, 0xF0, + 0xF5, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xF9, 0xEF, 0xF0, 0xF0, 0xF5, 0xF5, 0xF0, + 0xF0, 0xEE, 0xE9, 0xEE, 0xF0, 0xF0, 0xEE, 0xF0, 0xF0, 0xF5, 0xEE, 0xF7, 0xE9, 0xE9, 0xF0, 0xBD, + 0xE9, 0xEA, 0xE9, 0xEE, 0xEE, 0xF0, 0xF7, 0xF5, 0xF5, 0xFD, 0xFD, 0xF7, 0xFD, 0xF5, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xBD, 0xA8, 0x94, 0x94, 0x3F, + 0x30, 0x3E, 0xB5, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEA, 0xBD, 0xE9, 0xF5, 0xE9, 0xA3, 0x3A, + 0x8, 0x3A, 0xE9, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xEA, 0xB4, 0x3F, 0x3A, 0x3C, 0x4, 0x0, 0x6E, 0x29, 0xAF, 0xFD, 0xF7, 0xF8, 0xF7, 0xFD, 0xF7, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xFD, 0xF7, 0xF5, 0xFD, + 0xF5, 0xF5, 0xF5, 0xFD, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xEA, 0xBD, 0xB4, 0xB4, 0xB7, + 0xF1, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xEA, 0xD8, 0xF5, 0xF7, 0xF5, 0xF0, + 0xB6, 0xB4, 0xE9, 0xF5, 0x33, 0x1, 0x3B, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xFB, 0xF4, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xE9, 0xB6, 0x3F, 0x3A, 0x41, 0x5, 0x0, 0x3E, 0x20, 0xA9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xEA, 0xE9, 0xE9, 0xE9, + 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xD8, 0xBD, 0x38, 0xAA, 0xE9, 0xF0, 0xF7, + 0xF8, 0xF0, 0xBD, 0xF0, 0xB4, 0x2C, 0x33, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF8, 0xED, 0xD3, 0x8F, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xE9, 0xAA, 0x3C, 0x3F, 0x6F, 0xB, 0xFE, 0x4, 0x4, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xF0, 0xF5, 0xF5, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0xE, 0x31, 0xAA, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBB, 0xBD, 0xE, 0x12, 0x3B, 0x41, 0xA3, + 0xBD, 0xF0, 0xF0, 0xF5, 0xF8, 0xF0, 0xE9, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xE0, 0xD3, 0x84, 0x88, 0x88, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xEA, 0xB4, 0x41, 0x3A, 0x23, 0x4, 0xB, 0x30, 0xFE, 0xB5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xB6, 0xF9, 0xFD, 0xF8, 0xBD, 0x33, 0xF8, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xA3, 0xBD, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFB, 0xF4, 0xF4, 0xDF, 0xDD, 0xDD, 0xDD, 0xF4, 0xFB, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x3, 0x8, 0x2C, + 0x3B, 0x94, 0xAA, 0xBD, 0xF0, 0xF5, 0xF5, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xED, + 0xD3, 0x8A, 0x86, 0x87, 0x89, 0x91, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, + 0xE9, 0xB4, 0x6F, 0x3E, 0xC, 0xFE, 0x4, 0xB, 0xFE, 0x3E, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x94, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xB6, 0x41, 0x2C, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF7, 0xDC, 0x91, 0x8F, 0x8F, 0x89, 0x88, 0x88, 0x88, 0x8F, 0x93, 0xDF, 0xFB, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x0, 0x1, 0x1, + 0xF, 0x12, 0x2D, 0x38, 0xA4, 0xB7, 0xEA, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD4, 0x8A, + 0x86, 0x87, 0x87, 0x89, 0xD4, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, + 0xE9, 0xB4, 0x41, 0x3F, 0x30, 0x0, 0xFE, 0xFE, 0x0, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0x3F, 0xFD, 0xFD, 0xF9, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xEE, 0xB1, 0x83, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, + 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x33, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x12, 0x3A, 0xB4, 0xF7, 0xFD, 0xFD, 0xF9, 0xF5, 0xD9, 0x8D, 0x89, 0x85, + 0x87, 0x87, 0x87, 0x90, 0xF4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xE9, 0xB6, 0x94, 0xA3, 0x94, 0x3A, 0x3A, 0x94, 0xA3, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x38, 0xE9, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xAA, 0xF5, 0xE9, 0xB6, 0xA3, 0x38, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xEE, 0xA8, 0x69, 0x7E, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x88, 0x89, 0x93, 0xDF, 0xFB, 0xFC, 0xFD, 0xFD, 0xE9, 0xB6, 0xEA, 0xF0, 0xB7, 0x41, 0x2C, 0x7, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x8, 0x94, 0xF5, 0xF9, 0xF4, 0xD9, 0x8D, 0x86, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x88, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xD8, 0xAA, 0xAA, 0xB4, 0xBD, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xA3, 0xE, 0xFD, 0xFD, 0xBD, 0x38, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x94, 0xE, 0x2C, 0xAA, 0xBD, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xED, 0xB3, 0x72, 0x66, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x89, 0x92, 0xDD, 0xF4, 0xFB, 0xF0, 0xB7, 0xB6, 0xBD, 0xEA, 0xF0, 0xE9, 0xB4, + 0x3B, 0x2C, 0x7, 0x0, 0x0, 0x8, 0x41, 0xF0, 0xD9, 0x8D, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x89, 0xDA, 0xF4, 0xF4, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0x3F, 0xFD, 0xFD, 0x2C, 0xEE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0x41, 0x33, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF7, 0xE0, 0x90, 0x84, 0x84, 0x82, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0x8F, 0xDD, 0xDF, 0xED, 0xD8, 0xB7, 0xB6, 0xB6, 0xBD, 0xE9, + 0xEA, 0xD8, 0xB6, 0x3A, 0x1, 0x3, 0x41, 0xED, 0x8F, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x89, 0x8F, 0x8F, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x3F, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xEA, 0xAE, 0x83, 0x87, 0x87, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, 0xDF, 0xF4, 0xEB, 0xBD, 0xB7, 0xE9, + 0xE9, 0xEA, 0xE9, 0xEE, 0x2C, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF8, 0xD8, 0x6D, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDD, 0xD6, 0xEE, 0xB6, + 0xBB, 0xEE, 0xD8, 0xE0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xDF, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0xE, 0x2C, 0x41, 0xB6, 0xF5, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xBA, 0x74, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x75, 0xD6, 0x38, + 0x2C, 0xB4, 0xE0, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x89, 0x8F, 0x93, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF8, 0xBD, 0xA3, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF0, 0xAE, 0x63, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x3, 0x3F, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xD6, 0x76, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x1, 0x3A, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xFB, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xD8, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xAE, 0x63, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x1, 0x3A, 0xD8, 0xDF, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0xD3, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xBD, 0xFD, 0xF0, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xEA, 0xFD, 0x3C, 0xE, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xBB, 0xA7, 0x6A, 0x62, 0x7F, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x1, 0x3B, 0xD8, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0x41, 0xE, 0x2C, 0xB6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xBD, 0x38, 0xF7, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xE9, 0xB7, 0xA7, 0x6A, 0x62, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x1, 0x3B, 0xBB, 0xDC, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0xDD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF0, 0x33, 0xEA, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF7, 0xE9, 0xB6, 0x72, 0x6A, 0x62, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x37, + 0x1, 0x2D, 0x3F, 0x38, 0x1, 0x8, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x84, 0x91, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xEA, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xE, 0xA3, 0xFD, 0x2C, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEA, 0xB8, 0xA7, 0x6A, 0x62, 0x7F, 0x85, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0xD1, 0x7A, + 0x0, 0x1, 0x3, 0x1, 0x1, 0x8, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x84, 0x8E, 0xDC, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xFD, 0xFD, 0xFD, 0x41, 0xFD, 0xFD, 0x2C, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF7, 0xEA, 0xB8, 0xA7, 0x6A, 0x61, 0x80, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x5F, 0x8B, 0xD2, + 0x5, 0x0, 0x0, 0x0, 0x0, 0x8, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x89, 0x8A, 0xD3, 0xE0, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xAA, 0xFD, 0xBB, 0xE, 0xF0, 0xE9, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x41, 0xB6, 0xF0, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xE9, 0xB6, 0x6F, 0x5E, 0x80, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0x8F, 0x89, 0x5F, 0x60, 0xD9, + 0x3E, 0x0, 0x0, 0x0, 0x1, 0x3, 0x3E, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x86, 0x8A, 0xD4, 0xED, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xE, 0x31, 0xB6, 0xE, 0xE, 0xB6, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB7, 0xB4, 0x38, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xEB, 0xB0, 0x69, 0x7F, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x83, 0xD4, 0xDA, 0xDF, 0xD3, 0x61, 0x75, + 0xDC, 0x37, 0x4, 0xFE, 0x0, 0x0, 0x3E, 0xDF, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x86, 0x8E, 0xED, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xA3, 0xFD, 0xFD, 0xF9, 0xBD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF4, 0xD9, 0x8D, 0x83, 0x85, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0x23, 0x72, 0xE0, 0xD4, 0x60, + 0x76, 0xDA, 0xD2, 0x70, 0x30, 0x38, 0xD6, 0x92, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x89, 0xDD, 0xF4, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xBD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF4, 0xD4, 0x90, 0x89, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x2D, 0xB0, 0xD4, 0x75, + 0x75, 0x76, 0x8C, 0xD3, 0xD6, 0xD9, 0x8D, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDD, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xB4, 0x41, 0xFD, 0xFD, 0xAA, 0x38, 0xEE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0x2C, 0x41, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD4, 0x90, 0x89, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA8, 0xDA, 0xD9, + 0xD2, 0xD9, 0xD1, 0xD1, 0xDC, 0xDC, 0xDD, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0x93, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xE9, 0xA3, 0xFD, 0xFD, 0xD8, 0x2C, + 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xF7, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xEE, 0xD3, 0x8A, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA3, 0xED, 0xED, + 0x23, 0xA7, 0xE0, 0xF0, 0x38, 0x72, 0xDC, 0xDD, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x89, 0x92, 0xDF, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xB6, 0xA8, 0xFD, 0xEE, 0xE, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF8, 0xE9, 0x8C, 0x86, 0x87, 0x85, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xB, 0x8, 0x94, 0xE0, 0xED, + 0x4, 0x2D, 0xAA, 0xF0, 0x23, 0xE, 0xA8, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x8F, 0xDF, 0xFB, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xE, 0x2C, 0xBD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF7, 0xD8, 0x7A, 0x75, 0x63, 0x61, 0x62, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xB, 0x8, 0x94, 0xE0, 0xE0, + 0x4, 0x8, 0x94, 0xF0, 0x23, 0x7, 0x41, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xFB, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF0, 0xBD, 0xB0, 0x78, 0x63, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xDC, 0xE0, + 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x93, 0xFB, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xA3, 0xFD, 0xFD, 0xF8, 0x41, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF7, 0xE9, 0x7C, 0x86, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xDC, 0xE0, + 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0xDD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xA3, 0xBD, 0x31, 0xBD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xF0, 0xAE, 0x83, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0x94, 0xE0, 0xE0, + 0x4, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x92, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0x31, 0x2C, 0xF8, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xF9, 0xEA, 0xA7, 0x61, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA3, 0xED, 0xED, + 0x0, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x85, 0x86, 0x89, 0xDD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0x31, 0xBD, 0xB6, 0xA3, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xD8, 0xA3, 0xE, 0x2C, 0x41, 0xBB, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF5, 0xB8, 0x6C, 0x62, 0x80, 0x80, 0x7F, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x63, 0xB3, 0xC, 0x8, 0xA4, 0xEE, 0xEE, + 0x1, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x8A, 0xDD, 0xF4, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x41, 0xF8, 0xFD, 0xFD, 0xB6, 0xA3, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xB4, 0xF7, 0xD8, 0x33, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xF9, 0xF0, 0xB6, 0x7A, 0x78, 0x69, 0x60, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x7D, 0x73, 0xBA, 0xE, 0x8, 0xA4, 0xF0, 0xF0, + 0x7, 0x8, 0x94, 0xF0, 0x23, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDD, 0xFC, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF8, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xF9, 0xF7, 0xEB, 0xB8, 0x70, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x84, 0x74, 0xAE, 0xBD, 0xE, 0x8, 0xA4, 0xF5, 0xF5, + 0x7, 0x8, 0xA4, 0xF0, 0x2C, 0x1, 0x3F, 0xDF, 0x89, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x80, 0x73, 0x73, 0x81, 0x80, 0x85, 0x87, 0x87, 0x87, 0x85, 0x86, 0x86, 0x89, 0x92, 0xFB, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xEE, 0xFD, 0xE9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBA, 0x74, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x88, 0x84, 0x8E, 0xD9, 0xBB, 0xB7, 0xBD, 0xE, 0x8, 0xAA, 0xF0, 0xF5, + 0x8, 0x8, 0xA4, 0xF5, 0x2D, 0x1, 0x3F, 0xE0, 0x84, 0x85, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x88, 0x84, 0x7B, 0x7A, 0x70, 0x73, 0x82, 0x83, 0x84, 0x8B, 0xB1, 0xB1, 0xD3, 0xDF, 0xFC, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB7, 0x6A, 0x7E, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x89, 0x8D, 0xD9, 0xF4, 0xF8, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x48, 0xB6, 0xB4, + 0x3, 0x12, 0xA4, 0xF5, 0x33, 0x1, 0x41, 0xEA, 0x7A, 0x61, 0x80, 0x87, 0x87, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x86, 0x8D, 0xD6, 0xB6, 0xAE, 0xD1, 0xD9, 0xEE, 0xF0, 0xF0, 0xF5, 0xF9, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xA8, 0x70, 0x63, 0x81, 0x80, 0x83, 0x61, 0x62, 0x85, 0x87, + 0x87, 0x86, 0x8A, 0xD9, 0xF5, 0xF9, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x31, 0x1, 0x12, 0x2D, 0xE, + 0x1, 0x12, 0xA4, 0xF1, 0x34, 0x3, 0x41, 0xF0, 0xBB, 0x72, 0x6A, 0x60, 0x85, 0x87, 0x87, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x88, 0x92, 0xED, 0xF0, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB7, 0x2C, 0xE, 0x38, 0xE9, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, 0xBA, 0xBA, 0xD6, 0xD8, 0xB4, 0x72, 0x74, 0x76, + 0xD1, 0xDC, 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xEE, 0xAA, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x3, 0x2D, 0x2D, 0x1, 0x8, 0x94, 0xF5, 0xF8, 0xEE, 0xB7, 0xA7, 0x68, 0x62, 0x7F, 0x87, + 0x87, 0x87, 0x87, 0x87, 0x87, 0x89, 0xDF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF0, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF7, 0xF7, 0xF8, 0xF0, 0xE9, 0xD8, 0xE0, + 0xF5, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xD8, 0xEE, 0x31, 0x0, 0x0, 0x0, + 0x1, 0x1, 0x1, 0x1, 0x0, 0x8, 0x94, 0xF7, 0xFD, 0xF9, 0xF7, 0xE9, 0xB4, 0x72, 0x69, 0x62, + 0x85, 0x87, 0x87, 0x87, 0x89, 0x93, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x31, 0xBD, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xB6, 0xEE, 0xBD, 0x31, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x8, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xF9, 0xF5, 0xD8, 0xB0, 0x72, + 0x61, 0x7E, 0x85, 0x89, 0xDD, 0xF4, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0x33, 0xFD, 0xFD, 0xF0, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xEE, 0xD8, 0xEA, 0xF8, 0xF0, 0xB4, 0x41, + 0x2C, 0xE, 0x1, 0x0, 0x1, 0x1, 0x41, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF0, 0xE9, + 0xB0, 0xAE, 0xB3, 0xDC, 0xFB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xBB, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF5, 0xE9, 0xE9, 0xA4, 0xBD, 0xF5, 0xF8, 0xF8, + 0xF5, 0xEE, 0xAA, 0x2C, 0x1, 0xE, 0xB4, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF7, 0xF5, 0xF7, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xEA, 0xBD, 0xBD, 0xE, 0x33, 0xA4, 0xB6, 0xE9, + 0xF5, 0xF5, 0xF0, 0xE9, 0xAA, 0xB7, 0xF0, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x2C, 0xE, 0x31, 0xAA, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x3A, 0xA3, 0xB6, 0xE9, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1A, 0x34, 0x48, + 0xBD, 0xF0, 0xEA, 0xE9, 0xF0, 0xF0, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xA3, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xE9, 0xB6, 0x3C, 0xE, 0x3A, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x1, 0xF, 0x12, + 0x48, 0xBD, 0xF0, 0xEA, 0xBD, 0xEE, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xF9, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xBD, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x1, 0x1, 0x1, + 0x12, 0x94, 0xE9, 0xF5, 0x33, 0x3A, 0xD8, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xAA, 0x3A, 0xF0, 0xFD, 0xE9, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x0, 0x1, 0x1, 0x0, + 0x1, 0x34, 0xB7, 0xF7, 0x31, 0x8, 0xA4, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x31, 0xE, 0x2C, 0xE9, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x2C, 0x38, 0xB4, 0xF5, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x1, 0x2D, 0x48, 0x3A, + 0x0, 0x12, 0xAA, 0xF5, 0x31, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x3A, 0xFD, 0xF5, 0xAA, 0x33, 0xE, 0x2C, 0xA3, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x7, 0xA4, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xB6, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF5, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBD, 0xA3, 0x31, 0x2C, 0x3F, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0x31, 0xE, 0x31, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x33, 0x3, 0x41, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xA8, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xBD, 0xFD, 0xE, 0xA3, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF5, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xF9, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xF8, 0xFD, 0xE, 0xF9, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF0, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x31, 0xE, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x3A, 0xFD, 0xE, 0xF0, 0x2C, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB4, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0xFD, 0xE, 0x2C, 0xD8, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x41, 0xBB, 0xF7, 0xF9, 0xE, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x31, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xB6, 0x41, 0xE, 0xE, 0xB6, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xB6, 0x2C, 0xE, 0x33, 0xE9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x8, 0xA4, 0xF5, 0x33, 0x3, 0x48, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0xE9, 0xFD, 0xF0, 0x3A, 0xB6, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x8, 0xAA, 0xF5, 0xF0, + 0x7, 0x7, 0x3B, 0xAB, 0x12, 0x3, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xFD, 0xFD, 0xF9, 0xE, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xBD, 0xE, 0x7, 0xA4, 0xF5, 0xF5, + 0x7, 0x1, 0x8, 0x8, 0x1, 0x8, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x2C, 0x31, 0xE9, 0xF7, 0xB6, 0xB4, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xBD, 0xE9, 0x33, 0x7, 0x3B, 0xF0, 0xF8, + 0x33, 0x0, 0x1, 0x1, 0x1, 0x8, 0x94, 0xF7, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xE, 0xA3, 0xD8, 0xF7, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xE9, 0xB6, 0xEA, 0xE9, 0xAA, 0xA4, 0xE9, 0xF0, + 0xB6, 0x7, 0x0, 0x0, 0x1, 0x8, 0x41, 0xF5, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF7, 0xBB, 0x41, 0x2C, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF0, 0xB6, 0xB4, 0xBD, 0xE9, 0xEA, 0xBD, 0xB6, + 0xF5, 0xA8, 0x7, 0x0, 0x0, 0x1, 0x41, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF0, 0xD8, 0xB7, 0xBB, 0xE9, 0xD8, 0xB4, + 0xBD, 0xF0, 0xB6, 0x3A, 0xE, 0x2C, 0xB7, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF8, 0xF7, 0xF5, 0xF8, 0xF7, 0xE9, + 0xB4, 0xBD, 0xEA, 0xEA, 0xB7, 0xBD, 0xF0, 0xF8, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, + 0xF5, 0xF0, 0xF5, 0xF8, 0xF9, 0xF9, 0xF9, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, + 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD + +}; diff --git a/backends/platform/gp32/globals.h b/backends/platform/gp32/globals.h new file mode 100644 index 0000000000..425e3a2e91 --- /dev/null +++ b/backends/platform/gp32/globals.h @@ -0,0 +1,42 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2006 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GLOBALS_H +#define __GLOBALS_H + +enum { + FM_QUALITY_LOW = 0, + FM_QUALITY_MED, + FM_QUALITY_HI +}; + +struct GlobalVars { + uint16 cpuSpeed; + uint16 gammaRamp; + uint8 fmQuality; + uint32 sampleRate; +}; + +extern GlobalVars g_vars; + +#endif diff --git a/backends/platform/gp32/gp32_launcher.cpp b/backends/platform/gp32/gp32_launcher.cpp new file mode 100644 index 0000000000..c7061590d2 --- /dev/null +++ b/backends/platform/gp32/gp32_launcher.cpp @@ -0,0 +1,190 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" +#include "common/file.h" + +#include "base/engine.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" +#include "backends/gp32/gp32std_input.h" + +#include "backends/gp32/gfx_splash.h" +#include "backends/gp32/gp32_launcher.h" +#include "backends/gp32/globals.h" + +uint16 cpuSpeedTable[15] = {40, 66, 100, 120, 133, 144, 156, 160, 166, 172, 176, 180, 188, 192, 200}; +uint16 gammaTable[16] = {5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000}; +char *oplTable[3] = {"LOW", "MEDIUM", "HIGH"}; +uint16 sampleTable[4] = {0, 11025, 22050, 44100}; + +uint8 maxTable[5] = {15, 16, 3, 3, 2}; +uint8 currentSetting[5] = {2, 5, 1, 1, 0}; + +void writeConfigVars() { + Common::File file; + + g_vars.cpuSpeed = cpuSpeedTable[currentSetting[0]]; + g_vars.gammaRamp = gammaTable[currentSetting[1]]; + g_vars.fmQuality = currentSetting[2]; + g_vars.sampleRate = sampleTable[currentSetting[3]]; + + if (!file.open("gp:\\gpetc\\scummvm.cfg", Common::File::kFileWriteMode)) { + return; + } + file.writeByte(currentSetting[0]); + file.writeByte(currentSetting[1]); + file.writeByte(currentSetting[2]); + file.writeByte(currentSetting[3]); + file.close(); +} + +void readConfigVars() { + Common::File file; + if (!file.open("gp:\\gpetc\\scummvm.cfg", Common::File::kFileReadMode)) { + currentSetting[0] = 2; + currentSetting[1] = 5; + currentSetting[2] = 1; + currentSetting[3] = 1; + writeConfigVars(); + return; + } + currentSetting[0] = file.readByte(); + currentSetting[1] = file.readByte(); + currentSetting[2] = file.readByte(); + currentSetting[3] = file.readByte(); + g_vars.cpuSpeed = cpuSpeedTable[currentSetting[0]]; + g_vars.gammaRamp = gammaTable[currentSetting[1]]; + g_vars.fmQuality = currentSetting[2]; + g_vars.sampleRate = sampleTable[currentSetting[3]]; + file.close(); +} + +void configMenu() { + uint32 nKeyUD; + uint16 nKeyP; + + int currentSelect = 0; + char text[32]; + + // OK / CANCEL + currentSetting[4] = 0; + + while (1) { + gp_fillRect(frameBuffer2, 0, 0, 320, 240, 0xffff); + gp_textOut(frameBuffer2, 90, 10, "Configuration Menu", 0); + + gp_textOut(frameBuffer2, 30, 40, "CPU clock speed", 0); + gp_textOut(frameBuffer2, 30, 80, "Gamma ramp", 0); + gp_textOut(frameBuffer2, 30, 120, "FMOPL (AdLib) quality", 0); + gp_textOut(frameBuffer2, 30, 160, "Sampling rate", 0); + + gp_textOut(frameBuffer2, 100, 210, "OK CANCEL", 0); + + if (currentSelect == 4) { + gp_textOut(frameBuffer2, 80 + currentSetting[4] * 100, 210, "@", 0); + } else + gp_textOut(frameBuffer2, 20, (currentSelect + 1) * 40, "@", 0); + + sprintf(text, "%d MHz", cpuSpeedTable[currentSetting[0]]); + gp_textOut(frameBuffer2, 220, 40, text, 0); + sprintf(text, "%.2f", (float)gammaTable[currentSetting[1]] / 10000); + gp_textOut(frameBuffer2, 220, 80, text, 0); + gp_textOut(frameBuffer2, 220, 120, oplTable[currentSetting[2]], 0); + if (sampleTable[currentSetting[3]] == 0) { + strcpy(text, "NO SOUND"); + } else { + sprintf(text, "%d Hz", sampleTable[currentSetting[3]]); + } + gp_textOut(frameBuffer2, 220, 160, text, 0); + + gp_flipScreen(); + + gp_getButtonEvent(&nKeyUD, &nKeyP); + + if (gpd_getButtonDown(nKeyUD, GPC_VK_UP)) { + if (currentSelect > 0) + currentSelect--; + } + if (gpd_getButtonDown(nKeyUD, GPC_VK_DOWN)) { + if (currentSelect < 4) + currentSelect++; + } + if (gpd_getButtonDown(nKeyUD, GPC_VK_LEFT)) { + if (currentSelect <= 4) + if (currentSetting[currentSelect] > 0) + currentSetting[currentSelect]--; + } + if (gpd_getButtonDown(nKeyUD, GPC_VK_RIGHT)) { + if (currentSelect <= 4) + if (currentSetting[currentSelect] < maxTable[currentSelect] - 1) + currentSetting[currentSelect]++; + } + + if (gpd_getButtonUp(nKeyUD, GPC_VK_START) || + gpd_getButtonUp(nKeyUD, GPC_VK_FA)) { + if (currentSelect == 4) { + if (currentSetting[currentSelect] == 0) { // OK + writeConfigVars(); + return; + } else { // CANCEL + return; + } + } + } + } +} + +void splashScreen() { + uint32 nKeyUD; + uint16 nKeyP; + + while (1) { + uint16 *buffer = frameBuffer2;//&frameBuffer1[240 - _screenHeight]; + uint8 *picBuffer = gfx_splash; + + for (int c = 0; c < LCD_WIDTH * LCD_HEIGHT; c++) { + *buffer++ = gfx_splash_Pal[*picBuffer++]; + } + + gp_flipScreen(); + + while (1) { + gp_getButtonEvent(&nKeyUD, &nKeyP); + + if (gpd_getButtonUp(nKeyUD, GPC_VK_START) || + gpd_getButtonUp(nKeyUD, GPC_VK_FA)) { + gp_fillRect(frameBuffer1, 0, 0, 320, 240, 0xffff); + gp_fillRect(frameBuffer2, 0, 0, 320, 240, 0xffff); + return; + } + if (gpd_getButtonUp(nKeyUD, GPC_VK_SELECT)) { + configMenu(); + break; + } + } + } +} diff --git a/backends/platform/gp32/gp32_launcher.h b/backends/platform/gp32/gp32_launcher.h new file mode 100644 index 0000000000..94b1f6ce85 --- /dev/null +++ b/backends/platform/gp32/gp32_launcher.h @@ -0,0 +1,34 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32_LAUNCHER_H +#define __GP32_LAUNCHER_H + +#include "stdafx.h" +#include "common/scummsys.h" + +extern void readConfigVars(); + +extern void splashScreen(); + +#endif diff --git a/backends/platform/gp32/gp32_main.cpp b/backends/platform/gp32/gp32_main.cpp new file mode 100644 index 0000000000..5d0442b8c6 --- /dev/null +++ b/backends/platform/gp32/gp32_main.cpp @@ -0,0 +1,91 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" + +#include "common/config-manager.h" + +#include "base/main.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" + +#include "backends/gp32/gp32_launcher.h" +#include "backends/gp32/gp32_osys.h" +#include "backends/gp32/globals.h" + +GlobalVars g_vars; + +void init() { + gp_setCpuSpeed(40); // Default CPU Speed + + GpGraphicModeSet(16, NULL); + + //if (type == NLU || type == FLU || type == BLU) + // gp_initFramebuffer(frameBuffer, 16, 85); + //else if (type == BLUPLUS) + // gp_initFramebufferBP(frameBuffer, 16, 85); + // else + // error("Invalid Console"); + gp_initFrameBuffer(); + + GpFatInit(); + GpRelativePathSet("gp:\\gpmm"); +} + +void GpMain(void *arg) { + extern void memBlockInit(); + memBlockInit(); + + init(); + + readConfigVars(); + + splashScreen(); + + //doConfig + gp_initGammaTable((float)g_vars.gammaRamp / 10000); + gp_setCpuSpeed(g_vars.cpuSpeed); + + // FOR DEBUG PURPOSE! + //int argc = 4; + //char *argv[] = { "scummvm", "-enull", "-pgp:\\game\\dott\\", "tentacle" }; + //int argc = 2; + //char *argv[] = { "scummvm", "-d5" }; + + extern OSystem *OSystem_GP32_create(); + g_system = OSystem_GP32_create(); + assert(g_system); + + // Invoke the actual ScummVM main entry point: + //int res = scummvm_main(argc, argv); + int res = scummvm_main(1, NULL); + + extern void memBlockDeinit(); + memBlockDeinit(); + + g_system->quit(); // TODO: Consider removing / replacing this! + + //return res; +} diff --git a/backends/platform/gp32/gp32_osys.cpp b/backends/platform/gp32/gp32_osys.cpp new file mode 100644 index 0000000000..68adfb3576 --- /dev/null +++ b/backends/platform/gp32/gp32_osys.cpp @@ -0,0 +1,775 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "backends/gp32/gp32_osys.h" + +#include "stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "backends/gp32/globals.h" + +#include "common/rect.h" +#include "common/savefile.h" +#include "common/config-manager.h" + +static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { + {0, 0, 0} +}; + +OSystem_GP32::OSystem_GP32() : + _screenWidth(0), _screenHeight(0), _gameScreen(NULL), _hwScreen(NULL), + _overlayVisible(false), _forceFull(false), _adjustAspectRatio(false), + /*_paletteDirtyStart(0), _paletteDirtyEnd(0),*/ + _mouseBuf(NULL), _mouseHeight(0), _mouseWidth(0), _mouseKeyColor(0), + _mouseHotspotX(0), _mouseHotspotY(0) { + NP("OSys::OSystem_GP32()"); + // allocate palette storage + memset(_currentPalette, 0, 256 * sizeof(uint16)); + + memset(&_km, 0, sizeof(_km)); + + // HACK: bring mouse cursor to center + _mouseX = 160; + _mouseY = 120; +} + +OSystem_GP32::~OSystem_GP32() { + NP("OSys::~OSystem_GP32()"); +} + +bool OSystem_GP32::hasFeature(Feature f) { + NP("OSys::hasFeature()"); + return false; +} + +void OSystem_GP32::setFeatureState(Feature f, bool enable) { + NP("OSys::setFeatureState()"); +} + +bool OSystem_GP32::getFeatureState(Feature f) { + NP("OSys::getFeatureState()"); + return false; +} + +const OSystem::GraphicsMode* OSystem_GP32::getSupportedGraphicsModes() const { + NP("OSys::getSupportedGraphicsModes()"); + return s_supportedGraphicsModes; +} + + +int OSystem_GP32::getDefaultGraphicsMode() const { + NP("OSys::getSupportedGraphicsModes()"); + return -1; +} + +bool OSystem_GP32::setGraphicsMode(int mode) { + NP("OSys::setGraphicsMode()"); + return true; +} + +bool OSystem_GP32::setGraphicsMode(const char *name) { + NP("OSys::setGraphicsMode()"); + return true; +} + +int OSystem_GP32::getGraphicsMode() const { + NP("OSys::getGraphicsMode()"); + return -1; +} + +void OSystem_GP32::initSize(uint width, uint height) { + NP("OSys::initSize()"); + + if (width == _screenWidth && height == _screenHeight) + return; + + _screenWidth = width; + _screenHeight = height; + + if (height != 200) + _adjustAspectRatio = false; + + _overlayWidth = width; + _overlayHeight = height; +// _overlayWidth = 320; +// _overlayHeight = 240; + + // Create the surface that contains the 8 bit game data + _gameScreen = new uint8[_screenWidth * _screenHeight]; + + // Create the surface that contains the scaled graphics in 16 bit mode + _tmpScreen = frameBuffer2; + + // Create the surface that is connected with hardware screen + _hwScreen = frameBuffer1; + + _overlayBuffer = new OverlayColor[_overlayWidth * _overlayHeight]; + + _km.x_max = _screenWidth - 1; + _km.y_max = _screenHeight - 1; + _km.x = _mouseX; + _km.y = _mouseY; + _km.delay_time = 25; + _km.last_time = 0; + + // Clear Screen + gp_fillRect(_hwScreen, 0, 0, 320, 240, 0xFFFF); +} + +int16 OSystem_GP32::getHeight() { + //NP("OSys::getHeight()"); + return _screenHeight; +} + +int16 OSystem_GP32::getWidth() { + //NP("OSys::getWidth()"); + return _screenWidth; +} + +void OSystem_GP32::setPalette(const byte *colors, uint start, uint num) { + NP("OSys::setPalette()"); + const byte *b = colors; + uint i; + uint16 *base = _currentPalette + start; + for (i = 0; i < num; i++) { + base[i] = gp_RGBTo16(b[0], b[1], b[2]); + b += 4; + } + +// if (start < _paletteDirtyStart) +// _paletteDirtyStart = start; + +// if (start + num > _paletteDirtyEnd) +// _paletteDirtyEnd = start + num; +} + +void OSystem_GP32::grabPalette(byte *colors, uint start, uint num) { + NP("OSys::grabPalette()"); +} + +void OSystem_GP32::copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h) { + NP("OSys::copyRectToScreen()"); + //Clip the coordinates + if (x < 0) { + w += x; + src -= x; + x = 0; + } + + if (y < 0) { + h += y; + src -= y * pitch; + y = 0; + } + + if (w > _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight - y) { + h = _screenHeight - y; + } + + if (w <= 0 || h <= 0) + return; + + byte *dst = _gameScreen + y * _screenWidth + x; + + if (_screenWidth == pitch && pitch == w) { + memcpy(dst, src, h * w); + } else { + do { + memcpy(dst, src, w); + src += pitch; + dst += _screenWidth; + } while (--h); + } +} + +//TODO: Implement Dirty rect? +void OSystem_GP32::updateScreen() { + uint16 *buffer; + //TODO: adjust shakePos + + // draw gamescreen + buffer = &_tmpScreen[240 - _screenHeight]; + for (int x = 0; x < _screenWidth; x++) { + for (int y = 0; y < _screenHeight; y++) { + *buffer++ = _currentPalette[_gameScreen[((_screenHeight - 1) - y) * _screenWidth + x]]; + } + buffer += 240 - _screenHeight; + } + + // draw overlay + if (_overlayVisible) { + buffer = &_tmpScreen[240 - _overlayHeight]; + for (int x = 0; x < _overlayWidth; x++) { + for (int y = 0; y < _overlayHeight; y++) { + *buffer++ = _overlayBuffer[((_overlayHeight - 1) - y) * _overlayWidth + x]; + } + buffer += 240 - _overlayHeight; + } + } + + // draw mouse + //adjust cursor position + int mX = _mouseX - _mouseHotspotX; + int mY = _mouseY - _mouseHotspotY; + //if (_overlayVisible) + //else + if (_mouseVisible) + for (int y = 0; y < _mouseHeight; y++) { + for (int x = 0; x < _mouseWidth; x++) { + if (mX + x < _screenWidth && mY + y < _screenHeight && mX + x >= 0 && mY + y >= 0) + if (_mouseBuf[y * _mouseWidth + x] != _mouseKeyColor) + gpd_drawPixel16(_tmpScreen, mX + x, mY + y, _currentPalette[_mouseBuf[y * _mouseWidth + x]]); + } + } + + //TODO: draw softkeyboard + //gp_flipScreen(); + //_hwScreen = frameBuffer1; + //_tmpScreen = frameBuffer2; + memcpy(_hwScreen, _tmpScreen, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); +} + +void OSystem_GP32::setShakePos(int shakeOffset) { + NP("OSys::setShakePos()"); +} + +void OSystem_GP32::showOverlay() { + NP("OSys::showOverlay()"); + _overlayVisible = true; + clearOverlay(); +} + +void OSystem_GP32::hideOverlay() { + NP("OSys::hideOverlay()"); + _overlayVisible = false; + clearOverlay(); + _forceFull = true; +} + +// Clear overlay with game screen +//TODO: Optimize? +void OSystem_GP32::clearOverlay() { + NP("OSys::clearOverlay()"); + if (!_overlayVisible) + return; + + uint8 *s = _gameScreen; + OverlayColor *d = _overlayBuffer; + uint8 c; + for (int y = 0; y < _overlayHeight; y++) { + for (int x = 0; x < _overlayWidth; x++) { + c = *s; + *d++ = _currentPalette[c]; + s++; + } + } + + _forceFull = true; +} + +void OSystem_GP32::grabOverlay(OverlayColor *buf, int pitch) { + NP("OSys::grabOverlay()"); + int h = _overlayHeight; + OverlayColor *src = _overlayBuffer; + + do { + memcpy(buf, src, _overlayWidth * sizeof(OverlayColor)); + src += _overlayWidth; + buf += pitch; + } while (--h); +} + +void OSystem_GP32::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { + NP("OSys::copyRectToOverlay()"); + + //Clip the coordinates + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + + if (w > _overlayWidth - x) { + w = _overlayWidth - x; + } + + if (h > _overlayHeight - y) { + h = _overlayHeight - y; + } + + if (w <= 0 || h <= 0) + return; + + + OverlayColor *dst = _overlayBuffer + y * _overlayWidth + x; + if (_overlayWidth == pitch && pitch == w) { + memcpy(dst, buf, h * w * sizeof(OverlayColor)); + } else { + do { + memcpy(dst, buf, w * sizeof(OverlayColor)); + buf += pitch; + dst += _overlayWidth; + } while (--h); + } +} + +int16 OSystem_GP32::getOverlayHeight() { + return getHeight(); +} + +int16 OSystem_GP32::getOverlayWidth() { + return getWidth(); +} + +OverlayColor OSystem_GP32::RGBToColor(uint8 r, uint8 g, uint8 b) { + return gp_RGBTo16(r, g, b); +} + +void OSystem_GP32::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { + gp_16ToRGB(color, &r, &g, &b); +} + +bool OSystem_GP32::showMouse(bool visible) { + NP("OSys::showMouse()"); + if (_mouseVisible == visible) + return visible; + + bool last = _mouseVisible; + _mouseVisible = visible; + + updateScreen(); + + return last; +} + +void OSystem_GP32::warpMouse(int x, int y) { + NP("OSys::warpMouse()"); + //assert(x > 0 && x < _screenWidth); + //assert(y > 0 && y < _screenHeight); + _mouseX = x; + _mouseY = y; +} + +void OSystem_GP32::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { + NP("OSys::setMouseCursor()"); + _mouseWidth = w; + _mouseHeight = h; + + _mouseHotspotX = hotspotX; + _mouseHotspotY = hotspotY; + + _mouseKeyColor = keycolor; + + if (_mouseBuf) + free(_mouseBuf); + + _mouseBuf = (byte *)malloc(w * h); + memcpy(_mouseBuf, buf, w * h); +} + +void OSystem_GP32::handleKbdMouse() { + uint32 curTime = getMillis(); + if (curTime >= _km.last_time + _km.delay_time) { + _km.last_time = curTime; + if (_km.x_down_count == 1) { + _km.x_down_time = curTime; + _km.x_down_count = 2; + } + if (_km.y_down_count == 1) { + _km.y_down_time = curTime; + _km.y_down_count = 2; + } + + if (_km.x_vel || _km.y_vel) { + if (_km.x_down_count) { + if (curTime > _km.x_down_time + _km.delay_time * 12) { + if (_km.x_vel > 0) + _km.x_vel++; + else + _km.x_vel--; + } else if (curTime > _km.x_down_time + _km.delay_time * 8) { + if (_km.x_vel > 0) + _km.x_vel = 5; + else + _km.x_vel = -5; + } + } + if (_km.y_down_count) { + if (curTime > _km.y_down_time + _km.delay_time * 12) { + if (_km.y_vel > 0) + _km.y_vel++; + else + _km.y_vel--; + } else if (curTime > _km.y_down_time + _km.delay_time * 8) { + if (_km.y_vel > 0) + _km.y_vel = 5; + else + _km.y_vel = -5; + } + } + + //GPDEBUG("%d %d - %d %d", _km.x, _km.y, _km.x_vel, _km.y_vel); + _km.x += _km.x_vel; + _km.y += _km.y_vel; + + if (_km.x < 0) { + _km.x = 0; + _km.x_vel = -1; + _km.x_down_count = 1; + } else if (_km.x > _km.x_max) { + _km.x = _km.x_max; + _km.x_vel = 1; + _km.x_down_count = 1; + } + + if (_km.y < 0) { + _km.y = 0; + _km.y_vel = -1; + _km.y_down_count = 1; + } else if (_km.y > _km.y_max) { + _km.y = _km.y_max; + _km.y_vel = 1; + _km.y_down_count = 1; + } + + warpMouse(_km.x, _km.y); + } + } +} + +void OSystem_GP32::fillMouseEvent(Event &event, int x, int y) { + event.mouse.x = x; + event.mouse.y = y; + + // Update the "keyboard mouse" coords + _km.x = x; + _km.y = y; + + // Optionally perform aspect ratio adjusting + //if (_adjustAspectRatio) + // event.mouse.y = aspect2Real(event.mouse.y); +} + +bool OSystem_GP32::pollEvent(Event &event) { + NP("OSys::pollEvent()"); + GP32BtnEvent ev; + + handleKbdMouse(); + + if (!gp_pollButtonEvent(&ev)) + return false; + + switch(ev.type) { + case BUTTON_DOWN: + if (ev.button == GPC_VK_LEFT) { + _km.x_vel = -1; + _km.x_down_count = 1; + } + if (ev.button == GPC_VK_RIGHT) { + _km.x_vel = 1; + _km.x_down_count = 1; + } + if (ev.button == GPC_VK_UP) { + _km.y_vel = -1; + _km.y_down_count = 1; + } + if (ev.button == GPC_VK_DOWN) { + _km.y_vel = 1; + _km.y_down_count = 1; + } + if (ev.button == GPC_VK_START) { // START = menu/enter + event.type = EVENT_KEYDOWN; + if (_overlayVisible) + event.kbd.keycode = event.kbd.ascii = 13; + else + event.kbd.keycode = event.kbd.ascii = 319; + return true; + } + if (ev.button == GPC_VK_SELECT) { // SELECT = pause + event.type = EVENT_KEYDOWN; + event.kbd.keycode = event.kbd.ascii = 32; + return true; + } + if (ev.button == GPC_VK_FL) { + event.type = EVENT_KEYDOWN; + event.kbd.keycode = event.kbd.ascii = '0'; + return true; + } + if (ev.button == GPC_VK_FR) { // R = ESC + event.type = EVENT_KEYDOWN; + event.kbd.keycode = event.kbd.ascii = 27; + return true; + } + if (ev.button == GPC_VK_FA) { + event.type = EVENT_LBUTTONDOWN; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + if (ev.button == GPC_VK_FB) { + event.type = EVENT_RBUTTONDOWN; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + break; + case BUTTON_UP: + if (ev.button == GPC_VK_LEFT) { + if (_km.x_vel < 0) { + _km.x_vel = 0; + _km.x_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + if (ev.button == GPC_VK_RIGHT) { + if (_km.x_vel > 0) { + _km.x_vel = 0; + _km.x_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + if (ev.button == GPC_VK_UP) { + if (_km.y_vel < 0) { + _km.y_vel = 0; + _km.y_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + if (ev.button == GPC_VK_DOWN) { + if (_km.y_vel > 0) { + _km.y_vel = 0; + _km.y_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + + if (ev.button == GPC_VK_START) { + event.type = EVENT_KEYUP; + if (_overlayVisible) + event.kbd.keycode = event.kbd.ascii = 13; + else + event.kbd.keycode = event.kbd.ascii = 319; + return true; + } + if (ev.button == GPC_VK_SELECT) { + event.type = EVENT_KEYUP; + event.kbd.keycode = event.kbd.ascii = 32; + return true; + } + if (ev.button == GPC_VK_FL) { + event.type = EVENT_KEYUP; + event.kbd.keycode = event.kbd.ascii = '0'; + return true; + } + if (ev.button == GPC_VK_FR) { + event.type = EVENT_KEYUP; + event.kbd.keycode = event.kbd.ascii = 27; + return true; + } + if (ev.button == GPC_VK_FA) { + event.type = EVENT_LBUTTONUP; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + if (ev.button == GPC_VK_FB) { + event.type = EVENT_RBUTTONUP; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + break; + default: + error("Unknown Event!"); + } + + if (gp_getButtonPressed(GPC_VK_LEFT) || + gp_getButtonPressed(GPC_VK_RIGHT) || + gp_getButtonPressed(GPC_VK_UP) || + gp_getButtonPressed(GPC_VK_DOWN)) { + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + return true; + } + return false; +} + +uint32 OSystem_GP32::getMillis() { + return GpTickCountGet(); +} + +void OSystem_GP32::delayMillis(uint msecs) { + int startTime = GpTickCountGet(); + while (GpTickCountGet() < startTime + msecs); +} + +// Add a new callback timer +//FIXME: Add to member +int _timerInterval; +int (*_timerCallback)(int); + +static void _timerCallbackVoid() { + //NP("timer running"); + _timerCallback(_timerInterval); //FIXME ?? (*_timercallback)(_timerinterval); +} + +void OSystem_GP32::setTimerCallback(TimerProc callback, int interval) { + NP("OSys::setTimerCallback()"); + + int timerNo = 1; + + if (callback == NULL) { + GpTimerKill(timerNo); + return; + } + + if (GpTimerOptSet(timerNo, interval, 0, _timerCallbackVoid) == GPOS_ERR_ALREADY_USED) { + error("Timer slot is already used"); + } + + _timerInterval = interval; + _timerCallback = callback; + + GpTimerSet(timerNo); +} + +OSystem::MutexRef OSystem_GP32::createMutex() { +// NP("OSys::createMutex()"); + return NULL; +} + +void OSystem_GP32::lockMutex(MutexRef mutex) { +// NP("OSys::lockMutex()"); +} + +void OSystem_GP32::unlockMutex(MutexRef mutex) { +// NP("OSys::unlockMutex()"); +} + +void OSystem_GP32::deleteMutex(MutexRef mutex) { +// NP("OSys::deleteMutex()"); +} + +bool OSystem_GP32::setSoundCallback(SoundProc proc, void *param) { + NP("OSys::setSoundCallback()"); + + GPSOUNDBUF gpSoundBuf; + + ConfMan.setBool("FM_medium_quality", (g_vars.fmQuality == FM_QUALITY_MED)); + ConfMan.setBool("FM_high_quality", (g_vars.fmQuality == FM_QUALITY_HI)); + //ConfMan.set("output_rate", (int)g_vars.sampleRate); + + if (ConfMan.hasKey("output_rate")) + _samplesPerSec = ConfMan.getInt("output_rate"); + + _samplesPerSec = (int)g_vars.sampleRate; //hack + + if (_samplesPerSec == 0) { + return false; + } + + if (_samplesPerSec < 0) + _samplesPerSec = SAMPLES_PER_SEC; + + // Originally, we always used 2048 samples. This loop will produce the + // same result at 22050 Hz, and should hopefully produce something + // sensible for other frequencies. Note that it must be a power of two. + + uint32 samples = 0x8000; + + for (;;) { + if ((1000 * samples) / _samplesPerSec < 100) + break; + samples >>= 1; + } + + switch(_samplesPerSec) { + case 44100: + case 22050: + case 11025: + break; + default: + _samplesPerSec = 11025; + } + + gpSoundBuf.freq = _samplesPerSec; + gpSoundBuf.format = 16; + gpSoundBuf.channels = 2; + gpSoundBuf.samples = samples; + gpSoundBuf.userdata = param; + gpSoundBuf.callback = proc; + gp_soundBufStart(&gpSoundBuf); + + // For Safety... + GPDEBUG("_samplesPerSec = %d, samples = %d", _samplesPerSec, samples); + gp_delay(1000); + return true; +} + +void OSystem_GP32::clearSoundCallback() { + NP("OSys::clearSoundCallback()"); + if (_samplesPerSec != 0) + gp_soundBufStop(); +} + +int OSystem_GP32::getOutputSampleRate() const { + NP("OSys::getOutputSampleRate()"); + return _samplesPerSec; +} + +void OSystem_GP32::quit() { + NP("OSys::quit()"); + clearSoundCallback(); + setTimerCallback(0, 0); + exit(0); +} + +void OSystem_GP32::setWindowCaption(const char *caption) { + NP("OSys::setWindowCaption(%s)", caption); +} + +void OSystem_GP32::displayMessageOnOSD(const char *msg) { + NP("OSys::displayMessageOnOSD(%s)", msg); +} + +OSystem *OSystem_GP32_create() { + NP("OSys::OSystem_GP32_create()"); + return new OSystem_GP32(); +} diff --git a/backends/platform/gp32/gp32_osys.h b/backends/platform/gp32/gp32_osys.h new file mode 100644 index 0000000000..2986263424 --- /dev/null +++ b/backends/platform/gp32/gp32_osys.h @@ -0,0 +1,151 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef GP32_OSYS_H +#define GP32_OSYS_H + +//Standard ScummVM includes. +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "backends/intern.h" + +#include "base/engine.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" +#include "backends/gp32/gp32std_input.h" +#include "backends/gp32/gp32std_sound.h" + +class OSystem_GP32 : public OSystem { +public: + static OSystem *instance(); + +protected: + uint16 _screenWidth, _screenHeight; + uint8 *_gameScreen; + uint16 *_tmpScreen, *_hwScreen; + OverlayColor *_overlayBuffer; + + int _overlayWidth, _overlayHeight; + bool _overlayVisible; + uint32 _shakePos; + + // Keyboard mouse emulation + struct KbdMouse { + int16 x, y, x_vel, y_vel, x_max, y_max, x_down_count, y_down_count; + uint32 last_time, delay_time, x_down_time, y_down_time; + }; + + struct MousePos { + int16 x, y, w, h; + }; + + // mouse + KbdMouse _km; + bool _mouseVisible; + int _mouseX, _mouseY; + int _mouseWidth, _mouseHeight; + int _mouseHotspotX, _mouseHotspotY; + byte _mouseKeyColor; + byte *_mouseBuf; + + bool _adjustAspectRatio; + + /** Force full redraw on next updateScreen */ + bool _forceFull; + + uint16 _currentPalette[256]; +// uint _paletteDirtyStart, _paletteDirtyEnd; + + int32 _samplesPerSec; + +public: + + OSystem_GP32(); + ~OSystem_GP32(); + + bool hasFeature(Feature f); + void setFeatureState(Feature f, bool enable); + bool getFeatureState(Feature f); + const GraphicsMode *getSupportedGraphicsModes() const; + int getDefaultGraphicsMode() const; + bool setGraphicsMode(int mode); + bool setGraphicsMode(const char *name); + int getGraphicsMode() const; + void initSize(uint width, uint height); + int16 getHeight(); + int16 getWidth(); + void setPalette(const byte *colors, uint start, uint num); + void grabPalette(byte *colors, uint start, uint num); + + void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); + void updateScreen(); + void setShakePos(int shakeOffset); + + void showOverlay(); + void hideOverlay(); + void clearOverlay(); + void grabOverlay(OverlayColor *buf, int pitch); + void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); + int16 getOverlayHeight(); + int16 getOverlayWidth(); + + OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); + void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); + + bool showMouse(bool visible); + + void warpMouse(int x, int y); + void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1); + + bool pollEvent(Event &event); + uint32 getMillis(); + void delayMillis(uint msecs); + + void setTimerCallback(TimerProc callback, int interval); + + MutexRef createMutex(void); + void lockMutex(MutexRef mutex); + void unlockMutex(MutexRef mutex); + void deleteMutex(MutexRef mutex); + + bool setSoundCallback(SoundProc proc, void *param); + void clearSoundCallback(); + int getOutputSampleRate() const; + + void quit(); + + void setWindowCaption(const char *caption); + + void displayMessageOnOSD(const char *msg); + + void fillMouseEvent(Event &event, int x, int y); + void handleKbdMouse(); +}; + +#else + #warning GP32_OSYS.H Called more then once. +#endif /* GP32_H */ diff --git a/backends/platform/gp32/gp32std.cpp b/backends/platform/gp32/gp32std.cpp new file mode 100644 index 0000000000..d6befb1367 --- /dev/null +++ b/backends/platform/gp32/gp32std.cpp @@ -0,0 +1,338 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" +//#include "graphics/scaler.h" +#include "common/system.h" +#include "backends/intern.h" + +#include "base/engine.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" +#include "backends/gp32/gp32std_memory.h" + +#define DEBUG_MAX 5 +char debline[DEBUG_MAX][256]; +static int debnext = 0; + +void _dprintf(const char *s, ...) { + int deba, deb; + char buf[1024]; + va_list va; + + va_start(va, s); + vsprintf(buf, s, va); + va_end(va); + + strcpy(debline[debnext++], buf); + + if (debnext == DEBUG_MAX) + debnext = 0; + gp_fillRect(frameBuffer1, 0, 243 - (DEBUG_MAX * 8) - 4, 320, (DEBUG_MAX * 8), 0); + + for (deb = debnext, deba = 0; deb < DEBUG_MAX; deb++, deba++) { + //gp_fillRect(frameBuffer1, 0, (243 - (DEBUG_MAX * 8) - 4) + 8 * deba, 320, 8, 0); + gp_textOut(frameBuffer1, 0, (240 - (DEBUG_MAX * 8) - 4) + 8 * deba, debline[deb], 0xFFFF); + } + for (deb = 0; deb < debnext; deb++, deba++) { + //gp_fillRect(frameBuffer1, 0, (243 - (DEBUG_MAX * 8) - 4) + 8 * deba, 320, 8, 0); + gp_textOut(frameBuffer1, 0, (240 - (DEBUG_MAX * 8) - 4) + 8 * deba, debline[deb], 0xFFFF); + } + +// gp_delay(100); +} + +//////////////////// +//String functions +char *gp_strcpy(char *dst, const char *src) { + char *pDst = dst; + + while (*pDst++ = *src++) + ; + + return dst; +} + +char *gp_strncpy(char *dst, const char *src, size_t count) { + char *start = dst; + + while (count && (*dst++ = *src++)) + count--; + + if (count) + while (--count) + *dst++ = '\0'; + + return start; +} + +char *gp_strcat(char *dst, const char *src) { + char *pDst = dst; + + while (*pDst) + pDst++; + + while (*pDst++ = *src++) + ; + + return dst; + +} + +char *gp_strdup(const char *str) { + char *memory; + + if (!str) + return NULL; + + if (memory = (char *)gp_malloc(strlen(str) + 1)) + return gp_strcpy(memory, str); + + return NULL; +} + +int gp_strcasecmp(const char *dst, const char *src) { + int f, l; + do { + f = tolower((unsigned char)(*(dst++))); + l = tolower((unsigned char)(*(src++))); + } while (f && (f == l)); + + return f - l; +} + +int gp_strncasecmp(const char *dst, const char *src, size_t count) { + int f,l; + + if (count) { + do { + f = tolower((unsigned char)(*(dst++))); + l = tolower((unsigned char)(*(src++))); + } while (--count && f && (f == l)); + return f - l; + } + + return 0; +} + +//FIXME: Handle LONG string +void gp_sprintf(char *str, const char *fmt, ...) { + char s[512]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 512, fmt, marker); + va_end(marker); + + gp_strcpy(str, s); +} + +int gp_printf(const char *fmt, ...) { + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("%s", s); + //gp_delay(100); + return 0; +} + +void gp_delay(uint32 msecs) { + int startTime = GpTickCountGet(); + while (GpTickCountGet() < startTime + msecs); +} + +void gp_clockSpeedChange(int freq, int magic, int div) { + #define rTCFG0 (*(volatile unsigned *)0x15100000) + #define rTCFG1 (*(volatile unsigned *)0x15100004) + #define rTCNTB4 (*(volatile unsigned *)0x1510003c) + unsigned int pclk; + unsigned int prescaler0; + + // Change CPU Speed + GpClockSpeedChange(freq, magic, div); + pclk = GpPClkGet(); + + // Repair SDK timer - it forgets to set prescaler + prescaler0 = (pclk / (8000 * 40)) - 1; + rTCFG0 = (rTCFG0 & 0xFFFFFF00) | prescaler0; + rTCFG1 = 0x30033; + + // Repair GpTickCountGet + rTCNTB4 = pclk / 1600; +} + +void gp_setCpuSpeed(int freq) { + // Default value for 40 mhz + static int CLKDIV = 0x48013; + static int MCLK = 40000000; + static int CLKMODE = 0; + static int HCLK = 40000000; + static int PCLK = 40000000; + + switch (freq) { + // overclocked + case 168: { CLKDIV = 0x14000; MCLK = 168000000; CLKMODE = 3; break; } + case 172: { CLKDIV = 0x23010; MCLK = 172000000; CLKMODE = 3; break; } + case 176: { CLKDIV = 0x24010; MCLK = 176000000; CLKMODE = 3; break; } + case 180: { CLKDIV = 0x16000; MCLK = 180000000; CLKMODE = 3; break; } + case 184: { CLKDIV = 0x26010; MCLK = 184000000; CLKMODE = 3; break; } + case 188: { CLKDIV = 0x27010; MCLK = 188000000; CLKMODE = 3; break; } + case 192: { CLKDIV = 0x18000; MCLK = 192000000; CLKMODE = 3; break; } + case 196: { CLKDIV = 0x29010; MCLK = 196000000; CLKMODE = 3; break; } + case 200: { CLKDIV = 0x2A010; MCLK = 200000000; CLKMODE = 3; break; } + case 204: { CLKDIV = 0x2b010; MCLK = 204000000; CLKMODE = 3; break; } + case 208: { CLKDIV = 0x2c010; MCLK = 208000000; CLKMODE = 3; break; } + case 212: { CLKDIV = 0x2d010; MCLK = 212000000; CLKMODE = 3; break; } + case 216: { CLKDIV = 0x2e010; MCLK = 216000000; CLKMODE = 3; break; } + case 220: { CLKDIV = 0x2f010; MCLK = 220000000; CLKMODE = 3; break; } + case 224: { CLKDIV = 0x30010; MCLK = 224000000; CLKMODE = 3; break; } + case 228: { CLKDIV = 0x1e000; MCLK = 228000000; CLKMODE = 3; break; } + case 232: { CLKDIV = 0x32010; MCLK = 232000000; CLKMODE = 3; break; } + case 236: { CLKDIV = 0x33010; MCLK = 236000000; CLKMODE = 3; break; } + case 240: { CLKDIV = 0x20000; MCLK = 240000000; CLKMODE = 3; break; } + case 244: { CLKDIV = 0x35010; MCLK = 244000000; CLKMODE = 3; break; } + case 248: { CLKDIV = 0x36010; MCLK = 248000000; CLKMODE = 3; break; } + case 252: { CLKDIV = 0x22000; MCLK = 252000000; CLKMODE = 3; break; } + case 256: { CLKDIV = 0x38010; MCLK = 256000000; CLKMODE = 3; break; } + + // normal +// case 166: { CLKDIV = 0x4B011; MCLK = 166000000; CLKMODE = 3; break; } + case 166: { CLKDIV = 0x2f001; MCLK = 165000000; CLKMODE = 3; break; } + case 164: { CLKDIV = 0x4a011; MCLK = 164000000; CLKMODE = 3; break; } + case 160: { CLKDIV = 0x48011; MCLK = 160000000; CLKMODE = 3; break; } + case 156: { CLKDIV = 0x2c001; MCLK = 156000000; CLKMODE = 3; break; } + case 144: { CLKDIV = 0x28001; MCLK = 144000000; CLKMODE = 3; break; } + case 133: { CLKDIV = 0x51021; MCLK = 133500000; CLKMODE = 2; break; } + case 132: { CLKDIV = 0x3a011; MCLK = 132000000; CLKMODE = 3; break; } + case 120: { CLKDIV = 0x24001; MCLK = 120000000; CLKMODE = 2; break; } + case 100: { CLKDIV = 0x2b011; MCLK = 102000000; CLKMODE = 2; break; } + case 66: { CLKDIV = 0x25002; MCLK = 67500000; CLKMODE = 2; break; } + case 50: { CLKDIV = 0x2a012; MCLK = 50000000; CLKMODE = 0; break; } +// case 40: { CLKDIV = 0x48013; MCLK = 40000000; CLKMODE = 0; break; } + case 40: { CLKDIV = 0x48013; MCLK = 40000000; CLKMODE = 1; break; } +// case 33: { CLKDIV = 0x25003; MCLK = 33750000; CLKMODE = 0; break; } + case 33: { CLKDIV = 0x25003; MCLK = 33750000; CLKMODE = 2; break; } + case 22: { CLKDIV = 0x33023; MCLK = 22125000; CLKMODE = 0; break; } + default: + error("Invalid CPU frequency!"); + } + if (CLKMODE == 0) { HCLK = MCLK; PCLK = MCLK; } + if (CLKMODE == 1) { HCLK = MCLK; PCLK = MCLK / 2; } + if (CLKMODE == 2) { HCLK = MCLK / 2; PCLK = MCLK / 2; } + if (CLKMODE == 3) { HCLK = MCLK / 2; PCLK = MCLK / 4; } + + gp_clockSpeedChange(MCLK, CLKDIV, CLKMODE); +} + +void gp_Reset() { + gp_setCpuSpeed(66); + asm volatile("swi #4\n"); +} + +void gp_exit(int code) { + if (!code) { + printf(" ----------------------------------------"); + printf(" Your GP32 is now restarting... "); + printf(" ----------------------------------------"); + printf(""); + + gp_delay(3000); + + GpAppExit(); + } else { + printf("Exit Code %d", code); + while (1); + } +} + +// Debug functions +void GPDEBUG(const char *fmt, ...) { + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("%s", s); +} + +void NP(const char *fmt, ...) { + return; + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("NP:%s", s); + gp_delay(50); +} + +void LP(const char *fmt, ...) { + return; + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("LP:%s", s); + gp_delay(300); +} + +void SP(const char *fmt, ...) { + return; + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("SP:%s", s); + gp_delay(50); +} + +void BP(const char *fmt, ...) { + return; + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + _dprintf("BP:%s", s); + gp_delay(2000); +} diff --git a/backends/platform/gp32/gp32std.h b/backends/platform/gp32/gp32std.h new file mode 100644 index 0000000000..0abe4f0b89 --- /dev/null +++ b/backends/platform/gp32/gp32std.h @@ -0,0 +1,61 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_H +#define __GP32STD_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LCD_WIDTH 320 +#define LCD_HEIGHT 240 + +extern char * gp_strcpy(char *dst, const char *src); +extern char * gp_strncpy(char *dst, const char *src, size_t count); +extern char * gp_strcat(char *dst, const char *src); +extern char * gp_strdup(const char *str); +extern int gp_strcasecmp(const char *dst, const char *src); +extern int gp_strncasecmp(const char *dst, const char *src, size_t count); +extern void gp_sprintf(char *str, const char *fmt, ...); + +extern void gp_setCpuSpeed(int freq); +extern int gp_printf(const char *fmt, ...); +extern void gp_delay(unsigned long msecs); +extern void gp_exit(int code); + +extern void GPDEBUG(const char *fmt, ...); +extern void LP(const char *fmt, ...); +extern void NP(const char *fmt, ...); +extern void SP(const char *fmt, ...); +extern void BP(const char *fmt, ...); + +#endif diff --git a/backends/platform/gp32/gp32std_file.cpp b/backends/platform/gp32/gp32std_file.cpp new file mode 100644 index 0000000000..eb0d71c61d --- /dev/null +++ b/backends/platform/gp32/gp32std_file.cpp @@ -0,0 +1,256 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +#include "stdafx.h" +#include "common/scummsys.h" +//#include "graphics/scaler.h" +#include "common/system.h" +#include "backends/intern.h" + +#include "gp32std.h" +#include "gp32std_file.h" + +FILE *gp_stderr = NULL; +FILE *gp_stdout = NULL; +FILE *gp_stdin = NULL; + +// Cache Idea / Code borrowed from the ps2 port +//#define USE_CACHE + +////////////////// +//File functions + +GPFILE *gp_fopen(const char *fileName, const char *openMode) { + //FIXME: allocation, mode + uint32 mode; + GPFILE *file; + ERR_CODE err; + char tempPath[256]; + + if (!strchr(fileName, '.')) { + sprintf(tempPath, "%s.", fileName); + fileName = tempPath; + } + + file = new GPFILE; + +// NP("%s(\"%s\", \"%s\")", __FUNCTION__, fileName, openMode); + + // FIXME add binary/text support + if (tolower(openMode[0]) == 'r') { + mode = OPEN_R; + GpFileGetSize(fileName, &file->fileSize); + err = GpFileOpen(fileName, mode, &file->handle); + } else if (tolower(openMode[0]) == 'w') { + file->fileSize = 0; + mode = OPEN_W; + err = GpFileCreate(fileName, ALWAYS_CREATE, &file->handle); + } else if (tolower(openMode[0]) == 'a') { + warning("We do not support 'a' file open mode."); + delete file; + return NULL; + } else { + error("wrong file mode"); + } + + if (!file) { + error("%s: cannot create FILE structure", __FUNCTION__); + } + + if (err) { + printf("gp_gopen(): IO error %d", err); + delete file; + return NULL; + } + + file->mode = mode; + file->cachePos = 0; + file->bytesInCache = 0; + + return file; +} + +int gp_fclose(GPFILE *stream) { + if (!stream) { + //warning("closing null file"); + return 1; + } + +/* if (*(uint32 *)((char *)stream - sizeof(uint32)) == 0x4321) { + debug(0, "Double closing", __FUNCTION__); + return 1; + } +*/ + +#ifdef USE_CACHE + if (stream->cachePos && stream->mode == OPEN_W) { + GpFileWrite(stream->handle, (char *)stream->cacheData, stream->cachePos); // flush cache + stream->cachePos = 0; + } +#endif + + ERR_CODE err = GpFileClose(stream->handle); + delete stream; + + return err; +} + +int gp_fseek(GPFILE *stream, long offset, int whence) { + switch (whence) { + case SEEK_SET: + whence = FROM_BEGIN; + break; + case SEEK_CUR: + whence = FROM_CURRENT; + break; + case SEEK_END: + whence = FROM_END; + break; + } + return GpFileSeek(stream->handle, whence, offset, (long *)&stream->filePos); //FIXME? +} + +size_t gp_fread(void *ptr, size_t size, size_t n, GPFILE *stream) { + ulong readcount = 0; + int len = size * n; + +#ifdef USE_CACHE + uint8 *dest = (uint8 *)ptr; + + while (len && (stream->filePos != stream->fileSize)) { + if (stream->cachePos <= filePos && filePos < stream->cachePos + stream->bytesInCache) { + uint32 startPos = (stream->cacheBufOffs + (stream->filePos - stream->cachePos)) % FCACHE_SIZE; + uint32 copyLen = stream->bytesInCache - (stream->filePos - stream->cachePos); + if (copyLen > len) + copyLen = len; + if (startPos + copyLen > FCACHE_SIZE) + copyLen = FCACHE_SIZE - startPos; + + memcpy(dest, cacheData + startPos, copyLen); + + filePos += copyLen; + dest += copyLen; + len -= copyLen; + } else { +#endif + ERR_CODE err = GpFileRead(stream->handle, ptr, len, &readcount); + +#ifdef USE_CACHE + stream->filePos += len; + } + } +#endif + + return readcount / size; //FIXME? +} + +size_t gp_fwrite(const void *ptr, size_t size, size_t n, GPFILE *stream) { + int len = size * n; + + if (!stream) { + //warning("writing to null file"); + return 0; + } + +#ifdef USE_CACHE + if (stream->cachePos + len < FCACHE_SIZE) { + memcpy(stream->cacheData + stream->cachePos, ptr, len); + stream->cachePos += len; + } else { + if (stream->cachePos) { + GpFileWrite(stream->handle, stream->cacheData, stream->cachePos); // flush cache + stream->cachePos = 0; + } + +#endif + ERR_CODE err = GpFileWrite(stream->handle, ptr, len); + if (!err) + return n; + else + return -err; +#ifdef USE_CACHE + } +#endif + return 0; +} + +//FIXME? use standard func +long gp_ftell(GPFILE *stream) { + ulong pos = 0; + ERR_CODE err = GpFileSeek(stream->handle, FROM_CURRENT, 0, (long*)&pos); + return pos; +} + +void gp_clearerr(GPFILE *stream) +{ +} + +int gp_feof(GPFILE *stream) { + return gp_ftell(stream) >= stream->fileSize; +} + +char gp_fgetc(GPFILE *stream) { + char c[1]; + + gp_fread(&c[0], 1, 1, stream); + return c[0]; +} + +char *gp_fgets(char *s, int n, GPFILE *stream) { + int i = 0; + + while (!gp_feof(stream) && i < n) { + gp_fread(&s[i], 1, 1, stream); + if (s[i] == '\n') { + s[i + 1] = 0; + return s; + } + i++; + } + if (gp_feof(stream)) + return NULL; + else + return s; +} + +int gp_fprintf(GPFILE *stream, const char *fmt, ...) { + char s[256]; + va_list marker; + + va_start(marker, fmt); + vsnprintf(s, 256, fmt, marker); + va_end(marker); + + return gp_fwrite(s, 1, strlen(s), stream); +} + +int gp_fflush(GPFILE *stream) { + return 0; +} + +int gp_ferror(GPFILE *stream) { + return 0; +} diff --git a/backends/platform/gp32/gp32std_file.h b/backends/platform/gp32/gp32std_file.h new file mode 100644 index 0000000000..933ae482ff --- /dev/null +++ b/backends/platform/gp32/gp32std_file.h @@ -0,0 +1,60 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_FILE_H +#define __GP32STD_FILE_H + +#define FCACHE_SIZE 8 * 1024 + +typedef struct { + F_HANDLE handle; + unsigned long mode; + unsigned long fileSize; + unsigned long filePos; + unsigned long cachePos; + unsigned long cacheBufOffs; + unsigned long bytesInCache; + unsigned char cacheData[FCACHE_SIZE]; +} GPFILE; + +extern GPFILE *gp_stderr; +extern GPFILE *gp_stdout; +extern GPFILE *gp_stdin; + +extern GPFILE * gp_fopen(const char *filename, const char *mode); +extern int gp_fclose(GPFILE *stream); +extern int gp_fseek(GPFILE *stream, long offset, int whence); +extern size_t gp_fread(void *ptr, size_t size, size_t n, GPFILE *stream); +extern size_t gp_fwrite(const void *ptr, size_t size, size_t n, GPFILE *stream); +extern long gp_ftell(GPFILE *stream); +extern void gp_clearerr(GPFILE *stream); +extern int gp_feof(GPFILE *stream); +extern char gp_fgetc(GPFILE *stream); +extern char * gp_fgets(char *s, int n, GPFILE *stream); +extern int gp_fflush(GPFILE *stream); +extern int gp_ferror(GPFILE *stream); +extern int gp_fprintf(GPFILE *stream, const char *fmt, ...); + +#endif diff --git a/backends/platform/gp32/gp32std_grap.cpp b/backends/platform/gp32/gp32std_grap.cpp new file mode 100644 index 0000000000..04ac81a6a2 --- /dev/null +++ b/backends/platform/gp32/gp32std_grap.cpp @@ -0,0 +1,148 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "backends/intern.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" + +#include "backends/gp32/globals.h" + +GPDRAWSURFACE lcdSurface[2]; + +uint8 flipIndex = 1; + +uint16 *frameBuffer1; +uint16 *frameBuffer2; + +uint8 gammaLUT[256]; +uint8 gammaLUTInv[256]; + +extern const unsigned char fontresEng1[]; +extern const unsigned char fontresKor1[]; + +void gp_putBitmap8x16(uint16 *frameBuffer, int x, int y, byte *lpBitmap, uint16 wColor) { + byte *pBitmap = lpBitmap; + for (int nRow = 0; nRow < 12; nRow ++) { + byte data = *pBitmap++; + for (int nCol = 0; nCol < 7; nCol ++) { + if (data & 0x80) + if (x + nCol >= 0 && y + nRow >= 0 && x + nCol < 320 && y + nRow < 240) + gpd_drawPixel16(frameBuffer, x + nCol, y + nRow, wColor); + + data <<= 1; + } + } +} + +void gp_putEngFont(uint16 *frameBuffer, int x, int y, char c, uint16 wColor) { + byte *pBitmap = (byte *) &fontresEng1[c * 16]; + gp_putBitmap8x16(frameBuffer, x, y, pBitmap, wColor); +} + +void gp_textOut(uint16 *frameBuffer, int x, int y, char* lpszText, uint16 wColor) { + // TODO: Handle korean font + int nPos = x; + char* pszText = lpszText; + + while (*pszText != '\0') { + if (*pszText == '\n') { + nPos = x; + y += 8; + } else { + gp_putEngFont(frameBuffer, nPos, y, *pszText, wColor); + nPos += 7; + } + + pszText++; + } +} + +void gp_fillRect(uint16 *frameBuffer, int16 x, int16 y, int16 w, int16 h, uint16 color) { + uint16 *buffer = &frameBuffer[(240 - (y + h)) + (240 * x)]; + for (int i = 0; i < w; i++) { + for (int j = 0; j < h; j++) { + *buffer++ = color; + } + buffer += 240 - h; + } +} + +void gp_initGammaTable(float value) +{ + for (int i = 0; i < 256; i++) { + if (value == 1.0f) { + gammaLUT[i] = i; + gammaLUTInv[i] = i; + } else { + gammaLUT[i] = (uint8)(pow((double)i / 256, 1 / (double)value) * 256); + gammaLUTInv[i] = (uint8)(pow((double)i / 256, (double)value) * 256); + } + } +} + +uint16 gp_RGBTo16(uint16 r, uint16 g, uint16 b) { + // GP32 16bit color 5551 + if (g_vars.gammaRamp != 10000) { + r = gammaLUT[r]; + g = gammaLUT[g]; + b = gammaLUT[b]; + } + return (((r >> 3) & 0x1F) << 11) | (((g >> 3) & 0x1F) << 6) | ((b >> 3) & 0x1F) << 1; +} + +void gp_16ToRGB(uint16 color, uint8 *r, uint8 *g, uint8 *b) { + *r = ((((color) >> 11) & 0x1F) << 3); + *g = ((((color) >> 6) & 0x1F) << 3); //(((color>>5)&0x3F) << 2); + *b = ((((color) >> 1) & 0x1F) << 3); //((color&0x1F) << 3); + + if (g_vars.gammaRamp != 10000) { + *r = gammaLUTInv[*r]; + *g = gammaLUTInv[*g]; + *b = gammaLUTInv[*b]; + } +} + +void gp_flipScreen() { + uint16 *frameBuffer1_old = frameBuffer1; + uint16 *frameBuffer2_old = frameBuffer2; + + GpSurfaceFlip(&lcdSurface[flipIndex]); + flipIndex = 1 - flipIndex; + frameBuffer1 = frameBuffer2_old; + frameBuffer2 = frameBuffer1_old; +} + +void gp_initFrameBuffer() { + GpLcdSurfaceGet(&lcdSurface[0], 0); + GpLcdSurfaceGet(&lcdSurface[1], 1); + GpSurfaceSet(&lcdSurface[0]); + frameBuffer1 = (uint16 *)lcdSurface[0].ptbuffer; + frameBuffer2 = (uint16 *)lcdSurface[1].ptbuffer; + + memset(frameBuffer1, 0xFF, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); + memset(frameBuffer2, 0xFF, LCD_WIDTH * LCD_HEIGHT * sizeof(uint16)); +} diff --git a/backends/platform/gp32/gp32std_grap.h b/backends/platform/gp32/gp32std_grap.h new file mode 100644 index 0000000000..91f44c952a --- /dev/null +++ b/backends/platform/gp32/gp32std_grap.h @@ -0,0 +1,47 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_GRAP_H +#define __GP32STD_GRAP_H + +extern GPDRAWSURFACE lcdSurface[2]; +extern uint8 flipIndex; + +extern uint16 *frameBuffer1; +extern uint16 *frameBuffer2; + +extern void gp_fillRect(uint16 *frameBuffer, int16 x, int16 y, int16 w, int16 h, uint16 color); +extern uint16 gp_RGBTo16(uint16 r, uint16 g, uint16 b); +extern void gp_16ToRGB(uint16 color, uint8 *r, uint8 *g, uint8 *b); + +extern void gp_textOut(uint16 *frameBuffer, int x, int y, char* lpszText, uint16 wColor); + +extern void gp_initGammaTable(float value); +extern void gp_initFrameBuffer(); +extern void gp_flipScreen(); + +#define gpd_drawPixel16(dst,x,y,color) (dst)[(239 - (y)) + (240 * (x))] = (color) + +#endif diff --git a/backends/platform/gp32/gp32std_input.cpp b/backends/platform/gp32/gp32std_input.cpp new file mode 100644 index 0000000000..99c1329eae --- /dev/null +++ b/backends/platform/gp32/gp32std_input.cpp @@ -0,0 +1,211 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_input.h" + +static uint32 buttonState = 0; +static uint16 buttonPressState = 0; + +#define GET_BUTTON_PRESSED(a) (buttonPressState & (a)) +#define ON_BUTTON_PRESSED(a) (buttonPressState |= (a)) +#define OFF_BUTTON_PRESSED(a) (buttonPressState &= ~(a)) + +#define GET_BUTTON_DOWN(a) (buttonState & (a) << 12) +#define ON_BUTTON_DOWN(a) buttonState |= ((a) << 12) +#define OFF_BUTTON_DOWN(a) buttonState &= ~((a) << 12) + +#define GET_BUTTON_UP(a) (buttonState & (a)) +#define ON_BUTTON_UP(a) buttonState |= (a) +#define OFF_BUTTON_UP(a) buttonState &= ~(a) + +#define rKEY_A 0x4000 +#define rKEY_B 0x2000 +#define rKEY_L 0x1000 +#define rKEY_R 0x8000 +#define rKEY_UP 0x0800 +#define rKEY_DOWN 0x0200 +#define rKEY_LEFT 0x0100 +#define rKEY_RIGHT 0x0400 +#define rKEY_START 0x0040 +#define rKEY_SELECT 0x0080 +#define rPBDAT (*(volatile unsigned *)0x1560000c) +#define rPEDAT (*(volatile unsigned *)0x15600030) + +/**************************************************************** + GP32 Input mappings - Returns Button Pressed. +****************************************************************/ +int gp_trapKey() { + int value = 0; + + unsigned long gpb = rPBDAT; // 0x156 + unsigned long gpe = rPEDAT; + + if ((gpb & rKEY_LEFT) == 0) + value |= GPC_VK_LEFT; + if ((gpb & rKEY_RIGHT) == 0) + value |= GPC_VK_RIGHT; + if ((gpb & rKEY_UP) == 0) + value |= GPC_VK_UP; + if ((gpb & rKEY_DOWN) == 0) + value |= GPC_VK_DOWN; + if ((gpb & rKEY_A) == 0) + value |= GPC_VK_FA; + if ((gpb & rKEY_B) == 0) + value |= GPC_VK_FB; + if ((gpb & rKEY_L) == 0) + value |= GPC_VK_FL; + if ((gpb & rKEY_R) == 0) + value |= GPC_VK_FR; + if ((gpe & rKEY_SELECT) == 0) + value |= GPC_VK_SELECT; + if ((gpe & rKEY_START) == 0) + value |= GPC_VK_START; + + return value; +} + +bool gp_getButtonEvent(uint32 *nKeyUD, uint16 *nKeyP) { +// int nKey = GpKeyGet(); + int nKey = gp_trapKey(); + + const int keyBitMask[10] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200}; + + for (int i = 0; i < 10; i++) { + OFF_BUTTON_DOWN(keyBitMask[i]); + OFF_BUTTON_UP(keyBitMask[i]); + if (nKey & keyBitMask[i]) { + if (!GET_BUTTON_PRESSED(keyBitMask[i])) { +// GPDEBUG("DOWN %d", i); + ON_BUTTON_PRESSED(keyBitMask[i]); + ON_BUTTON_DOWN(keyBitMask[i]); + } + } else { + if (GET_BUTTON_PRESSED(keyBitMask[i])) { +// GPDEBUG("UP %d", i); + OFF_BUTTON_PRESSED(keyBitMask[i]); + ON_BUTTON_UP(keyBitMask[i]); + } + } + } + +// GPDEBUG("%08x %04x", buttonState, buttonPressState); + *nKeyUD = buttonState; + *nKeyP = buttonPressState; + return true; +} + +#define MAX_EVENTS 32 + +struct EventQueue { +protected: + int front, rear; + int numElement; + GP32BtnEvent event[MAX_EVENTS]; + +public: + void push(GP32BtnEvent *ev) { + if ((rear + 1) % MAX_EVENTS == front) { + GPDEBUG("Queue Overflow!"); + return; + } + numElement++; + + event[rear].type = ev->type; + event[rear].button = ev->button; + rear = (rear + 1) % MAX_EVENTS; + } + + bool isEmpty() { + return (numElement == 0); + } + + bool isFull() { + return (numElement == MAX_EVENTS); + } + + bool get(GP32BtnEvent *ev) { + if (front == rear) { + return false; + } + numElement--; + ev->type = event[front].type; + ev->button = event[front].button; + front = (front + 1) % MAX_EVENTS; + return true; + } +}; + +EventQueue eventQueue; + +bool gp_pumpButtonEvent() { + int nKey = gp_trapKey(); + GP32BtnEvent ev; + + const int keyBitMask[10] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200}; + + for (int i = 0; i < 10; i++) { + if (nKey & keyBitMask[i]) { + if (!GET_BUTTON_PRESSED(keyBitMask[i])) { + ON_BUTTON_PRESSED(keyBitMask[i]); + ev.type = BUTTON_DOWN; + ev.button = keyBitMask[i]; + eventQueue.push(&ev); + //ON_BUTTON_DOWN(keyBitMask[i]); + } + } else { + if (GET_BUTTON_PRESSED(keyBitMask[i])) { + OFF_BUTTON_PRESSED(keyBitMask[i]); + ev.type = BUTTON_UP; + ev.button = keyBitMask[i]; + eventQueue.push(&ev); + //ON_BUTTON_UP(keyBitMask[i]); + } + } + } + + return true; +} + +bool gp_pollButtonEvent(GP32BtnEvent *ev) { + gp_pumpButtonEvent(); + + if(eventQueue.isEmpty()) { + return false; + } + + eventQueue.get(ev); +// GPDEBUG("Event poll %d %d", ev->type, ev->button); + + return true; +} + +bool gp_getButtonPressed(uint16 button) +{ + return buttonPressState & button; +} diff --git a/backends/platform/gp32/gp32std_input.h b/backends/platform/gp32/gp32std_input.h new file mode 100644 index 0000000000..c7ab3e3212 --- /dev/null +++ b/backends/platform/gp32/gp32std_input.h @@ -0,0 +1,52 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_INPUT_H +#define __GP32STD_INPUT_H + +#include "stdafx.h" +#include "common/scummsys.h" + +#define BUTTON_DOWN 1 +#define BUTTON_UP 2 + +struct GP32BtnEvent { + uint16 type; + uint16 button; +}; + +extern int gp_trapKey(); + +extern bool gp_getButtonEvent(uint32 *nKeyUD, uint16 *nKeyP); + +#define gpd_getEventDown(a) (((a) >> 12) & 0x0fff) +#define gpd_getEventUp(a) ((a) & 0x0fff) +#define gpd_getEventPressed(a) ((a) & 0x0fff) +#define gpd_getButtonDown(a,button) ((a) & (button) << 12) +#define gpd_getButtonUp(a,button) ((a) & (button)) +#define gpd_getButtonPressed(a,button) ((a) & (button)) + +extern bool gp_pollButtonEvent(GP32BtnEvent *ev); +extern bool gp_getButtonPressed(uint16 button); + +#endif diff --git a/backends/platform/gp32/gp32std_memory.cpp b/backends/platform/gp32/gp32std_memory.cpp new file mode 100644 index 0000000000..422c46b00d --- /dev/null +++ b/backends/platform/gp32/gp32std_memory.cpp @@ -0,0 +1,320 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005/2006 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" +//#include "graphics/scaler.h" +#include "common/system.h" +#include "backends/intern.h" + +#include "base/engine.h" + +#include "backends/gp32/gp32std.h" +#include "backends/gp32/gp32std_grap.h" +#include "backends/gp32/gp32std_memory.h" + +///////////////////// +//Memory management + +#define USER_MEMORY_SIZE (256 * 1024) +#define USER_BLOCK_SIZE 24 +#define NUM_BLOCK (USER_MEMORY_SIZE / USER_BLOCK_SIZE) +// use fixed block size for small allocations +// consumes about 128k for block array +// consumes 256k for user memory + +class MemBlock { +protected: + static byte *userMem; +// static size_t allocSize; +// static MemBlock *head; + static int numBlock; + static int prevBlock; + + // Linked list is slow for this task. :) + static MemBlock *block; + + byte *blockData; + size_t size; + +// MemBlock *next; + + int used; + +public: + static void init(); + static void deinit(); + + static void *addBlock(size_t size); + static void deleteBlock(void *dstBlock); +}; + +byte *MemBlock::userMem = NULL; +//MemBlock *MemBlock::head = NULL; +//size_t MemBlock::allocSize = 0; +int MemBlock::numBlock = 0; +int MemBlock::prevBlock = 0; +MemBlock *MemBlock::block = NULL; + +void MemBlock::init() +{ + userMem = (byte *)gm_malloc(USER_MEMORY_SIZE + USER_BLOCK_SIZE); + block = (MemBlock *)gm_malloc(NUM_BLOCK * sizeof(MemBlock)); + + if (!(userMem && block)) { + //error + } + + memset(userMem, 0, USER_MEMORY_SIZE + USER_BLOCK_SIZE); + memset(block, 0, NUM_BLOCK * sizeof(MemBlock)); +} + +void MemBlock::deinit() +{ + if (!(userMem && block)) { + //error + } + gm_free(userMem); + gm_free(block); + userMem = NULL; + block = NULL; +} + +void *MemBlock::addBlock(size_t size) +{ + int i; + MemBlock *blk = &block[prevBlock]; + + // some optimizaion with loop + for (i = prevBlock; i < NUM_BLOCK; i++) { + if (!blk->used) { + break; + } + blk++; + } + if(i == NUM_BLOCK) { + blk = &block[0]; + for (i = 0; i < prevBlock; i++) { + if (!blk->used) { + break; + } + blk++; + } + if(i == prevBlock) + return NULL; + } + + byte *ptr = userMem + (i * USER_BLOCK_SIZE); + + blk->size = size; + blk->blockData = ptr; + blk->used = 1; + + prevBlock = i; + + return (void *) ptr; +} + +void MemBlock::deleteBlock(void *dstBlock) +{ + uint32 np = (uint32) dstBlock - (uint32) userMem; + + if ((np / USER_BLOCK_SIZE) * USER_BLOCK_SIZE != np) { + gm_free(dstBlock); +// warning("wrong block! (%d / %d)", (np / USER_BLOCK_SIZE) * USER_BLOCK_SIZE, np); + } + int i = np / USER_BLOCK_SIZE; + if (i > NUM_BLOCK) { + gm_free(dstBlock); + return; + } + block[i].used = 0; + +/* + int i = 0; + for (i = 0; i < NUM_BLOCK; i++) { + if (block[i].blockData == dstBlock) + break; + } + if (i == NUM_BLOCK) { + gm_free(dstBlock); //fixme? + //warning("wrong block! %x", (uint32)block - (uint32)userMem); + } else { + GPDEBUG("deleteing block %d", i); + block[i].used = 0; + }*/ +} + +// HACK not to include struct MemBlock +void memBlockInit() +{ + MemBlock::init(); +} + +void memBlockDeinit() +{ + MemBlock::deinit(); +} + +#undef memcpy +#undef memset +void *gp_memcpy(void *dst, const void *src, size_t count) { + return memcpy(dst, src, count); +} + +void *gp_memset(void *dst, int val, size_t count) { + return memset(dst, val, count); +} + +#define MALLOC_MASK 0xAB800000 + +// WE HAVE TO ALIGN MEMORY ADDRESS ON THE ARM PROCESSOR! +#define ALIGNED_SIZE(size) ((size) + (4 - ((size) & 3))) + +void *gp_malloc(size_t size) { + uint32 np; + uint32 *up; + + // size + 8 bytes : stores block size + int allocSize = ALIGNED_SIZE(size) + sizeof(uint32) + sizeof(uint32); + if (allocSize <= USER_BLOCK_SIZE) { + np = (uint32) MemBlock::addBlock(allocSize); + if (!np) { +// GPDEBUG("falling back to gm_malloc"); + np = (uint32) gm_malloc(allocSize); + } + } else { + np = (uint32) gm_malloc(allocSize); + } + + if (np) { + up = (uint32 *)np; + *up = ALIGNED_SIZE(size) | MALLOC_MASK; // mem size: up to 8mb + up = (uint32 *)(np + ALIGNED_SIZE(size) + sizeof(uint32)); + *up = 0x1234; // catches oob acess + return (void *)(np + sizeof(uint32)); + } + + return NULL; +} + +void gp_free(void *block) { + uint32 np; + uint32 *up; + + if (!block) { + return; + } + + np = ((uint32) block) - sizeof(uint32); + up = (uint32 *) np; + if (*up == 0x4321) { + warning("%s: double deallocation", __FUNCTION__); + return; + } + + if (*up & MALLOC_MASK != MALLOC_MASK) { + warning("%s: corrupt block", __FUNCTION__); + return; + } + + int blockSize = (*up & 0x7fffff); + up = (uint32 *)(np + blockSize + sizeof(uint32)); + if (*up != 0x1234) { + warning("gp_free: corrupt block - OOB access", __FUNCTION__); + return; + } + + np = ((uint32) block) - sizeof(uint32); + up = (uint32 *) np; + *up = 0x4321; + + if (blockSize + 8 <= USER_BLOCK_SIZE) { + MemBlock::deleteBlock(up); + } else { + gm_free(up); + } +} + +void *gp_calloc(size_t nitems, size_t size) { + void *p = gp_malloc(nitems * size); //gpcalloc doesnt clear? + + gp_memset(p, 0, nitems * size); + +// if (*(uint8 *)p != 0) +// warning("%s: calloc doesn't clear", __FUNCTION__); //fixme: was error + + return p; +} + +////////////////////////////////////////////////// +// GP32 stuff +////////////////////////////////////////////////// +static char usedMemStr[16]; +int gUsedMem = 1024 * 1024; + +//#define CLEAN_MEMORY_WITH_0xE7 +#define CHECK_USED_MEMORY +//#define CHECK_NEW_TIME +//#define CHECK_NEW_SIZE + +void *operator new(size_t size) { +#if defined(CHECK_NEW_TIME) + static int ftick; + ftick = GpTickCountGet(); +#endif +// printf("BP:operator new(%d)", size); + void *ptr = gp_malloc(size); + +#if defined(CLEAN_MEMORY_WITH_0xE7) + if(ptr != NULL) { + gp_memset(ptr, 0xE7, size); + } +#endif +#if defined(CHECK_USED_MEMORY) + // Check free memory. + gUsedMem = ((int)(ptr) + size) - 0xc000000; + + sprintf(usedMemStr, "%8d", gUsedMem); + gp_fillRect(frameBuffer1, 0, 0, 64, 12, 0); + gp_textOut(frameBuffer1, 0, 0, usedMemStr, 0xfffff); +#endif +#if defined(CHECK_NEW_TIME) + sprintf(usedMemStr, "%2d", GpTickCountGet() - ftick); + gp_fillRect(frameBuffer1, 72, 0, 24, 12, 0); + gp_textOut(frameBuffer1, 72, 0, usedMemStr, 0xfffff); +#endif +#if defined(CHECK_NEW_SIZE) + sprintf(usedMemStr, "%8d", size); + gp_fillRect(frameBuffer1, 108, 0, 64, 12, 0); + gp_textOut(frameBuffer1, 108, 0, usedMemStr, 0xfffff); +#endif + return ptr; +} + +void operator delete(void *ptr) { +// printf("operator delete(%x)", ptr); + gp_free(ptr); +} diff --git a/backends/platform/gp32/gp32std_memory.h b/backends/platform/gp32/gp32std_memory.h new file mode 100644 index 0000000000..ea89b6ecb9 --- /dev/null +++ b/backends/platform/gp32/gp32std_memory.h @@ -0,0 +1,35 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_MEMORY_H +#define __GP32STD_MEMORY_H + +extern void * gp_memcpy(void *dst, const void *src, size_t count); +extern void * gp_memset(void *dst, int val, size_t count); +extern void * gp_malloc(size_t size); +extern void * gp_calloc(size_t nitems, size_t size); +extern void gp_free(void *block); + +#endif diff --git a/backends/platform/gp32/gp32std_sound.cpp b/backends/platform/gp32/gp32std_sound.cpp new file mode 100644 index 0000000000..56335f1c4f --- /dev/null +++ b/backends/platform/gp32/gp32std_sound.cpp @@ -0,0 +1,188 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "stdafx.h" +#include "common/scummsys.h" + +#include "gp32std.h" +#include "gp32std_sound.h" + +#define GP32_TIMER_AUDIO_IDX 0 + +// Global variables +static volatile unsigned int frame = 0; +static volatile unsigned int *soundPos = 0; +static volatile int idx_buf; +static volatile unsigned int shiftVal = 0; +static void *buffer; +static GPSOUNDBUF soundBuf; + +// This routine gets called by the timer interrupt and +// polls the current playing position within the buffer. + +static void soundTimer() { + static int locked = false; + + if (locked) { + return; + } + + locked = true; + + unsigned int sampleshiftVal = soundBuf.samples << shiftVal; + unsigned int t = (((unsigned int)(*soundPos) - (unsigned int)buffer) >> shiftVal) >= soundBuf.samples ? 1 : 0; + if (t != frame) { + unsigned int offs = ((frame == 1) ? (sampleshiftVal) : 0); + //memset((uint8 *)buffer + offs, 0, sampleshiftVal); + soundBuf.callback(soundBuf.userdata, (uint8 *)((unsigned int)buffer + offs), sampleshiftVal); + frame = t; + { + // Play silence + register uint16 *d = (uint16 *)((uint8 *)buffer + offs); // alignment-safe + register uint32 max = (uint32)((uint8 *)buffer + offs + sampleshiftVal); + do { + *d++ ^= 0x8000; // 1 + *d++ ^= 0x8000; // 2 + *d++ ^= 0x8000; // 3 + *d++ ^= 0x8000; // 4 + *d++ ^= 0x8000; // 5 + *d++ ^= 0x8000; // 6 + *d++ ^= 0x8000; // 7 + *d++ ^= 0x8000; // 8 + *d++ ^= 0x8000; // 9 + *d++ ^= 0x8000; // 10 + *d++ ^= 0x8000; // 11 + *d++ ^= 0x8000; // 12 + *d++ ^= 0x8000; // 13 + *d++ ^= 0x8000; // 14 + *d++ ^= 0x8000; // 15 + *d++ ^= 0x8000; // 16 + *d++ ^= 0x8000; // 17 + *d++ ^= 0x8000; // 18 + *d++ ^= 0x8000; // 19 + *d++ ^= 0x8000; // 20 + *d++ ^= 0x8000; // 21 + *d++ ^= 0x8000; // 22 + *d++ ^= 0x8000; // 23 + *d++ ^= 0x8000; // 24 + *d++ ^= 0x8000; // 25 + *d++ ^= 0x8000; // 26 + *d++ ^= 0x8000; // 27 + *d++ ^= 0x8000; // 28 + *d++ ^= 0x8000; // 29 + *d++ ^= 0x8000; // 30 + *d++ ^= 0x8000; // 31 + *d++ ^= 0x8000; // 32 + } while ((uint32)d < max); + } + } + + locked = false; +} + +int gp_soundBufStart(GPSOUNDBUF *sb) { + int bufferSize = 0; + + PCM_SR gpFreq = PCM_S11; + PCM_BIT gpFormat = PCM_16BIT; + + frame = 0; + + // Copy the structure + memcpy(&soundBuf, sb, sizeof(GPSOUNDBUF)); + + // Calculate size of a single sample in bytes + // and a corresponding shift value + shiftVal = 0; + + switch (soundBuf.format) { + case 8: + gpFormat = PCM_8BIT; + break; + case 16: + gpFormat = PCM_16BIT; + shiftVal++; + break; + } + + switch (soundBuf.freq) { + case 11025: + if (soundBuf.channels == 2) { + gpFreq = PCM_S11; + shiftVal++; + } else + gpFreq = PCM_M11; + break; + case 22050: + if (soundBuf.channels == 2) { + gpFreq = PCM_S22; + shiftVal++; + } else + gpFreq = PCM_M22; + break; + case 44100: + if (soundBuf.channels == 2) { + gpFreq = PCM_S44; + shiftVal++; + } else + gpFreq = PCM_M44; + break; + } + + soundBuf.samplesize = 1 << shiftVal; + + // Allocate memory for the playing buffer + bufferSize = soundBuf.samplesize * soundBuf.samples * 2; + buffer = malloc(bufferSize); + + // Clear the buffer + uint16 *tmpBuf = (uint16 *)buffer; + for (int i = 0; i < bufferSize / 2; i++) + tmpBuf[i] = 0x8000; + + // Frequency of the timer interrupt which polls the playing position + // FIXME: This frequency should not be multiplied by 4. + soundBuf.pollfreq = 4 * (2 * soundBuf.freq) / soundBuf.samples; + + // Set timer interrupt + if (GpTimerOptSet(GP32_TIMER_AUDIO_IDX, soundBuf.pollfreq, 0, soundTimer) == GPOS_ERR_ALREADY_USED) { + GPDEBUG(" Timer is already used... kill timer"); + GpTimerKill(GP32_TIMER_AUDIO_IDX); + } + GpTimerSet(GP32_TIMER_AUDIO_IDX); + + GpPcmInit(gpFreq, gpFormat); + GpPcmPlay((unsigned short *)buffer, bufferSize, 1); + GpPcmLock((unsigned short *)buffer, (int *)&idx_buf, (unsigned int *)&soundPos); + + return 0; +} + +void gp_soundBufStop() { + GpTimerKill(GP32_TIMER_AUDIO_IDX); + GpPcmStop(); + GpPcmRemove((unsigned short *)buffer); + free(buffer); +} diff --git a/backends/platform/gp32/gp32std_sound.h b/backends/platform/gp32/gp32std_sound.h new file mode 100644 index 0000000000..bca450620a --- /dev/null +++ b/backends/platform/gp32/gp32std_sound.h @@ -0,0 +1,48 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GP32STD_SOUND_H +#define __GP32STD_SOUND_H + +// GPSOUNDBUF.userdata / Pointer to the buffer which needs to be refilled / Length of the buffer in bytes +typedef void SoundProc(void *param, byte *buf, int len); + +typedef struct TGPSOUNDBUF { + int32 freq; + uint16 format; + uint16 samples; // Buffer length (in samples) + uint16 channels; + uint16 padding; // Fix alignment problem + void *userdata; // Userdata which gets passed to the callback function + SoundProc *callback; // Callback function (just like in SDL) + unsigned int pollfreq; // Frequency of the timer interrupt which polls the playing position + // recommended value: 2*(playingfreq in Hz/GPSOUNDBUF.samples) + unsigned int samplesize; // Size of one sample (8bit mono->1, 16bit stereo->4) - don't touch this +} GPSOUNDBUF; + +int gp_soundBufStart(GPSOUNDBUF *sb); +void gp_soundBufStop(); + +#endif diff --git a/backends/platform/gp32/gp_asmlib.s b/backends/platform/gp32/gp_asmlib.s new file mode 100644 index 0000000000..3d0bfd9a2e --- /dev/null +++ b/backends/platform/gp32/gp_asmlib.s @@ -0,0 +1,426 @@ + .ALIGN +@ .ARM + + .GLOBAL cpu_speed + .GLOBAL mmu_change + .GLOBAL gp_enableIRQ + .GLOBAL gp_disableIRQ + .GLOBAL gp_installSWIIRQ + .GLOBAL gp_removeSWIIRQ + +cpu_speed: + stmdb r13!, {r0-r12,lr} + stmdb sp!, {r0, r1, r2} + mov r0, sp + swi #0x0d + add sp, sp, #12 + ldmia r13!, {r0-r12,lr} + bx lr + nop + +mmu_change: + stmdb r13!, {r0-r12,lr} + swi #0x02 + ldmia r13!, {r0-r12,lr} + bx lr + nop + +gp_enableIRQ: + stmdb r13!, {r0,lr} + mrs r0, CPSR + bic r0, r0, #0x80 + msr CPSR, r0 + ldmia r13!, {r0,pc} + bx lr + +gp_disableIRQ: + stmdb r13!, {r0,lr} + MRS r0, CPSR + ORR r0, r0, #0xc0 + MSR CPSR, r0 + ldmia r13!, {r0,pc} + bx lr + +gp_installSWIIRQ: + stmdb r13!, {r14} + swi 0x9 + ldmia r13!, {pc} + bx lr + +gp_removeSWIIRQ: + stmdb r13!, {r14} + swi 0xa + ldmia r13!, {pc} + bx lr + + +@ ******** ASMFastSolidBlit(unsigned char *src4, unsigned char *dst4, int nbx, int nby, int height2, int trans, int coul) ******** + + .ALIGN + .GLOBAL ASMFastSolidBlit + .TYPE ASMFastSolidBlit, function + .CODE 32 + +@r0 = src4 +@r1 = dst4 +@r2 = nbx +@r3 = nby + +@r4 = height2 +@r5 = trans +@r6 = coul +@r7 = tmp +@r8 = tmpnby +@r9 = tmp2 + +_bx7: + ldrb r8,[r0,+r3] @lecture 1er pixel + subs r7,r3,#1 + bmi _sauty2 + +_sauty2: @ecriture r8 + TEQ r8,r5 + STRNEB r8,[r1,+r7] + SUB r0,r0,r4 + SUB r1,r1,#240 + SUBS r2,r2,#1 + BPL _bx7 + + ldmfd r13!,{r4-r8} + add sp,sp,#8 + bx lr + +ASMFastSolidBlit: + + sub sp,sp,#12 + stmfd r13!,{r4-r9} + ldr r4,[r13,#36] + ldr r5,[r13,#40] + ldr r6,[r13,#44] + +_bx8: + ldrb r9,[r0,+r3] @lecture 1er pixel + subs r8,r3,#1 + bmi _sauty2 + +_by8: + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3 + LDRB r7,[r0,+r8] + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + BMI _sauty3b + LDRB r9,[r0,+r8] + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUBS r8,r8,#1 + + BPL _by8 + +_sauty3: @ecriture pour r9 + TEQ r9,r5 + STRNEB r6,[r1,+r8] + SUB r0,r0,r4 + SUB r1,r1,#240 + SUBS r2,r2,#1 + BPL _bx8 + + ldmfd r13!,{r4-r9} + add sp,sp,#12 + bx lr + +_sauty3b: @ecriture pour r7 + TEQ r7,r5 + STRNEB r6,[r1,+r8] + SUB r0,r0,r4 + SUB r1,r1,#240 + SUBS r2,r2,#1 + BPL _bx8 + + ldmfd r13!,{r4-r9} + add sp,sp,#12 + bx lr + + +@ ******** ASMSaveBitmap(unsigned char *src4, unsigned char *dst, int nbx, int nby, int height2) ******** + + .ALIGN + .GLOBAL ASMSaveBitmap + .TYPE ASMSaveBitmap, function + .CODE 32 + +@r0 = src4 +@r1 = dst + 1 +@r2 = nbx +@r3 = nby + +@r7 = height2 +@r8 = tmp +@r9 = tmpnby +@r10 = dst4 + +ASMSaveBitmap: + + sub sp,sp,#4 + stmfd r13!,{r7-r10} + LDR r7,[r13,#20] + +_bx6: + MLA r10,r2,r7,r1 + MOV r9,r3 + +_by6: + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + BMI _fincol6 + LDRB r8,[r0,+r9] + SUBS r9,r9,#1 + STRB r8,[r10,+r9] + + BPL _by6 + +_fincol6: + SUB r0,r0,#240 + SUBS r2,r2,#1 + BPL _bx6 + + ldmfd r13!,{r7-r10} + add sp,sp,#4 + bx lr + + + .ALIGN + .GLOBAL gp_clearFramebuffer + .TYPE gp_clearFramebuffer, function + .CODE 32 +gp_clearFramebuffer: + @ r0 = framebuffer + @ r1 = color + orr r1,r1,r1,lsl #16 @hi halfword = lo halfword + mov r2,#38400 +clear: str r1,[r0],#4 + subs r2,r2,#1 + bne clear + bx lr + + +@ ******** ASMFastClear(unsigned char *dst4, int nbx, int nby) ******** + + .ALIGN + .GLOBAL ASMFastClear + .TYPE ASMFastClear, function + .CODE 32 + +@r0 = dst4 +@r1 = nbx +@r2 = nby + +@r3 = #0 +@r4 = tmpnby + +@optimis?pour h=20 + +ASMFastClear: + + str r4,[sp,#-4]! + MOV r3,#0 + +_bx9: + MOV r4,r2 + +_by9: + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + BMI _sauty4 + STRB r3,[r0,+r4] + SUBS r4,r4,#1 + + BPL _by9 + +_sauty4: + SUB r0,r0,#240 + SUBS r1,r1,#1 + BPL _bx9 + + ldr r4,[sp],#4 + bx lr diff --git a/backends/platform/gp32/gp_clipped.c b/backends/platform/gp32/gp_clipped.c new file mode 100644 index 0000000000..5ad94e41d4 --- /dev/null +++ b/backends/platform/gp32/gp_clipped.c @@ -0,0 +1,101 @@ +/* ScummVM - Scumm Interpreter + * GP32 Blitting library + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2003,2004,2005 CARTIER Matthieu + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +//Some global variables and macros + +#define screen_width 320 +#define screen_height 240 + +void gp_FastSolidBlit(void *framebuffer, int dx, const int dy, const int width, const int height, const unsigned char *src, const int trans, const int coul) { + int xmin, ymin, xmax, ymax; + int height2 = ( (height + 3) >> 2) << 2; + + if(dx < 0) { + xmin = -dx; + } else xmin = 0; + if( (dx++ + width) > screen_width) { + xmax = screen_width - dx; + } else xmax = width - 1; + if(dy < 0) { + ymax = height + dy - 1; + } else ymax = height - 1; + if( (dy + height) > screen_height) { + ymin = dy + height - screen_height; + } else ymin = 0; + if( (xmin > xmax) || (ymin > ymax) ) return; + + unsigned char *dst4 = framebuffer + (dx + xmax) * screen_height - height - dy + 1 + ymin; + src += (xmax * height2 + ymin); + ASMFastSolidBlit(src, dst4, xmax - xmin, ymax - ymin, height2, trans, coul); +} + +//Copy from framebuffer to dest +void gp_SaveBitmap(void *framebuffer, int dx, const int dy, const int width, const int height, const unsigned char *dest) { //Sur l'icran + int xmin, ymin, xmax, ymax; + int height2 = ( (height + 3) >> 2) << 2; + + if(dx < 0) { + xmin = -dx; + } else xmin = 0; + if( (dx++ + width) > screen_width) { + xmax = screen_width - dx; + } else xmax = width - 1; + if(dy < 0) { + ymax = height + dy - 1; + } else ymax = height - 1; + if( (dy + height) > screen_height) { + ymin = dy + height - screen_height; + } else ymin = 0; + if( (xmin > xmax) || (ymin > ymax) ) return; + + unsigned char *src4 = framebuffer + (dx + xmax) * screen_height - height - dy + ymin; + dest += (xmin * height2 + ymin + 1); + ASMSaveBitmap(src4, dest, xmax - xmin, ymax - ymin, height2); +} + +//Clears area with color #0, should not trigger clicky noise + +void gp_FastClear(void *framebuffer, int dx, int dy, int width, int height) { + int xmin, ymin, xmax, ymax; + + if(dx < 0) { + xmin = -dx; + } else xmin = 0; + if( (dx++ + width) > screen_width) { + xmax = screen_width - dx; + } else xmax = width - 1; + if(dy < 0) { + ymax = height + dy - 1; + } else ymax = height - 1; + if( (dy + height) > screen_height) { + ymin = dy + height - screen_height; + } else ymin = 0; + if( (xmin > xmax) || (ymin > ymax) ) return; + + int decaly = screen_height - height - dy; + + unsigned char *dst4 = framebuffer + (dx + xmax) * screen_height - height - dy + ymin; + ASMFastClear(dst4, xmax - xmin, ymax - ymin); +} diff --git a/backends/platform/gp32/memcpy.S b/backends/platform/gp32/memcpy.S new file mode 100644 index 0000000000..1572831179 --- /dev/null +++ b/backends/platform/gp32/memcpy.S @@ -0,0 +1,498 @@ +/* $NetBSD: memcpy.S,v 1.3 1997/11/22 03:27:12 mark Exp $ */ + +/*- +* Copyright (c) 1997 The NetBSD Foundation, Inc. +* All rights reserved. +* +* This code is derived from software contributed to The NetBSD Foundation +* by Neil A. Carson and Mark Brinicombe +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. All advertising materials mentioning features or use of this software +* must display the following acknowledgement: +* This product includes software developed by the NetBSD +* Foundation, Inc. and its contributors. +* 4. Neither the name of The NetBSD Foundation nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +* ``AS IS\'\' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*/ + +/* This was modified by Jay Monkman to +* save and restore r12. This is necessary for RTEMS. +*/ +/* #include */ + +#define ENTRY(_LABEL) \ + .global _LABEL; _LABEL: +/* +.globl memcpy +memcpy: +*/ +ENTRY(memcpy) +stmfd sp!, {r0, r12, lr} +bl _memcpy +ldmfd sp!, {r0, r12, pc} + + +/* +.globl memove +memmove: +*/ +ENTRY(memmove) +stmfd sp!, {r0, r12, lr} +bl _memcpy +ldmfd sp!, {r0, r12, pc} + + + +/* +* This is one fun bit of code ... +* Some easy listening music is suggested while trying to understand this +* code e.g. Iron Maiden +* +* For anyone attempting to understand it : +* +* The core code is implemented here with simple stubs for memcpy() +* memmove() and bcopy(). +* +* All local labels are prefixed with Lmemcpy_ +* Following the prefix a label starting f is used in the forward copy code +* while a label using b is used in the backwards copy code +* The source and destination addresses determine whether a forward or +* backward copy is performed. +* Separate bits of code are used to deal with the following situations +* for both the forward and backwards copy. +* unaligned source address +* unaligned destination address +* Separate copy routines are used to produce an optimised result for each +* of these cases. +* The copy code will use LDM/STM instructions to copy up to 32 bytes at +* a time where possible. +* +* Note: r12 (aka ip) can be trashed during the function along with +* r0-r3 although r0-r2 have defined uses i.e. src, dest, len through out. +* Additional registers are preserved prior to use i.e. r4, r5 & lr +* +* Apologies for the state of the comments;-) +*/ + + +/* +_memcpy: +*/ +ENTRY(_memcpy) +/* Determine copy direction */ +cmp r1, r0 +bcc Lmemcpy_backwards + +moveq r0, #0 /* Quick abort for len=0 */ +moveq pc, lr + +stmdb sp!, {r0, lr} /* memcpy() returns dest addr */ +subs r2, r2, #4 +blt Lmemcpy_fl4 /* less than 4 bytes */ +ands r12, r0, #3 +bne Lmemcpy_fdestul /* oh unaligned destination addr */ +ands r12, r1, #3 +bne Lmemcpy_fsrcul /* oh unaligned source addr */ + +Lmemcpy_ft8: +/* We have aligned source and destination */ +subs r2, r2, #8 +blt Lmemcpy_fl12 /* less than 12 bytes (4 from above) */ +subs r2, r2, #0x14 +blt Lmemcpy_fl32 /* less than 32 bytes (12 from above) */ +stmdb sp!, {r4} /* borrow r4 */ + +/* blat 32 bytes at a time */ +/* XXX for really big copies perhaps we should use more registers */ +Lmemcpy_floop32: +ldmia r1!, {r3, r4, r12, lr} +stmia r0!, {r3, r4, r12, lr} +ldmia r1!, {r3, r4, r12, lr} +stmia r0!, {r3, r4, r12, lr} +subs r2, r2, #0x20 +bge Lmemcpy_floop32 + +cmn r2, #0x10 +ldmgeia r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */ +stmgeia r0!, {r3, r4, r12, lr} +subge r2, r2, #0x10 +ldmia sp!, {r4} /* return r4 */ + +Lmemcpy_fl32: +adds r2, r2, #0x14 + +/* blat 12 bytes at a time */ +Lmemcpy_floop12: +ldmgeia r1!, {r3, r12, lr} +stmgeia r0!, {r3, r12, lr} +subges r2, r2, #0x0c +bge Lmemcpy_floop12 + +Lmemcpy_fl12: +adds r2, r2, #8 +blt Lmemcpy_fl4 + +subs r2, r2, #4 +ldrlt r3, [r1], #4 +strlt r3, [r0], #4 +ldmgeia r1!, {r3, r12} +stmgeia r0!, {r3, r12} +subge r2, r2, #4 + +Lmemcpy_fl4: +/* less than 4 bytes to go */ +adds r2, r2, #4 +ldmeqia sp!, {r0, pc} /* done */ + +/* copy the crud byte at a time */ +cmp r2, #2 +ldrb r3, [r1], #1 +strb r3, [r0], #1 +ldrgeb r3, [r1], #1 +strgeb r3, [r0], #1 +ldrgtb r3, [r1], #1 +strgtb r3, [r0], #1 +ldmia sp!, {r0, pc} + +/* erg - unaligned destination */ +Lmemcpy_fdestul: +rsb r12, r12, #4 +cmp r12, #2 + +/* align destination with byte copies */ +ldrb r3, [r1], #1 +strb r3, [r0], #1 +ldrgeb r3, [r1], #1 +strgeb r3, [r0], #1 +ldrgtb r3, [r1], #1 +strgtb r3, [r0], #1 +subs r2, r2, r12 +blt Lmemcpy_fl4 /* less the 4 bytes */ + +ands r12, r1, #3 +beq Lmemcpy_ft8 /* we have an aligned source */ + +/* erg - unaligned source */ +/* This is where it gets nasty ... */ +Lmemcpy_fsrcul: +bic r1, r1, #3 +ldr lr, [r1], #4 +cmp r12, #2 +bgt Lmemcpy_fsrcul3 +beq Lmemcpy_fsrcul2 +cmp r2, #0x0c +blt Lmemcpy_fsrcul1loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5} + +Lmemcpy_fsrcul1loop16: +mov r3, lr, lsr #8 +ldmia r1!, {r4, r5, r12, lr} +orr r3, r3, r4, lsl #24 +mov r4, r4, lsr #8 +orr r4, r4, r5, lsl #24 +mov r5, r5, lsr #8 +orr r5, r5, r12, lsl #24 +mov r12, r12, lsr #8 +orr r12, r12, lr, lsl #24 +stmia r0!, {r3-r5, r12} +subs r2, r2, #0x10 +bge Lmemcpy_fsrcul1loop16 +ldmia sp!, {r4, r5} +adds r2, r2, #0x0c +blt Lmemcpy_fsrcul1l4 + +Lmemcpy_fsrcul1loop4: +mov r12, lr, lsr #8 +ldr lr, [r1], #4 +orr r12, r12, lr, lsl #24 +str r12, [r0], #4 +subs r2, r2, #4 +bge Lmemcpy_fsrcul1loop4 + +Lmemcpy_fsrcul1l4: +sub r1, r1, #3 +b Lmemcpy_fl4 + +Lmemcpy_fsrcul2: +cmp r2, #0x0c +blt Lmemcpy_fsrcul2loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5} + +Lmemcpy_fsrcul2loop16: +mov r3, lr, lsr #16 +ldmia r1!, {r4, r5, r12, lr} +orr r3, r3, r4, lsl #16 +mov r4, r4, lsr #16 +orr r4, r4, r5, lsl #16 +mov r5, r5, lsr #16 +orr r5, r5, r12, lsl #16 +mov r12, r12, lsr #16 +orr r12, r12, lr, lsl #16 +stmia r0!, {r3-r5, r12} +subs r2, r2, #0x10 +bge Lmemcpy_fsrcul2loop16 +ldmia sp!, {r4, r5} +adds r2, r2, #0x0c +blt Lmemcpy_fsrcul2l4 + +Lmemcpy_fsrcul2loop4: +mov r12, lr, lsr #16 +ldr lr, [r1], #4 +orr r12, r12, lr, lsl #16 +str r12, [r0], #4 +subs r2, r2, #4 +bge Lmemcpy_fsrcul2loop4 + +Lmemcpy_fsrcul2l4: +sub r1, r1, #2 +b Lmemcpy_fl4 + +Lmemcpy_fsrcul3: +cmp r2, #0x0c +blt Lmemcpy_fsrcul3loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5} + +Lmemcpy_fsrcul3loop16: +mov r3, lr, lsr #24 +ldmia r1!, {r4, r5, r12, lr} +orr r3, r3, r4, lsl #8 +mov r4, r4, lsr #24 +orr r4, r4, r5, lsl #8 +mov r5, r5, lsr #24 +orr r5, r5, r12, lsl #8 +mov r12, r12, lsr #24 +orr r12, r12, lr, lsl #8 +stmia r0!, {r3-r5, r12} +subs r2, r2, #0x10 +bge Lmemcpy_fsrcul3loop16 +ldmia sp!, {r4, r5} +adds r2, r2, #0x0c +blt Lmemcpy_fsrcul3l4 + +Lmemcpy_fsrcul3loop4: +mov r12, lr, lsr #24 +ldr lr, [r1], #4 +orr r12, r12, lr, lsl #8 +str r12, [r0], #4 +subs r2, r2, #4 +bge Lmemcpy_fsrcul3loop4 + +Lmemcpy_fsrcul3l4: +sub r1, r1, #1 +b Lmemcpy_fl4 + +Lmemcpy_backwards: +add r1, r1, r2 +add r0, r0, r2 +subs r2, r2, #4 +blt Lmemcpy_bl4 /* less than 4 bytes */ +ands r12, r0, #3 +bne Lmemcpy_bdestul /* oh unaligned destination addr */ +ands r12, r1, #3 +bne Lmemcpy_bsrcul /* oh unaligned source addr */ + +Lmemcpy_bt8: +/* We have aligned source and destination */ +subs r2, r2, #8 +blt Lmemcpy_bl12 /* less than 12 bytes (4 from above) */ +stmdb sp!, {r4, lr} +subs r2, r2, #0x14 /* less than 32 bytes (12 from above) */ +blt Lmemcpy_bl32 + +/* blat 32 bytes at a time */ +/* XXX for really big copies perhaps we should use more registers */ +Lmemcpy_bloop32: +ldmdb r1!, {r3, r4, r12, lr} +stmdb r0!, {r3, r4, r12, lr} +ldmdb r1!, {r3, r4, r12, lr} +stmdb r0!, {r3, r4, r12, lr} +subs r2, r2, #0x20 +bge Lmemcpy_bloop32 + +Lmemcpy_bl32: +cmn r2, #0x10 +ldmgedb r1!, {r3, r4, r12, lr} /* blat a remaining 16 bytes */ +stmgedb r0!, {r3, r4, r12, lr} +subge r2, r2, #0x10 +adds r2, r2, #0x14 +ldmgedb r1!, {r3, r12, lr} /* blat a remaining 12 bytes */ +stmgedb r0!, {r3, r12, lr} +subge r2, r2, #0x0c +ldmia sp!, {r4, lr} + +Lmemcpy_bl12: +adds r2, r2, #8 +blt Lmemcpy_bl4 +subs r2, r2, #4 +ldrlt r3, [r1, #-4]! +strlt r3, [r0, #-4]! +ldmgedb r1!, {r3, r12} +stmgedb r0!, {r3, r12} +subge r2, r2, #4 + +Lmemcpy_bl4: +/* less than 4 bytes to go */ +adds r2, r2, #4 +moveq pc, lr /* done */ + +/* copy the crud byte at a time */ +cmp r2, #2 +ldrb r3, [r1, #-1]! +strb r3, [r0, #-1]! +ldrgeb r3, [r1, #-1]! +strgeb r3, [r0, #-1]! +ldrgtb r3, [r1, #-1]! +strgtb r3, [r0, #-1]! +mov pc, lr + +/* erg - unaligned destination */ +Lmemcpy_bdestul: +cmp r12, #2 + +/* align destination with byte copies */ +ldrb r3, [r1, #-1]! +strb r3, [r0, #-1]! +ldrgeb r3, [r1, #-1]! +strgeb r3, [r0, #-1]! +ldrgtb r3, [r1, #-1]! +strgtb r3, [r0, #-1]! +subs r2, r2, r12 +blt Lmemcpy_bl4 /* less than 4 bytes to go */ +ands r12, r1, #3 +beq Lmemcpy_bt8 /* we have an aligned source */ + +/* erg - unaligned source */ +/* This is where it gets nasty ... */ +Lmemcpy_bsrcul: +bic r1, r1, #3 +ldr r3, [r1, #0] +cmp r12, #2 +blt Lmemcpy_bsrcul1 +beq Lmemcpy_bsrcul2 +cmp r2, #0x0c +blt Lmemcpy_bsrcul3loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5, lr} + +Lmemcpy_bsrcul3loop16: +mov lr, r3, lsl #8 +ldmdb r1!, {r3-r5, r12} +orr lr, lr, r12, lsr #24 +mov r12, r12, lsl #8 +orr r12, r12, r5, lsr #24 +mov r5, r5, lsl #8 +orr r5, r5, r4, lsr #24 +mov r4, r4, lsl #8 +orr r4, r4, r3, lsr #24 +stmdb r0!, {r4, r5, r12, lr} +subs r2, r2, #0x10 +bge Lmemcpy_bsrcul3loop16 +ldmia sp!, {r4, r5, lr} +adds r2, r2, #0x0c +blt Lmemcpy_bsrcul3l4 + +Lmemcpy_bsrcul3loop4: +mov r12, r3, lsl #8 +ldr r3, [r1, #-4]! +orr r12, r12, r3, lsr #24 +str r12, [r0, #-4]! +subs r2, r2, #4 +bge Lmemcpy_bsrcul3loop4 + +Lmemcpy_bsrcul3l4: +add r1, r1, #3 +b Lmemcpy_bl4 + +Lmemcpy_bsrcul2: +cmp r2, #0x0c +blt Lmemcpy_bsrcul2loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5, lr} + +Lmemcpy_bsrcul2loop16: +mov lr, r3, lsl #16 +ldmdb r1!, {r3-r5, r12} +orr lr, lr, r12, lsr #16 +mov r12, r12, lsl #16 +orr r12, r12, r5, lsr #16 +mov r5, r5, lsl #16 +orr r5, r5, r4, lsr #16 +mov r4, r4, lsl #16 +orr r4, r4, r3, lsr #16 +stmdb r0!, {r4, r5, r12, lr} +subs r2, r2, #0x10 +bge Lmemcpy_bsrcul2loop16 +ldmia sp!, {r4, r5, lr} +adds r2, r2, #0x0c +blt Lmemcpy_bsrcul2l4 + +Lmemcpy_bsrcul2loop4: +mov r12, r3, lsl #16 +ldr r3, [r1, #-4]! +orr r12, r12, r3, lsr #16 +str r12, [r0, #-4]! +subs r2, r2, #4 +bge Lmemcpy_bsrcul2loop4 + +Lmemcpy_bsrcul2l4: +add r1, r1, #2 +b Lmemcpy_bl4 + +Lmemcpy_bsrcul1: +cmp r2, #0x0c +blt Lmemcpy_bsrcul1loop4 +sub r2, r2, #0x0c +stmdb sp!, {r4, r5, lr} + +Lmemcpy_bsrcul1loop32: +mov lr, r3, lsl #24 +ldmdb r1!, {r3-r5, r12} +orr lr, lr, r12, lsr #8 +mov r12, r12, lsl #24 +orr r12, r12, r5, lsr #8 +mov r5, r5, lsl #24 +orr r5, r5, r4, lsr #8 +mov r4, r4, lsl #24 +orr r4, r4, r3, lsr #8 +stmdb r0!, {r4, r5, r12, lr} +subs r2, r2, #0x10 +bge Lmemcpy_bsrcul1loop32 +ldmia sp!, {r4, r5, lr} +adds r2, r2, #0x0c +blt Lmemcpy_bsrcul1l4 + +Lmemcpy_bsrcul1loop4: +mov r12, r3, lsl #24 +ldr r3, [r1, #-4]! +orr r12, r12, r3, lsr #8 +str r12, [r0, #-4]! +subs r2, r2, #4 +bge Lmemcpy_bsrcul1loop4 + +Lmemcpy_bsrcul1l4: +add r1, r1, #1 +b Lmemcpy_bl4 diff --git a/backends/platform/gp32/portdefs.h b/backends/platform/gp32/portdefs.h new file mode 100644 index 0000000000..7269f105e6 --- /dev/null +++ b/backends/platform/gp32/portdefs.h @@ -0,0 +1,117 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef PORTDEFS_H +#define PORTDEFS_H + +#include +#include +#include +#include +#include +#include +#include + +#include "gp32std.h" +#include "gp32std_file.h" +#include "gp32std_memory.h" + +#undef byte + +#undef malloc +#undef calloc +#undef free + +#undef stderr +#undef stdout +#undef stdin + +#undef fopen +#undef fread +#undef fwrite +#undef fclose +#undef ftell +#undef rewind +#undef fseek + +#undef ferror +#undef clearerr + +#undef feof +#undef getc + +#define FILE GPFILE + +#define stderr gp_stderr +#define stdout gp_stdout +#define stdin gp_stdin + +#define fopen gp_fopen +#define fread gp_fread +#define fwrite gp_fwrite +#define fclose gp_fclose +#define fseek gp_fseek +#define ftell gp_ftell +#define ferror gp_ferror +#define clearerr gp_clearerr + +#define feof gp_feof +#define fgets gp_fgets +#define fgetc gp_fgetc +#define getc gp_fgetc + +#define fprintf gp_fprintf +#define fflush gp_fflush + +#define printf gp_printf + +#define exit gp_exit + +#define strcpy gp_strcpy +#define strncpy gp_strncpy +#define strcat gp_strcat +#define strdup gp_strdup +#define sprintf gp_sprintf +#define strcasecmp gp_strcasecmp +#define strncasecmp gp_strncasecmp + +#define memcpy gp_memcpy +#define memset gp_memset +#define malloc gp_malloc +#define calloc gp_calloc //gm_calloc +#define free gp_free + +#define FUNCTION GPDEBUG("FUNC: %s", __FUNCTION__); + +#define DELAY gp_delay(500); + +#define MARK printf("MARK: %s, %s, %d", __FILE__, __FUNCTION__, __LINE__); + +#define assert(e) ((e) ? 0 : (printf("!AS: " #e " (%s, %d)\n", __FILE__, __LINE__))) +#define ASSERT assert + +#define ENDLESSLOOP while (1) + +#endif /* PORTDEFS_H */ diff --git a/backends/platform/gp32/startup.c b/backends/platform/gp32/startup.c new file mode 100644 index 0000000000..b12cf3f077 --- /dev/null +++ b/backends/platform/gp32/startup.c @@ -0,0 +1,122 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002 Ph0x - GP32 Backend + * Copyright (C) 2003/2004 DJWillis - GP32 Backend + * Copyright (C) 2005 Won Star - GP32 Backend + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include +#include + +#include + +#ifdef USE_GP_MEM + #include +#endif + +unsigned int HEAPSTART; +unsigned int HEAPEND; + +void InitializeFont (void); +extern void GpKeyPollingTimeSet (int loop_cnt); +extern void GpMain(void *arg); + +int main (int arg_len, char * arg_v) + { + GM_HEAP_DEF gm_heap_def; + + _gp_sdk_init(); + + // keyboard polling count setting + GpKeyPollingTimeSet (KEYPOLLING_NUM); + + #ifdef USE_GP_MEM + gm_heap_def.heapstart = (void*)(HEAPSTART); + gm_heap_def.heapend = (void *)(HEAPEND & ~3); + gm_heap_init (&gm_heap_def); + + gp_mem_func.malloc = gm_malloc; + gp_mem_func.zimalloc = gm_zi_malloc; + gp_mem_func.calloc = gm_calloc; + gp_mem_func.free = gm_free; + gp_mem_func.availablemem = gm_availablesize; + gp_mem_func.malloc_ex = gm_malloc_ex; + gp_mem_func.free_ex = gm_free_ex; + gp_mem_func.make_mem_partition = gm_make_mem_part; + + gp_str_func.memset = gm_memset; + gp_str_func.memcpy = gm_memcpy; + gp_str_func.strcpy = gm_strcpy; + gp_str_func.strncpy = gm_strncpy; + gp_str_func.strcat = gm_strcat; + gp_str_func.strncat = gm_strncat; + gp_str_func.gpstrlen = gm_lstrlen; + gp_str_func.sprintf = gm_sprintf; + gp_str_func.uppercase = gm_uppercase; + gp_str_func.lowercase = gm_lowercase; + gp_str_func.compare = gm_compare; + gp_str_func.trim_right = gm_trim_right; + #endif /*USE_GP_MEM*/ + + //Font initialize + InitializeFont (); + + GpKernelInitialize (); + + GpKernelStart (); + + GpAppExit (); + while (1) {}; + } + +void InitializeFont (void) + { + BGFONTINFO mInfo; + mInfo.kor_w = KORFONT_W; + mInfo.kor_h = KORFONT_H; + mInfo.eng_w = ENGFONT_W; + mInfo.eng_h = ENGFONT_H; + mInfo.chargap = FONT_CHARGAP; + mInfo.linegap = FONT_LINEGAP; + GpFontInit (&mInfo); + GpFontResSet ((unsigned char*)fontresKor, (unsigned char*)fontresEng); + } + +int GpPredefinedStackGet (H_THREAD th) + { + switch (th) + { + case H_THREAD_GPMAIN: + return GPMAIN_STACK_SIZE; + case H_THREAD_NET: + return NET_STACK_SIZE; + case H_THREAD_TMR0: + case H_THREAD_TMR1: + case H_THREAD_TMR2: + case H_THREAD_TMR3: + return USER_STACK_SIZE; + default: + return 0; + } + } diff --git a/backends/platform/ps2/DmaPipe.cpp b/backends/platform/ps2/DmaPipe.cpp new file mode 100644 index 0000000000..7f3a372234 --- /dev/null +++ b/backends/platform/ps2/DmaPipe.cpp @@ -0,0 +1,301 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +// minimalistic gfx pipe implementation based on Vzzrzzn's GfxPipe. + +#include +#include +#include "DmaPipe.h" +#include "GsDefs.h" + +class SinglePipe { +public: + SinglePipe(uint64 *buf, uint32 size); + uint32 spaceLeft(void); + void flush(void); + void setGifRegListTag(uint8 numRegs, uint64 list); + void setGifLoopTag(uint16 nLoop); + void setReg(uint64 reg, uint64 value); + void setListReg(uint64 value1, uint64 value2); + void appendChain(uint64 dmaTag); + void init(void); + uint64 *_chainHead; +private: + uint64 *_bufPos; + uint16 *_chainSize; + uint64 *_buf; + uint32 _size; +}; + +DmaPipe::DmaPipe(uint32 size) { + size &= ~0x1F; + _buf = (uint64*)memalign(64, size); + _curPipe = 0; + _pipes[0] = new SinglePipe(_buf, size >> 4); + _pipes[1] = new SinglePipe(_buf + (size >> 4), size >> 4); + + // reset DMAC Channel 2 + D2_CHCR = 0; + D2_TADR = 0; + D2_MADR = 0; + D2_ASR1 = 0; + D2_ASR0 = 0; + D_STAT = 0xFF1F; + D_CTRL = 0; + D_PCR = 0; + D_SQWC = 0; + D_RBOR = 0; + D_RBSR = 0; + D_CTRL = 1; + if (!(D_STAT & CIM2)) // channel 2 interrupts enabled? + D_STAT = CIM2; // enable them + if (D_STAT & CIS2) // is there an old interrupt we have to acknowledge? + D_STAT = CIS2; // do so... + SifSetDChain(); +} + +void DmaPipe::uploadTex(uint32 dest, uint16 bufWidth, uint16 destOfsX, uint16 destOfsY, uint8 pixelFmt, const void *src, uint16 width, uint16 height) { + + checkSpace(5); + *(_pipes[_curPipe]->_chainHead) &= 0xffffffff8fffffff; // change last chain tag id, from 'end' to 'cnt' + *(_pipes[_curPipe]->_chainHead) |= (1 << 28); + _pipes[_curPipe]->setGifLoopTag(4); + _pipes[_curPipe]->setReg(GPR_BITBLTBUF, GS_SET_DEST_BLTBUF((dest/256) & 0x3fff, (bufWidth/64) & 0x3f, pixelFmt & 0x3f)); + _pipes[_curPipe]->setReg( GPR_TRXPOS, GS_SET_DEST_TRXPOS(destOfsX, destOfsY)); + _pipes[_curPipe]->setReg( GPR_TRXREG, GS_SET_TRXREG(width, height)); + _pipes[_curPipe]->setReg( GPR_TRXDIR, 0); + + checkSpace(15); + uint32 numq = width * height; + switch (pixelFmt) { + case GS_PSMCT32: + numq = (numq + 3) >> 2; break; + case GS_PSMCT24: + numq = (numq + 2) / 3; break; + case GS_PSMCT16: + case GS_PSMCT16S: + numq = (numq + 7) >> 3; break; + case GS_PSMT8: + case GS_PSMT8H: + numq = (numq + 15) >> 4; break; + case GS_PSMT4HL: + case GS_PSMT4HH: + case GS_PSMT4: + numq = (numq + 31) >> 5; break; + default: + numq = 0; + } + uint64 texSrc = (uint32)src & 0x7fffffff; + while (numq) { + uint64 sendQuads = (numq <= 0x7FF0) ? numq : 0x7FF0; + _pipes[_curPipe]->appendChain((1 << 28) | 1); + _pipes[_curPipe]->appendChain(0x0800000000000000 + sendQuads); // IMAGE mode giftag. Flg = 10b, nloop = currq + _pipes[_curPipe]->appendChain((texSrc << 32) | 0x0000000030000000 | sendQuads); // set up dma tag for image transfer. next = tex addr, id = 11b, qwc = numq + numq -= sendQuads; + texSrc += sendQuads * 16; + } + _pipes[_curPipe]->appendChain(0x0000000070000000); // next dma tag + _pipes[_curPipe]->setGifLoopTag(1); + _pipes[_curPipe]->setReg(GPR_TEXFLUSH, 1); +} + +void DmaPipe::setTex(uint32 tex, uint32 texBufWidth, uint8 texPowW, uint8 texPowH, uint8 texPixFmt, uint32 clut, uint8 csm, uint32 clutBufWidth, uint32 clutPixFmt) { + checkSpace(7); + _pipes[_curPipe]->setGifLoopTag(6); + _pipes[_curPipe]->setReg( GPR_TEXCLUT, 256 / 64); + _pipes[_curPipe]->setReg(GPR_TEXFLUSH, 0); + _pipes[_curPipe]->setReg( GPR_TEXA, GS_SET_TEXA(128, 1, 0)); + _pipes[_curPipe]->setReg( GPR_TEX1_1, GS_SET_TEX1(0, 0, FILTER_LINEAR, FILTER_LINEAR, 0, 0, 0)); + _pipes[_curPipe]->setReg( GPR_TEX0_1, GS_SET_TEX0(tex / 256, texBufWidth / 64, texPixFmt, texPowW, texPowH, 1, 0, clut / 256, clutBufWidth / 64, csm, 0, 1)); + _pipes[_curPipe]->setReg( GPR_CLAMP_1, 0); +} + +void DmaPipe::textureRect(const GsVertex *p1, const GsVertex *p2, const TexVertex *t1, const TexVertex *t2) { + checkSpace(4); + _pipes[_curPipe]->setGifRegListTag( 6, 0xffffffffff535310); + _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_SPRITE, 0, 1, 0, 1, 0, 1, 0, 0), + GS_SET_COLQ(GS_RGBA(0x80, 0x80, 0x80, 0x80))); + _pipes[_curPipe]->setListReg( GS_SET_UV(t1->u, t1->v), + GS_SET_XYZ(p1->x, p1->y, p1->z)); + _pipes[_curPipe]->setListReg( GS_SET_UV(t2->u, t2->v), + GS_SET_XYZ(p2->x, p2->y, p2->z)); +} + +void DmaPipe::textureRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, const TexVertex *t1, const TexVertex *t2, const TexVertex *t3, const TexVertex *t4, uint32 rgba) { + checkSpace(6); + _pipes[_curPipe]->setGifRegListTag(10, 0xffffff5353535310); + + _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_TRIANGLESTRIP, 0, 1, 0, 1, 0, 1, 0, 0), + GS_SET_COLQ(rgba)); + _pipes[_curPipe]->setListReg( GS_SET_UV(t1->u, t1->v), + GS_SET_XYZ(p1->x, p1->y, p1->z)); + _pipes[_curPipe]->setListReg( GS_SET_UV(t2->u, t2->v), + GS_SET_XYZ(p2->x, p2->y, p2->z)); + _pipes[_curPipe]->setListReg( GS_SET_UV(t3->u, t3->v), + GS_SET_XYZ(p3->x, p3->y, p3->z)); + _pipes[_curPipe]->setListReg( GS_SET_UV(t4->u, t4->v), + GS_SET_XYZ(p4->x, p4->y, p4->z)); +} + +void DmaPipe::flatRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, uint32 rgba) { + checkSpace(4); + _pipes[_curPipe]->setGifRegListTag( 6, 0xffffffffff555510); + _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_TRIANGLESTRIP, 0, 0, 0, 0, 0, 0, 0, 0), + GS_SET_COLQ(rgba)); + _pipes[_curPipe]->setListReg( GS_SET_XYZ(p1->x, p1->y, p1->z), + GS_SET_XYZ(p2->x, p2->y, p2->z)); + _pipes[_curPipe]->setListReg( GS_SET_XYZ(p3->x, p3->y, p3->z), + GS_SET_XYZ(p4->x, p4->y, p4->z)); +} + +void DmaPipe::flatRect(const GsVertex *p1, const GsVertex *p2, uint32 rgba) { + checkSpace(3); + _pipes[_curPipe]->setGifRegListTag( 4, 0xffffffffffff5510); + _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_SPRITE, 0, 0, 0, 1, 0, 0, 0, 0), + GS_SET_COLQ(rgba)); + _pipes[_curPipe]->setListReg( GS_SET_XYZ(p1->x, p1->y, p1->z), + GS_SET_XYZ(p2->x, p2->y, p2->z)); +} + +void DmaPipe::setOrigin(uint16 x, uint16 y) { + checkSpace(2); + _pipes[_curPipe]->setGifLoopTag(1); + _pipes[_curPipe]->setReg( GPR_XYOFFSET_1, GS_SET_XYOFFSET(x, y)); +} + +void DmaPipe::setAlphaBlend(AlphaBlendColor a, AlphaBlendColor b, AlphaBlendAlpha c, AlphaBlendColor d, uint8 fix) { + checkSpace(2); + _pipes[_curPipe]->setGifLoopTag(1); + _pipes[_curPipe]->setReg(GPR_ALPHA_1, GS_SET_ALPHA(a, b, c, d, fix)); +} + +void DmaPipe::setConfig(uint8 prModeCont, uint8 dither, uint8 colClamp) { + checkSpace(9); + _pipes[_curPipe]->setGifLoopTag(8); + + // set some defaults + // alpha blending formula: (A-B) * C + D + // set: A = dest pixel, b = 0, C = source alpha, D = source pixel, fix = don't care + + _pipes[_curPipe]->setReg(GPR_ALPHA_1, GS_SET_ALPHA(DEST_COLOR, ZERO_COLOR, SOURCE_ALPHA, SOURCE_COLOR, 0)); + _pipes[_curPipe]->setReg( GPR_PRIM, 0); + _pipes[_curPipe]->setReg( GPR_PABE, 0); // alpha blending off + _pipes[_curPipe]->setReg( GPR_TEST_1, GS_SET_TEST(0, 0, 0, 0, 0, 0, 1, 1)); // ztest off + _pipes[_curPipe]->setReg( GPR_ZBUF_1, (uint64)1 << 32); // zbuffer off + + _pipes[_curPipe]->setReg( GPR_PRMODECONT, prModeCont & 1); + _pipes[_curPipe]->setReg( GPR_DTHE, dither & 1); + _pipes[_curPipe]->setReg( GPR_COLCLAMP, colClamp & 1); +} + +void DmaPipe::setScissorRect(uint64 x1, uint64 y1, uint64 x2, uint64 y2) { + checkSpace(2); + _pipes[_curPipe]->setGifLoopTag(1); + _pipes[_curPipe]->setReg( GPR_SCISSOR_1, GS_SET_SCISSOR(x1, x2, y1, y2)); +} + +void DmaPipe::setDrawBuffer(uint64 base, uint64 width, uint8 pixelFmt, uint64 mask) { + checkSpace(2); + _pipes[_curPipe]->setGifLoopTag(1); + _pipes[_curPipe]->setReg( GPR_FRAME_1, GS_SET_FRAME(base / 8192, width / 64, pixelFmt, mask)); +} + +void DmaPipe::setFinishEvent(void) { + checkSpace(3); + // make GS generate a FINISH interrupt when it's done. + _pipes[_curPipe]->setGifLoopTag(2); + _pipes[_curPipe]->setReg( GPR_FINISH, 1); + _pipes[_curPipe]->setReg( GPR_SIGNAL, 1); +} + +void DmaPipe::checkSpace(uint32 needed) { + if (_pipes[_curPipe]->spaceLeft() < (needed << 1)) + flush(); +} + +void DmaPipe::waitForDma(void) { + while (D2_CHCR & 0x100) {} +} + +void DmaPipe::flush(void) { + waitForDma(); + FlushCache(0); + _pipes[_curPipe]->flush(); + _curPipe ^= 1; + _pipes[_curPipe]->init(); +} + +SinglePipe::SinglePipe(uint64 *buf, uint32 size) { + _buf = buf; + _size = size; + init(); +} + +void SinglePipe::flush(void) { + D2_TADR = (uint32)_buf; + D2_QWC = 0; + D2_CHCR |= 0x185; +} + +void SinglePipe::init(void) { + _buf[0] = 0x0000000070000000; + _buf[1] = 0; + _chainHead = _buf; + _chainSize = (uint16*)_chainHead; + _bufPos = _buf + 2; +} + +uint32 SinglePipe::spaceLeft(void) { + return (_size - (_bufPos - _buf)); +} + +void SinglePipe::appendChain(uint64 dmaTag) { + _chainHead = _bufPos; + _chainHead[0] = dmaTag; + _chainHead[1] = 0; + _chainSize = (uint16*)_chainHead; + _bufPos += 2; +} + +void SinglePipe::setReg(uint64 reg, uint64 value) { + *_bufPos++ = value; + *_bufPos++ = reg; + (*_chainSize)++; +} + +void SinglePipe::setListReg(uint64 value1, uint64 value2) { + *_bufPos++ = value1; + *_bufPos++ = value2; + (*_chainSize)++; +} + +void SinglePipe::setGifRegListTag(uint8 numRegs, uint64 list) { + *_bufPos++ = GIF_SET_TAG(1, 1, 0, 0, 1, 0) | ((uint64)numRegs << 60); + *_bufPos++ = list; + (*_chainSize)++; +} + +void SinglePipe::setGifLoopTag(uint16 nLoop) { + *_bufPos++ = GIF_SET_TAG(0, 1, 0, 0, 0, 1) | nLoop; + *_bufPos++ = 0xfffffffffffffffe; + (*_chainSize)++; +} diff --git a/backends/platform/ps2/DmaPipe.h b/backends/platform/ps2/DmaPipe.h new file mode 100644 index 0000000000..5cbef0d9ff --- /dev/null +++ b/backends/platform/ps2/DmaPipe.h @@ -0,0 +1,67 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +// minimalistic gfx pipe implementation based on Vzzrzzn's GfxPipe. + +#ifndef __DMAPIPE_H__ +#define __DMAPIPE_H__ + +#include "sysdefs.h" +#include "backends/ps2/GsDefs.h" + +class SinglePipe; + +struct GsVertex { + uint16 x, y, z; +}; + +struct TexVertex { + uint16 u, v; +}; + +class DmaPipe { +public: + DmaPipe(uint32 size); + void uploadTex(uint32 dest, uint16 bufWidth, uint16 destOfsX, uint16 destOfsY, uint8 pixelFmt, const void *src, uint16 width, uint16 height); + void setTex(uint32 tex, uint32 texBufWidth, uint8 texPowW, uint8 texPowH, uint8 texPixFmt, uint32 clut, uint8 csm, uint32 clutBufWidth, uint32 clutPixFmt); + void setDrawBuffer(uint64 base, uint64 width, uint8 pixelFmt, uint64 mask); + void textureRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, const TexVertex *t1, const TexVertex *t2, const TexVertex *t3, const TexVertex *t4, uint32 rgba); + void textureRect(const GsVertex *p1, const GsVertex *p2, const TexVertex *t1, const TexVertex *t2); + void flatRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, uint32 rgba); + void flatRect(const GsVertex *p1, const GsVertex *p2, uint32 rgba); + + void setOrigin(uint16 x, uint16 y); + void setConfig(uint8 prModeCont, uint8 dither, uint8 colClamp); + void setScissorRect(uint64 x1, uint64 y1, uint64 x2, uint64 y2); + void setAlphaBlend(AlphaBlendColor a, AlphaBlendColor b, AlphaBlendAlpha c, AlphaBlendColor d, uint8 fix); + void setFinishEvent(void); + void flush(void); + void waitForDma(void); +private: + void checkSpace(uint32 needed); + uint64 *_buf; + uint8 _curPipe; + SinglePipe *_pipes[2]; +}; + +#endif //__DMAPIPE_H__ + diff --git a/backends/platform/ps2/Gs2dScreen.cpp b/backends/platform/ps2/Gs2dScreen.cpp new file mode 100644 index 0000000000..7cf82ae5a0 --- /dev/null +++ b/backends/platform/ps2/Gs2dScreen.cpp @@ -0,0 +1,751 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "Gs2dScreen.h" +#include +#include +#include +#include +#include +#include +#include "DmaPipe.h" +#include "GsDefs.h" +#include "graphics/surface.h" + +extern void *_gp; + +enum Buffers { + SCREEN = 0, + MOUSE, + TEXT, + PRINTF +}; + +#define ANIM_STACK_SIZE (1024 * 32) + +#define DEFAULT_PAL_X 175 +#define DEFAULT_PAL_Y 60 +#define DEFAULT_NTSC_X 165 +#define DEFAULT_NTSC_Y 45 +#define ORG_X 256 +#define ORG_Y 256 +#define ORIGIN_X (ORG_X << 4) +#define ORIGIN_Y (ORG_Y << 4) +#define TEX_POW 10 + +#define SCALE(x) ((x) << 4) + +#define M_SIZE 128 +#define M_POW 7 + +static volatile uint32 g_VblankCmd = 0, g_DmacCmd = 0; +static int g_VblankSema, g_DmacSema, g_AnimSema; +static bool g_RunAnim = false; +static GsVertex kFullScreen[2]; +static TexVertex kMouseTex[2] = { + { SCALE(1), SCALE(1) }, + { SCALE(M_SIZE - 1), SCALE(M_SIZE - 1) } +}; +static TexVertex kPrintTex[2] = { + { SCALE(1), SCALE(1) }, + { SCALE(320), SCALE(200) } +}; + +void sioprintf(const char *zFormat, ...); +void runAnimThread(Gs2dScreen *param); + +int vblankStartHandler(int cause) { + // start of VBlank period + if (g_VblankCmd) { // is there a new image waiting? + GS_DISPFB1 = g_VblankCmd; // show it. + g_VblankCmd = 0; + iSignalSema(g_VblankSema); + } + return 0; +} + +int dmacHandler(int channel) { + if (g_DmacCmd && (channel == 2)) { // GS DMA transfer finished, + g_VblankCmd = g_DmacCmd; // we want to show the image + g_DmacCmd = 0; // when the next vblank occurs + iSignalSema(g_DmacSema); + } + return 0; +} + +int vblankEndHandler(int cause) { + if (g_RunAnim) + iSignalSema(g_AnimSema); + return 0; +} + +void createAnimThread(Gs2dScreen *screen); + +Gs2dScreen::Gs2dScreen(uint16 width, uint16 height, TVMode tvMode) { + + _systemQuit = false; + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + g_VblankSema = CreateSema(&newSema); + g_DmacSema = CreateSema(&newSema); + _screenSema = CreateSema(&newSema); + newSema.init_count = 0; + newSema.max_count = 255; + g_AnimSema = CreateSema(&newSema); + assert((g_VblankSema >= 0) && (g_DmacSema >= 0) && (_screenSema >= 0) && (g_AnimSema >= 0)); + + _vblankStartId = AddIntcHandler(INT_VBLANK_START, vblankStartHandler, 0); + _vblankEndId = AddIntcHandler(INT_VBLANK_END, vblankEndHandler, 0); + _dmacId = AddDmacHandler(2, dmacHandler, 0); + + _dmaPipe = new DmaPipe(0x2000); + + EnableIntc(INT_VBLANK_START); + EnableIntc(INT_VBLANK_END); + EnableDmac(2); + + _width = width; + _height = height; + _pitch = (width + 127) & ~127; + + _screenBuf = (uint8*)memalign(64, _width * _height); + _overlayBuf = (uint16*)memalign(64, _width * _height * 2); + _clut = (uint32*)memalign(64, 256 * 4); + + memset(_screenBuf, 0, _width * _height); + memset(_clut, 0, 256 * sizeof(uint32)); + _clut[1] = GS_RGBA(0xC0, 0xC0, 0xC0, 0); + clearOverlay(); + + if (tvMode == TV_DONT_CARE) { + if (PAL_NTSC_FLAG == 'E') + _videoMode = TV_PAL; + else + _videoMode = TV_NTSC; + } else + _videoMode = tvMode; + + printf("Setting up %s mode\n", (_videoMode == TV_PAL) ? "PAL" : "NTSC"); + + // set screen size, 640x544 for pal, 640x448 for ntsc + _tvWidth = 640; + _tvHeight = ((_videoMode == TV_PAL) ? 544 : 448); + kFullScreen[0].z = kFullScreen[1].z = 0; + kFullScreen[0].x = ORIGIN_X; + kFullScreen[0].y = ORIGIN_Y; + kFullScreen[1].x = SCALE(_tvWidth) + ORIGIN_X; + kFullScreen[1].y = SCALE(_tvHeight) + ORIGIN_Y; + _blitCoords[0] = kFullScreen[0]; + _blitCoords[1] = kFullScreen[1]; + _texCoords[0].u = SCALE(1); + _texCoords[0].v = SCALE(1); + _texCoords[1].u = SCALE(_width); + _texCoords[1].v = SCALE(_height); + + uint32 tvFrameSize = _tvWidth * _tvHeight * 4; // 32 bits per pixel + + // setup frame buffer pointers + _frameBufPtr[0] = 0; + _frameBufPtr[1] = tvFrameSize; + _clutPtrs[SCREEN] = tvFrameSize * 2; + _clutPtrs[MOUSE] = _clutPtrs[SCREEN] + 0x1000; // the cluts in PSMCT32 take up half a memory page each + _clutPtrs[TEXT] = _clutPtrs[SCREEN] + 0x2000; + _texPtrs[SCREEN] = _clutPtrs[SCREEN] + 0x3000; + _texPtrs[TEXT] = 0; // these buffers are stored in the alpha gaps of the frame buffers + _texPtrs[MOUSE] = 128 * 256 * 4; + _texPtrs[PRINTF] = _texPtrs[MOUSE] + M_SIZE * M_SIZE * 4; + + _showOverlay = false; + _showMouse = false; + _mouseScaleX = (_tvWidth << 8) / _width; + _mouseScaleY = (_tvHeight << 8) / _height; + setMouseXy(_width / 2, _height / 2); + _mTraCol = 255; + _shakePos = 0; + + // setup hardware now. + GS_CSR = CSR_RESET; // Reset GS + asm ("sync.p"); + GS_CSR = 0; + GsPutIMR(0x7F00); + + uint16 dispPosX, dispPosY; + + if (_videoMode == TV_PAL) { + SetGsCrt(GS_INTERLACED, 3, 0); + dispPosX = DEFAULT_PAL_X; + dispPosY = DEFAULT_PAL_Y; + } else { + SetGsCrt(GS_INTERLACED, 2, 0); + dispPosX = DEFAULT_NTSC_X; + dispPosY = DEFAULT_NTSC_Y; + } + + asm("di"); + GS_PMODE = GS_SET_PMODE(1, 0, 1, 1, 0, 255); + GS_BGCOLOUR = GS_RGBA(0, 0, 0, 0); + GS_DISPLAY1 = GS_SET_DISPLAY(_tvWidth, _tvHeight, dispPosX, dispPosY); + asm("ei"); + + _curDrawBuf = 0; + + _dmaPipe->setOrigin(ORIGIN_X, ORIGIN_Y); + _dmaPipe->setConfig(1, 0, 1); + _dmaPipe->setScissorRect(0, 0, _tvWidth - 1, _tvHeight - 1); + _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); + _dmaPipe->flush(); + + _clutChanged = _screenChanged = _overlayChanged = true; + + clearPrintfOverlay(); + updateScreen(); + + createAnimTextures(); + + // create anim thread + ee_thread_t animThread, thisThread; + ReferThreadStatus(GetThreadId(), &thisThread); + + _animStack = malloc(ANIM_STACK_SIZE); + animThread.initial_priority = thisThread.current_priority - 3; + animThread.stack = _animStack; + animThread.stack_size = ANIM_STACK_SIZE; + animThread.func = (void *)runAnimThread; + animThread.gp_reg = &_gp; + + _animTid = CreateThread(&animThread); + assert(_animTid >= 0); + StartThread(_animTid, this); +} + +void Gs2dScreen::quit(void) { + _systemQuit = true; + ee_thread_t statAnim; + do { // wait until thread called ExitThread() + SignalSema(g_AnimSema); + ReferThreadStatus(_animTid, &statAnim); + } while (statAnim.status != 0x10); + DeleteThread(_animTid); + free(_animStack); + _dmaPipe->waitForDma(); // wait for dmac and vblank for the last time + while (g_DmacCmd || g_VblankCmd); + + sioprintf("kill handlers"); + DisableIntc(INT_VBLANK_START); + DisableIntc(INT_VBLANK_END); + DisableDmac(2); + RemoveIntcHandler(INT_VBLANK_START, _vblankStartId); + RemoveIntcHandler(INT_VBLANK_END, _vblankEndId); + RemoveDmacHandler(2, _dmacId); + + DeleteSema(g_VblankSema); + DeleteSema(g_DmacSema); + DeleteSema(g_AnimSema); +} + +void Gs2dScreen::createAnimTextures(void) { + uint8 *buf = (uint8*)memalign(64, 16 * 64); + memset(buf, 0, 16 * 64); + uint32 vramDest = _texPtrs[TEXT]; + for (int i = 0; i < 16; i++) { + uint32 *destPos = (uint32*)buf; + for (int ch = 15; ch >= 0; ch--) { + uint32 *src = (uint32*)(_binaryData + ((_binaryPattern[i] >> ch) & 1) * 4 * 14); + for (int line = 0; line < 14; line++) + destPos[line << 4] = src[line]; + destPos++; + } + if (!(i & 1)) + _dmaPipe->uploadTex( vramDest, 128, 0, 0, GS_PSMT4HH, buf, 128, 16); + else { + _dmaPipe->uploadTex( vramDest, 128, 0, 0, GS_PSMT4HL, buf, 128, 16); + vramDest += 128 * 16 * 4; + } + _dmaPipe->flush(); + _dmaPipe->waitForDma(); + } + _dmaPipe->uploadTex(_clutPtrs[TEXT], 64, 0, 0, GS_PSMCT32, _binaryClut, 8, 2); + _dmaPipe->flush(); + free(buf); +} + +void Gs2dScreen::newScreenSize(uint16 width, uint16 height) { + if ((width == _width) && (height == _height)) + return; + + WaitSema(g_DmacSema); + WaitSema(g_VblankSema); + + _dmaPipe->flush(); + _width = width; + _height = height; + _pitch = (width + 127) & ~127; + + // malloc new buffers + free(_screenBuf); + free(_overlayBuf); + _screenBuf = (uint8*)memalign(64, _width * _height); + _overlayBuf = (uint16*)memalign(64, _width * _height * 2); + memset(_screenBuf, 0, _width * height); + memset(_overlayBuf, 0, _width * height * 2); + memset(_clut, 0, 256 * sizeof(uint32)); + + // clear video ram + _dmaPipe->uploadTex(_clutPtrs[MOUSE], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); + _dmaPipe->uploadTex(_clutPtrs[SCREEN], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); + _dmaPipe->uploadTex(_texPtrs[SCREEN], _width, 0, 0, GS_PSMCT16, _overlayBuf, _width, _height); + _dmaPipe->flush(); + _dmaPipe->waitForDma(); + + _clutChanged = _screenChanged = _overlayChanged = false; + + _texCoords[1].u = SCALE(_width); + _texCoords[1].v = SCALE(_height); + _mouseScaleX = (_tvWidth << 8) / _width; + _mouseScaleY = (_tvHeight << 8) / _height; + setMouseXy(_width / 2, _height / 2); + + SignalSema(g_VblankSema); + SignalSema(g_DmacSema); +} + +void Gs2dScreen::copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h) { + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + if (x + w > _width) + w = (int)_width - x; + if (y + h > _height) + h = (int)_height - y; + + if ((w > 0) && (h > 0)) { + WaitSema(g_DmacSema); + uint8 *dest = _screenBuf + y * _width + x; + if ((w == pitch) && (pitch == _width)) + memcpy(dest, buf, w * h); + else + for (int cnt = 0; cnt < h; cnt++) { + memcpy(dest, buf, w); + buf += pitch; + dest += _width; + } + _screenChanged = true; + SignalSema(g_DmacSema); + } +} + +void Gs2dScreen::clearScreen(void) { + WaitSema(g_DmacSema); + memset(_screenBuf, 0, _width * _height); + _screenChanged = true; + SignalSema(g_DmacSema); +} + +void Gs2dScreen::setPalette(const uint32 *pal, uint8 start, uint16 num) { + assert(start + num <= 256); + + WaitSema(g_DmacSema); + for (uint16 cnt = 0; cnt < num; cnt++) { + uint16 dest = start + cnt; + dest = (dest & 0xE7) | ((dest & 0x8) << 1) | ((dest & 0x10) >> 1); // rearrange like the GS expects it + _clut[dest] = pal[cnt] & 0xFFFFFF; + } + _clutChanged = true; + SignalSema(g_DmacSema); +} + +void Gs2dScreen::grabPalette(uint32 *pal, uint8 start, uint16 num) { + assert(start + num <= 256); + for (uint16 cnt = 0; cnt < num; cnt++) { + uint16 src = start + cnt; + src = (src & 0xE7) | ((src & 0x8) << 1) | ((src & 0x10) >> 1); + pal[cnt] = _clut[src]; + } +} + +void Gs2dScreen::grabScreen(Graphics::Surface *surf) { + assert(surf); + WaitSema(g_DmacSema); + surf->create(_width, _height, 1); + memcpy(surf->pixels, _screenBuf, _width * _height); + SignalSema(g_DmacSema); +} + +void Gs2dScreen::uploadToVram(void) { + if (_clutChanged) { + _clutChanged = false; + uint32 tmp = _clut[_mTraCol]; + _clut[_mTraCol] = GS_RGBA(0, 0, 0, 0x80); // this mouse color is transparent + _dmaPipe->uploadTex(_clutPtrs[MOUSE], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); + _dmaPipe->flush(); + _dmaPipe->waitForDma(); + _clut[_mTraCol] = tmp; + + _dmaPipe->uploadTex(_clutPtrs[SCREEN], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); + } + + if (_showOverlay) { + if (_overlayChanged) { + _dmaPipe->uploadTex(_texPtrs[SCREEN], _width, 0, 0, GS_PSMCT16, _overlayBuf, _width, _height); + _overlayChanged = false; + } + } else { + if (_screenChanged) { + _dmaPipe->uploadTex(_texPtrs[SCREEN], _pitch, 0, 0, GS_PSMT8, _screenBuf, _width, _height); + _screenChanged = false; + } + } +} + +extern "C" void _ps2sdk_alloc_lock(void); +extern "C" void _ps2sdk_alloc_unlock(void); + +void Gs2dScreen::updateScreen(void) { + WaitSema(_screenSema); + uploadToVram(); + if (!g_RunAnim) { + _dmaPipe->flatRect(kFullScreen + 0, kFullScreen + 1, GS_RGBA(0, 0, 0, 0)); // clear screen + + if (_showOverlay) { + _dmaPipe->setTex(_texPtrs[SCREEN], _width, TEX_POW, TEX_POW, GS_PSMCT16, 0, 0, 0, 0); + _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, _texCoords + 0, _texCoords + 1); + } else { + _dmaPipe->setTex(_texPtrs[SCREEN], _pitch, TEX_POW, TEX_POW, GS_PSMT8, _clutPtrs[SCREEN], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(_blitCoords + 0, _blitCoords + 1, _texCoords + 0, _texCoords + 1); + } + + if (_showMouse) { + GsVertex mouseCoords[2]; + mouseCoords[0].x = (((_mouseX - _hotSpotX) * _mouseScaleX + 8) >> 4) + ORIGIN_X; + mouseCoords[0].y = (((_mouseY - _hotSpotY) * _mouseScaleY + 8) >> 4) + ORIGIN_Y; + mouseCoords[1].x = mouseCoords[0].x + (((M_SIZE * _mouseScaleX) + 8) >> 4); + mouseCoords[1].y = mouseCoords[0].y + (((M_SIZE * _mouseScaleY) + 8) >> 4); + mouseCoords[0].z = mouseCoords[1].z = 0; + + _dmaPipe->setTex(_texPtrs[MOUSE], M_SIZE, M_POW, M_POW, GS_PSMT8H, _clutPtrs[MOUSE], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(mouseCoords + 0, mouseCoords + 1, kMouseTex + 0, kMouseTex + 1); + } + + _dmaPipe->setTex(_texPtrs[PRINTF], 3 * 128, TEX_POW, TEX_POW, GS_PSMT8H, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, kPrintTex + 0, kPrintTex + 1); + +#if 0 + _ps2sdk_alloc_lock(); + uint32 heapTop = (uint32)ps2_sbrk(0); + _ps2sdk_alloc_unlock(); + if (heapTop != (uint32)-1) { + float yPos = (((float)heapTop) / (32 * 1024 * 1024)) * _tvHeight; + GsVertex bottom = { SCALE(_tvWidth - 40) + ORIGIN_X, SCALE(_tvHeight) + ORIGIN_Y, 0 }; + GsVertex top = { SCALE(_tvWidth) + ORIGIN_X, 0, 0 }; + top.y = SCALE((uint16)(_tvHeight - yPos)) + ORIGIN_Y; + _dmaPipe->flatRect(&bottom, &top, GS_RGBA(0x80, 0, 0, 0x40)); + } +#endif + + WaitSema(g_DmacSema); // wait for dma transfer, if there's one running + WaitSema(g_VblankSema); // wait if there's already an image waiting for vblank + + g_DmacCmd = GS_SET_DISPFB(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24); // put it here for dmac/vblank handler + _dmaPipe->flush(); + _curDrawBuf ^= 1; + _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); + } else + _dmaPipe->flush(); + SignalSema(_screenSema); +} + +void Gs2dScreen::showOverlay(void) { + _showOverlay = true; + clearOverlay(); +} + +void Gs2dScreen::hideOverlay(void) { + _screenChanged = true; + _showOverlay = false; +} + +void Gs2dScreen::setShakePos(int shake) { + _shakePos = (shake * _mouseScaleY) >> 8; + _blitCoords[0].y = SCALE(_shakePos) + ORIGIN_Y; + _blitCoords[1].y = SCALE(_tvHeight + _shakePos) + ORIGIN_Y; +} + +void Gs2dScreen::copyPrintfOverlay(const uint8 *buf) { + assert(!((uint32)buf & 63)); + _dmaPipe->uploadTex(_texPtrs[PRINTF], 3 * 128, 0, 0, GS_PSMT8H, buf, 320, 200); + _dmaPipe->flush(); + _dmaPipe->waitForDma(); +} + +void Gs2dScreen::clearPrintfOverlay(void) { + uint8 *tmpBuf = (uint8*)memalign(64, 320 * 200); + memset(tmpBuf, 4, 320 * 200); + _dmaPipe->uploadTex(_texPtrs[PRINTF], 3 * 128, 0, 0, GS_PSMT8H, tmpBuf, 320, 200); + _dmaPipe->flush(); + _dmaPipe->waitForDma(); + free(tmpBuf); +} + +void Gs2dScreen::copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h) { + WaitSema(g_DmacSema); + _overlayChanged = true; + uint16 *dest = _overlayBuf + y * _width + x; + for (uint32 cnt = 0; cnt < h; cnt++) { + memcpy(dest, buf, w * 2); + dest += _width; + buf += pitch; + } + SignalSema(g_DmacSema); +} + +void Gs2dScreen::clearOverlay(void) { + WaitSema(g_DmacSema); + _overlayChanged = true; + // first convert our clut to 16 bit RGBA for the overlay... + uint16 palette[256]; + for (uint32 cnt = 0; cnt < 256; cnt++) { + uint32 rgba = _clut[(cnt & 0xE7) | ((cnt & 0x8) << 1) | ((cnt & 0x10) >> 1)]; + palette[cnt] = ((rgba >> 3) & 0x1F) | (((rgba >> 11) & 0x1F) << 5) | (((rgba >> 19) & 0x1F) << 10); + } + // now copy the current screen over + for (int cnt = 0; cnt < _width * _height; cnt++) + _overlayBuf[cnt] = palette[_screenBuf[cnt]]; + SignalSema(g_DmacSema); +} + +void Gs2dScreen::grabOverlay(uint16 *buf, uint16 pitch) { + uint16 *src = _overlayBuf; + for (uint32 cnt = 0; cnt < _height; cnt++) { + memcpy(buf, src, _width * 2); + buf += pitch; + src += _width; + } +} + +void Gs2dScreen::setMouseOverlay(const uint8 *buf, uint16 width, uint16 height, uint16 hotSpotX, uint16 hotSpotY, uint8 transpCol) { + assert((width <= M_SIZE) && (height <= M_SIZE)); + + _hotSpotX = hotSpotX; + _hotSpotY = hotSpotY; + if (_mTraCol != transpCol) { + _mTraCol = transpCol; + _clutChanged = true; + } + uint8 *bufCopy = (uint8*)memalign(64, M_SIZE * M_SIZE); // make a copy to align to 64 bytes + memset(bufCopy, _mTraCol, M_SIZE * M_SIZE); + for (int cnt = 0; cnt < height; cnt++) + memcpy(bufCopy + cnt * M_SIZE, buf + cnt * width, width); + + _dmaPipe->uploadTex( _texPtrs[MOUSE], M_SIZE, 0, 0, GS_PSMT8H, bufCopy, M_SIZE, M_SIZE); + _dmaPipe->flush(); + _dmaPipe->waitForDma(); // make sure all data has been transferred when we free bufCopy + free(bufCopy); +} + +void Gs2dScreen::showMouse(bool show) { + _showMouse = show; +} + +void Gs2dScreen::setMouseXy(int16 x, int16 y) { + _mouseX = x; + _mouseY = y; +} + +uint8 Gs2dScreen::tvMode(void) { + return _videoMode; +} + +uint16 Gs2dScreen::getWidth(void) { + return _width; +} + +uint16 Gs2dScreen::getHeight(void) { + return _height; +} + +void Gs2dScreen::wantAnim(bool runIt) { + g_RunAnim = runIt; +} + +#define LINE_SPACE 20 +#define SCRL_TIME 8 +#define V 1000 +#define Z_TRANSL 65 + +void Gs2dScreen::animThread(void) { + // animate zeros and ones while game accesses memory card, etc. + g_RunAnim = false; + float yPos = 0.0; + uint8 texSta = 0; + float scrlSpeed = (_videoMode == TV_PAL) ? (_tvHeight / (SCRL_TIME * 50.0)) : (_tvHeight / (SCRL_TIME * 60.0)); + uint8 texMax = (_tvHeight / LINE_SPACE) + (ORG_Y / LINE_SPACE); + TexVertex texNodes[4] = { + { SCALE(1), SCALE(1) }, { SCALE(1), SCALE(14) }, + { SCALE(128), SCALE(1) }, { SCALE(128), SCALE(14) } + }; + float angleStep = ((2 * PI) / _tvHeight); + + while (!_systemQuit) { + do { + WaitSema(g_AnimSema); + } while ((!_systemQuit) && (!g_RunAnim)); + + if (_systemQuit) + break; + + if (PollSema(_screenSema) > 0) { // make sure no thread is currently drawing + WaitSema(g_DmacSema); // dma transfers have to be finished + WaitSema(g_VblankSema); // wait for image, if there is one... + + // redraw the engine's last frame + _dmaPipe->flatRect(kFullScreen + 0, kFullScreen + 1, GS_RGBA(0, 0, 0, 0)); // clear screen + + if (_showOverlay) { + _dmaPipe->setTex(_texPtrs[SCREEN], _width, TEX_POW, TEX_POW, GS_PSMCT16, 0, 0, 0, 0); + _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, _texCoords + 0, _texCoords + 1); + } else { + _dmaPipe->setTex(_texPtrs[SCREEN], _pitch, TEX_POW, TEX_POW, GS_PSMT8, _clutPtrs[SCREEN], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(_blitCoords + 0, _blitCoords + 1, _texCoords + 0, _texCoords + 1); + } + + _dmaPipe->setTex(_texPtrs[PRINTF], 3 * 128, TEX_POW, TEX_POW, GS_PSMT8H, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, kPrintTex + 0, kPrintTex + 1); + + if (_showMouse) { + GsVertex mouseCoords[2]; + mouseCoords[0].x = (((_mouseX - _hotSpotX) * _mouseScaleX + 8) >> 4) + ORIGIN_X; + mouseCoords[0].y = (((_mouseY - _hotSpotY) * _mouseScaleY + 8) >> 4) + ORIGIN_Y; + mouseCoords[1].x = mouseCoords[0].x + (((M_SIZE * _mouseScaleX) + 8) >> 4); + mouseCoords[1].y = mouseCoords[0].y + (((M_SIZE * _mouseScaleY) + 8) >> 4); + mouseCoords[0].z = mouseCoords[1].z = 0; + + _dmaPipe->setTex(_texPtrs[MOUSE], M_SIZE, M_POW, M_POW, GS_PSMT8H, _clutPtrs[MOUSE], 0, 64, GS_PSMCT32); + _dmaPipe->textureRect(mouseCoords + 0, mouseCoords + 1, kMouseTex + 0, kMouseTex + 1); + } + + _dmaPipe->setAlphaBlend(SOURCE_COLOR, ZERO_COLOR, SOURCE_ALPHA, DEST_COLOR, 0); + yPos -= scrlSpeed; + if (yPos <= -LINE_SPACE) { + yPos += LINE_SPACE; + texSta++; + } + + float drawY = yPos; + + for (int i = 0; i < texMax; i++) { + uint8 texIdx = (texSta + i) & 0xF; + + float x[4] = { -64.0, -64.0, 64.0, 64.0 }; + float y[4]; + y[0] = y[2] = drawY - _tvHeight / 2 - LINE_SPACE / 2; + y[1] = y[3] = y[0] + LINE_SPACE; + float z[4]; + GsVertex nodes[4]; + + float angle = PI / 2 + angleStep * drawY; + float rotSin = sinf(angle); + float rotCos = cosf(angle); + for (int coord = 0; coord < 4; coord++) { + z[coord] = rotCos * x[coord]; + x[coord] = rotSin * x[coord]; + + nodes[coord].z = 0; + nodes[coord].x = (uint16)(((V * x[coord]) / (z[coord] + V + Z_TRANSL)) * 16); + nodes[coord].y = (uint16)(((V * y[coord]) / (z[coord] + V + Z_TRANSL)) * 16); + nodes[coord].x += SCALE(_tvWidth - 80 + ORG_X); + nodes[coord].y += SCALE(_tvHeight / 2 + ORG_Y); + } + + uint32 texPtr = _texPtrs[TEXT] + 128 * 16 * 4 * (texIdx >> 1); + if (texIdx & 1) + _dmaPipe->setTex(texPtr, 128, 7, 4, GS_PSMT4HL, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); + else + _dmaPipe->setTex(texPtr, 128, 7, 4, GS_PSMT4HH, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); + + _dmaPipe->textureRect(nodes + 0, nodes + 1, nodes + 2, nodes + 3, + texNodes + 0, texNodes + 1, texNodes + 2, texNodes + 3, GS_RGBA(0x80, 0x80, 0x80, 0x80)); + + drawY += LINE_SPACE; + } + g_DmacCmd = GS_SET_DISPFB(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24); // put it here for dmac/vblank handler + _dmaPipe->flush(); + _curDrawBuf ^= 1; + _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); + _dmaPipe->setAlphaBlend(DEST_COLOR, ZERO_COLOR, SOURCE_ALPHA, SOURCE_COLOR, 0); + + SignalSema(_screenSema); + } + } + ExitThread(); +} + +void runAnimThread(Gs2dScreen *param) { + param->animThread(); +} + +// data for the animated zeros and ones... +const uint8 Gs2dScreen::_binaryData[4 * 14 * 2] = { + // figure zero + 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x00, 0x31, 0x13, + 0x31, 0x13, 0x20, 0x02, 0x22, 0x02, 0x31, 0x13, 0x33, 0x13, 0x20, 0x02, 0x20, 0x02, + 0x31, 0x33, 0x31, 0x13, 0x20, 0x22, 0x20, 0x02, 0x31, 0x13, 0x31, 0x13, 0x00, 0x22, + 0x22, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, + // figure one + 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x20, 0x02, 0x00, 0x11, 0x33, + 0x13, 0x11, 0x22, 0x22, 0x02, 0x00, 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, 0x02, 0x00, + 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, 0x02, 0x00, 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, + 0x02, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11 +}; + +const uint16 Gs2dScreen::_binaryPattern[16] = { + 0xD992, 0x344B, 0xA592, 0x110D, + 0x9234, 0x2326, 0x5199, 0xC8A6, + 0x4D29, 0x18B0, 0xA5AA, 0x2949, + 0x6DB3, 0xB2AA, 0x64A4, 0x3329 +}; + +const uint32 Gs2dScreen::_binaryClut[16] __attribute__((aligned(64))) = { + GS_RGBA( 0, 0, 0, 0x40), + GS_RGBA( 50, 50, 50, 0x40), + GS_RGBA( 204, 204, 0xFF, 0x40), + GS_RGBA( 140, 140, 0xFF, 0x40), + + GS_RGBA( 0, 0, 0, 0x80), // scrPrintf: transparent + GS_RGBA( 0, 0, 0, 0x20), // scrPrintf: semitransparent + GS_RGBA(0xC0, 0xC0, 0xC0, 0), // scrPrintf: red + GS_RGBA(0x16, 0x16, 0xF0, 0), // scrPrintf: blue + + GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), // unused + GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), + GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), + GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80) +}; + + diff --git a/backends/platform/ps2/Gs2dScreen.h b/backends/platform/ps2/Gs2dScreen.h new file mode 100644 index 0000000000..47438c632c --- /dev/null +++ b/backends/platform/ps2/Gs2dScreen.h @@ -0,0 +1,116 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GS2DSCREEN_H__ +#define __GS2DSCREEN_H__ + +#include "sysdefs.h" +#include "backends/ps2/DmaPipe.h" + +enum TVMode { + TV_DONT_CARE = 0, + TV_PAL, + TV_NTSC +}; + +enum GsInterlace { + GS_NON_INTERLACED = 0, + GS_INTERLACED +}; + + +namespace Graphics { + struct Surface; +} + +class Gs2dScreen { +public: + Gs2dScreen(uint16 width, uint16 height, TVMode tvMode); + ~Gs2dScreen(void); + void newScreenSize(uint16 width, uint16 height); + uint8 tvMode(void); + uint16 getWidth(void); + uint16 getHeight(void); + + void copyPrintfOverlay(const uint8* buf); + void clearPrintfOverlay(void); + void clearScreen(void); + + void copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h); + void setPalette(const uint32 *pal, uint8 start, uint16 num); + void updateScreen(void); + void grabPalette(uint32 *pal, uint8 start, uint16 num); + void grabScreen(Graphics::Surface *surf); + //- overlay routines + void copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h); + void grabOverlay(uint16 *buf, uint16 pitch); + void clearOverlay(void); + void showOverlay(void); + void hideOverlay(void); + //- mouse routines + void setMouseOverlay(const uint8 *buf, uint16 width, uint16 height, uint16 hotSpotX, uint16 hotSpotY, uint8 transpCol); + void showMouse(bool show); + void setMouseXy(int16 x, int16 y); + void setShakePos(int shake); + + void animThread(void); + void wantAnim(bool runIt); + + void quit(void); +private: + void uploadToVram(void); + void createAnimTextures(void); + + DmaPipe *_dmaPipe; + uint8 _videoMode; + uint16 _tvWidth, _tvHeight; + GsVertex _blitCoords[2]; + TexVertex _texCoords[2]; + + uint8 _curDrawBuf; + uint32 _frameBufPtr[2]; // + uint32 _clutPtrs[3]; // vram pointers + uint32 _texPtrs[4]; // + + uint16 _width, _height, _pitch; + int16 _mouseX, _mouseY, _hotSpotX, _hotSpotY; + uint32 _mouseScaleX, _mouseScaleY; + uint8 _mTraCol; + + int _shakePos; + + bool _showMouse, _showOverlay, _screenChanged, _overlayChanged, _clutChanged; + uint16 *_overlayBuf; + uint8 *_screenBuf; + uint32 *_clut; + + int _screenSema; + int _vblankStartId, _vblankEndId, _dmacId, _animTid; + void *_animStack; + volatile bool _systemQuit; + + static const uint32 _binaryClut[16]; + static const uint8 _binaryData[4 * 14 * 2]; + static const uint16 _binaryPattern[16]; +}; + +#endif // __GS2DSCREEN_H__ diff --git a/backends/platform/ps2/GsDefs.h b/backends/platform/ps2/GsDefs.h new file mode 100644 index 0000000000..65dec5e2a6 --- /dev/null +++ b/backends/platform/ps2/GsDefs.h @@ -0,0 +1,226 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __GSDEFS_H__ +#define __GSDEFS_H__ + +#include "sysdefs.h" + +// Gs2dScreen defines: + +#define PAL_NTSC_FLAG (*(volatile uint8*)0x1FC7FF52) + +#define GS_PMODE *((volatile uint64*)0x12000000) +#define GS_CSR *((volatile uint64*)0x12001000) +#define GS_DISPFB1 *((volatile uint64*)0x12000070) +#define GS_DISPLAY1 *((volatile uint64*)0x12000080) +#define GS_BGCOLOUR *((volatile uint64*)0x120000E0) + +enum GS_CSR_FIELDS { + CSR_SIGNAL = 1 << 0, + CSR_FINISH = 1 << 1, + CSR_HSYNC = 1 << 2, + CSR_VSYNC = 1 << 3, + CSR_FLUSH = 1 << 8, + CSR_RESET = 1 << 9 +}; + +#define GS_SET_PMODE(readC1, readC2, alphaSel, alphaOut, alphaBlend, alphaFixed) \ + ((readC1) | ((readC2) << 1) | ((alphaSel) << 5) | ((alphaOut) << 6) | ((alphaBlend) << 7) | ((alphaFixed) << 8)) + +#define GS_SET_DISPLAY(width, height, xpos, ypos) \ + (((uint64)(height - 1) << 44) | ((uint64)0x9FF << 32) | \ + ((((2560 + (width - 1)) / width) - 1)<<23) | \ + (ypos << 12) | (xpos * (2560 / width))) + +#define GS_SET_DISPFB(frameBufPtr, frameBufWidth, psm) \ + (((frameBufPtr) / 8192) | (((frameBufWidth) / 64) << 9) | ((psm) << 15)) + +#define GS_RGBA(r, g, b, a) \ + ((r) | ((g) << 8) | ((b) << 16) | ((a) << 24)) + +//DmaPipe defines: + +enum GsRegs { + GPR_PRIM = 0x00, // Select and configure current drawing primitive + GPR_RGBAQ, // Setup current vertex color + GPR_ST, // ... + GPR_UV, // Specify Vertex Texture Coordinates + GPR_XYZF2, // Set vertex coordinate + GPR_XYZ2, // Set vertex coordinate and 'kick' drawing + GPR_TEX0_1, // Texture Buffer Setup (Context 1) + GPR_TEX0_2, // Texture Buffer Setup (Context 2) + GPR_CLAMP_1, // ... + GPR_CLAMP_2, // ... + GPR_FOG, // ... + + GPR_XYZF3 = 0x0C, // ... + GPR_XYZ3, // ... + + GPR_TEX1_1 = 0x14, // ... + GPR_TEX1_2, // ... + GPR_TEX2_1, // ... + GPR_TEX2_2, // ... + GPR_XYOFFSET_1, // Mapping from Primitive to Window coordinate system (Context 1) + GPR_XYOFFSET_2, // Mapping from Primitive to Window coordinate system (Context 2) + GPR_PRMODECONT, // ... + GPR_PRMODE, // ... + GPR_TEXCLUT, // ... + + GPR_SCANMSK = 0x22, // ... + + GPR_MIPTBP1_1 = 0x34, // ... + GPR_MIPTBP1_2, // ... + GPR_MIPTBP2_1, // ... + GPR_MIPTBP2_2, // ... + + GPR_TEXA = 0x3b, // ... + + GPR_FOGCOL = 0x3d, // ... + + GPR_TEXFLUSH = 0x3f,// Write to this register before using newly loaded texture + GPR_SCISSOR_1, // Setup clipping rectangle (Context 1) + GPR_SCISSOR_2, // Setup clipping rectangle (Context 2) + GPR_ALPHA_1, // Setup Alpha Blending Parameters (Context 1) + GPR_ALPHA_2, // Setup Alpha Blending Parameters (Context 2) + GPR_DIMX, // ... + GPR_DTHE, // ... + GPR_COLCLAMP, // ... + GPR_TEST_1, // ... + GPR_TEST_2, // ... + GPR_PABE, // ... + GPR_FBA_1, // ... + GPR_FBA_2, // ... + GPR_FRAME_1, // Frame buffer settings (Context 1) + GPR_FRAME_2, // Frame buffer settings (Context 2) + GPR_ZBUF_1, // ... + GPR_ZBUF_2, // ... + GPR_BITBLTBUF, // Setup Image Transfer Between EE and GS + GPR_TRXPOS, // Setup Image Transfer Coordinates + GPR_TRXREG, // Setup Image Transfer Size + GPR_TRXDIR, // Set Image Transfer Directon + Start Transfer + GPR_HWREG, + + GPR_SIGNAL = 0x60, + GPR_FINISH, + GPR_LABEL +}; + +enum PrimTypes { + PR_POINT = 0, + PR_LINE, + PR_LINESTRIP, + PR_TRIANGLE, + PR_TRIANGLESTRIP, + PR_TRIANGLEFAN, + PR_SPRITE +}; + +#define GS_PSMCT32 0x00 +#define GS_PSMCT24 0x01 +#define GS_PSMCT16 0x02 +#define GS_PSMCT16S 0x0A +#define GS_PSMT8 0x13 +#define GS_PSMT4 0x14 +#define GS_PSMT4HL 0x24 +#define GS_PSMT4HH 0x2C +#define GS_PSMT8H 0x1B + +/*#define GS_SET_BITBLTBUF(sbp, sbw, spsm, dbp, dbw, dpsm) \ + ((uint64)(sbp) | ((uint64)(sbw) << 16) | \ + ((uint64)(spsm) << 24) | ((uint64)(dbp) << 32) | \ + ((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56))*/ + +#define GS_SET_SRC_BLTBUF(sbp, sbw, spsm) \ + ((sbp) | ((uint64)sbw << 16) | ((uint64)spsm << 24)) + +#define GS_SET_DEST_BLTBUF(dbp, dbw, dpsm) \ + (((uint64)(dbp) << 32) | ((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56)) + +#define GS_SET_SRC_TRXPOS(ssax, ssay) \ + ((ssax) | ((uint64)ssay << 16)) + +#define GS_SET_DEST_TRXPOS(dsax, dsay) \ + (((uint64)(dsax) << 32) | ((uint64)(dsay) << 48)) + +#define GS_SET_TRXREG(rrw, rrh) \ + ((uint64)(rrw) | ((uint64)(rrh) << 32)) + +#define GS_SET_TEXA(ta0, aem, ta1) \ + ((uint64)(ta0) | ((uint64)(aem) << 15) | ((uint64)(ta1) << 32)) + +#define GS_SET_TEX0(tbp, tbw, psm, tw, th, tcc, tfx, cbp, cpsm, csm, csa, cld) \ + ((uint64)(tbp) | ((uint64)(tbw) << 14) | ((uint64)(psm) << 20) | ((uint64)(tw) << 26) | \ + ((uint64)(th) << 30) | ((uint64)(tcc) << 34) | ((uint64)(tfx) << 35) | ((uint64)(cbp) << 37) | \ + ((uint64)(cpsm) << 51) | ((uint64)(csm) << 55) | ((uint64)(csa) << 56) | ((uint64)(cld) << 61)) + +#define GIF_SET_TAG(nloop, eop, pre, prim, flg, nreg) \ + ( (uint64)(nloop) | ((uint64)(eop)<<15) | ((uint64)(pre) << 46) | \ + ((uint64)(prim)<<47) | ((uint64)(flg)<<58) | ((uint64)(nreg)<<60) ) + +#define GS_SET_UV(u, v) ((uint64)(u) | ((uint64)(v) << 16)) + +#define GS_SET_XYZ(x, y, z) \ + ((uint64)(x) | ((uint64)(y) << 16) | ((uint64)(z) << 32)) + +#define GS_SET_XYOFFSET(ofx, ofy) ((uint64)(ofx) | ((uint64)(ofy) << 32)) + +#define GS_SET_SCISSOR(scax0, scax1, scay0, scay1) \ + ( (uint64)(scax0) | ((uint64)(scax1) << 16) | ((uint64)(scay0) << 32) | ((uint64)(scay1) << 48) ) + +#define GS_SET_FRAME(fbp, fbw, psm, fbmask) \ + ( (uint64)(fbp) | (uint64)((uint64)(fbw) << 16) | (uint64)((uint64)(psm) << 24) | (uint64)((uint64)(fbmask) << 32) ) + +#define GS_SET_TEST(ate, atst, aref, afail, date, datm, zte, ztst) \ + ( (uint64)(ate) | ((uint64)(atst) << 1) | ((uint64)(aref) << 4) | ((uint64)(afail) << 12) | \ + ((uint64)(date) << 14) | ((uint64)(datm) << 15) | ((uint64)(zte) << 16) | ((uint64)(ztst) << 17) ) + +#define FILTER_NEAREST 0 +#define FILTER_LINEAR 1 + +#define GS_SET_TEX1(lcm, mxl, mmag, mmin, mtba, l, k) \ + ((uint64)(lcm) | ((uint64)(mxl) << 2) | ((uint64)(mmag) << 5) | ((uint64)(mmin) << 6) | \ + ((uint64)(mtba) << 9) | ((uint64)(l) << 19) | ((uint64)(k) << 32)) + +enum AlphaBlendColor { + SOURCE_COLOR = 0, + DEST_COLOR, + ZERO_COLOR +}; + +enum AlphaBlendAlpha { + SOURCE_ALPHA = 0, + DEST_ALPHA, + FIXED_ALPHA +}; + +#define GS_SET_ALPHA(a, b, c, d, fix) \ + ((uint64)(a) | ((uint64)(b)<<2) | ((uint64)(c)<<4) | ((uint64)(d)<<6) | ((uint64)(fix)<<32)) + +#define GS_SET_PRIM(prim, iip, tme, fge, abe, aa1, fst, ctxt, fix) \ + ((uint64)(prim) | ((uint64)(iip) << 3) | ((uint64)(tme) << 4) | \ + ((uint64)(fge) << 5) | ((uint64)(abe) << 6) | ((uint64)(aa1) << 7) | \ + ((uint64)(fst) << 8) | ((uint64)(ctxt) << 9) | ((uint64)(fix) << 10)) + +#define GS_SET_COLQ(c) (0x3f80000000000000 | c) + +#endif // __GSDEFS_H__ diff --git a/backends/platform/ps2/READ_PS2.TXT b/backends/platform/ps2/READ_PS2.TXT new file mode 100644 index 0000000000..59ba25ce38 --- /dev/null +++ b/backends/platform/ps2/READ_PS2.TXT @@ -0,0 +1,82 @@ +ScummVM-PS2 0.8.2 Readme +======================== + +You need a PlayStation 2 with a modchip of your choice in order to run ScummVM. + +ScummVM expects the game data on CD-R/DVD-R, on the Harddisk or on a USB mass + storage device. + + It tries to mount the HDD partition hdd0:+ScummVM on startup and basically + treats it in the same way as the DVD drive. + Creating the partition and putting the datafiles there is up to you. + + Not all USB mass storage devices are supported, but the most common ones should + work. If you attach a device and it gets recognized, it will show up together + with the CD/DVD drive and HDD in the "Add Game" dialog. + + Most USB Mice and Keyboards should work, too. I have a Logitech MX500 mouse that + doesn't work, all the other devices I tried worked fine. + + +Creating a CD-R using CD-Tool +============================= + +Copy any games you want on the CD over into the directory where you extracted + the ZIP file. Don't copy any files directly into the directory of the + ScummVM.ELF, those files are ignored. Instead, have each game in its own + directory. + + File- and directorynames should be DOS 8+3, if they aren't, they'll get + renamed. + + If you run windows, just double click the make_iso.bat. + Wait while it creates the ISO image and burn it with Nero + or any other CD writing software. + + For Linux or Mac OS X binaries check http://www.nobis-crew.org/cd-tool/ + + Unfortunately, writing DVD images with cd-tool is currently broken. + This problem will probably be fixed in the nearer future. + + +If you want to create a CD/DVD without CD-Tool, make sure to put the ELF, + the SYSTEM.CNF and all the IRXs into the CD/DVD's root directory. + + +Notes +===== +- The Curse of Monkey Island only works correctly from HDD. + Playing it from CD/DVD will initially seem to work, but you will + experience random crashes. +- Compressed SAN files need a lot of CPU power, probably because of zlib, + and are constantly out of sync. Uncompressed SANs play fine though, so + compress_san is NOT recommended. +- The cd/dvd drive is a bottleneck, that's why you should compress the games + with MP3 using compress_scumm_sou / compress_scumm_bun / compress_sword1 / + compress_sword2 etc, but NOT compress_san. +- I haven't had time to implement a virtual keyboard. If you don't have a USB + keyboard, you can only enter '1's using the Select button. + (for copy protection screens as well as savegame names) +- When you see '1's and '0's flying across your screen, it means ScummVM is + accessing the Memory Card. Don't switch off or reset the console in that + case, and don't remove the Memory Card either :P + + +GamePad +======= +Start Button - F5 +Select Button - Figure 1 +L1 - 'n' +R1 - 'y' +L2 - Numpad 0 +Triangle - Escape +Square - Enter +Cross - Left mouse button +Circle - Right mouse button +Left analog stick - Mouse. Disabled when USB mouse is detected. + + + +Changes since 0.8.0 RC3 +======================= +- USB Mass support was added diff --git a/backends/platform/ps2/asyncfio.cpp b/backends/platform/ps2/asyncfio.cpp new file mode 100644 index 0000000000..45cadbafa9 --- /dev/null +++ b/backends/platform/ps2/asyncfio.cpp @@ -0,0 +1,206 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "asyncfio.h" +#include +#include +#include +#include +#include +#include + +#define DEFAULT_MODE (FIO_S_IRUSR | FIO_S_IWUSR | FIO_S_IRGRP | FIO_S_IWGRP | FIO_S_IROTH | FIO_S_IWOTH) + +extern void sioprintf(const char *zFormat, ...); + +AsyncFio::AsyncFio(void) { + _runningOp = NULL; + memset((int *)_ioSlots, 0, MAX_HANDLES * sizeof(int)); + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + _ioSema = CreateSema(&newSema); +} + +AsyncFio::~AsyncFio(void) { + DeleteSema(_ioSema); +} + +int AsyncFio::open(const char *name, int ioMode) { + WaitSema(_ioSema); + checkSync(); + int res; + fileXioOpen(name, ioMode, DEFAULT_MODE); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +void AsyncFio::close(int handle) { + WaitSema(_ioSema); + checkSync(); + fileXioClose(handle); + int res; + fileXioWaitAsync(FXIO_WAIT, &res); + if (res != 0) + sioprintf("ERROR: fileXioClose failed, EC %d", res); + _ioSlots[handle] = 0; + SignalSema(_ioSema); +} + +void AsyncFio::checkSync(void) { + if (_runningOp) { + fileXioWaitAsync(FXIO_WAIT, (int *)_runningOp); + _runningOp = NULL; + } +} + +void AsyncFio::read(int fd, void *dest, unsigned int len) { + WaitSema(_ioSema); + checkSync(); + assert(fd < MAX_HANDLES); + _runningOp = _ioSlots + fd; + fileXioRead(fd, (unsigned char*)dest, len); + SignalSema(_ioSema); +} + +void AsyncFio::write(int fd, const void *src, unsigned int len) { + WaitSema(_ioSema); + checkSync(); + assert(fd < MAX_HANDLES); + _runningOp = _ioSlots + fd; + fileXioWrite(fd, (unsigned char*)src, len); + SignalSema(_ioSema); +} + +int AsyncFio::seek(int fd, int offset, int whence) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioLseek(fd, offset, whence); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +int AsyncFio::mkdir(const char *name) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioMkdir(name, DEFAULT_MODE); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +int AsyncFio::dopen(const char *name) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioDopen(name); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +int AsyncFio::dread(int fd, iox_dirent_t *dest) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioDread(fd, dest); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +void AsyncFio::dclose(int fd) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioDclose(fd); + fileXioWaitAsync(FXIO_WAIT, &res); + assert(res == 0); + SignalSema(_ioSema); +} + +int AsyncFio::mount(const char *mountpoint, const char *mountstring, int flag) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioMount(mountpoint, mountstring, flag); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +int AsyncFio::umount(const char *mountpoint) { + int res; + WaitSema(_ioSema); + checkSync(); + fileXioUmount(mountpoint); + fileXioWaitAsync(FXIO_WAIT, &res); + SignalSema(_ioSema); + return res; +} + +int AsyncFio::sync(int fd) { + WaitSema(_ioSema); + if (_runningOp == _ioSlots + fd) + checkSync(); + int res = _ioSlots[fd]; + _ioSlots[fd] = 0; + SignalSema(_ioSema); + return res; +} + +bool AsyncFio::poll(int fd) { + bool retVal = false; + if (PollSema(_ioSema) >= 0) { + if (_runningOp == _ioSlots + fd) { + if (fileXioWaitAsync(FXIO_NOWAIT, (int *)_runningOp) == FXIO_COMPLETE) { + _runningOp = NULL; + retVal = true; + } else + retVal = false; + } else + retVal = true; + SignalSema(_ioSema); + } + return retVal; +} + +bool AsyncFio::fioAvail(void) { + bool retVal = false; + if (PollSema(_ioSema) > 0) { + if (_runningOp) { + if (fileXioWaitAsync(FXIO_NOWAIT, (int *)_runningOp) == FXIO_COMPLETE) { + _runningOp = NULL; + retVal = true; + } else + retVal = false; + } else + retVal = true; + SignalSema(_ioSema); + } + return retVal; +} + diff --git a/backends/platform/ps2/asyncfio.h b/backends/platform/ps2/asyncfio.h new file mode 100644 index 0000000000..ce5145dea2 --- /dev/null +++ b/backends/platform/ps2/asyncfio.h @@ -0,0 +1,50 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#define MAX_HANDLES 32 +#include + +class AsyncFio { +public: + AsyncFio(void); + ~AsyncFio(void); + int open(const char *name, int ioMode); + void close(int handle); + void read(int fd, void *dest, unsigned int len); + void write(int fd, const void *src, unsigned int len); + int seek(int fd, int offset, int whence); + int mkdir(const char *name); + int dopen(const char *name); + int dread(int fd, iox_dirent_t *dest); + void dclose(int fd); + int mount(const char *mountpoint, const char *mountstring, int flag); + int umount(const char *mountpoint); + int sync(int fd); + bool poll(int fd); + bool fioAvail(void); +private: + void checkSync(void); + int _ioSema; + volatile int * volatile _runningOp; + volatile int _ioSlots[MAX_HANDLES]; +}; + diff --git a/backends/platform/ps2/cd.c b/backends/platform/ps2/cd.c new file mode 100644 index 0000000000..5694d9a960 --- /dev/null +++ b/backends/platform/ps2/cd.c @@ -0,0 +1,53 @@ +/********************************************************************* + * Copyright (C) 2003 Tord Lindstrom (pukko@home.se) + * This file is subject to the terms and conditions of the PS2Link License. + * See the file LICENSE in the main directory of this distribution for more + * details. + */ + +#include +#include +#include + +#define CDVD_INIT_BIND_RPC 0x80000592 + +static SifRpcClientData_t cdvdCd __attribute__((aligned(64))); +static char sendBuffer[256] __attribute__((aligned(16))); + +int cdvdInitialised = 0; + + +void cdvdExit(void) +{ + cdvdInitialised = 0; +} + + +int cdvdInit(int mode) +{ + int i=0,len=0,ret=0; + u8 *pkt; + + cdvdCd.server = NULL; + + do { + if ((ret = SifBindRpc(&cdvdCd, CDVD_INIT_BIND_RPC, 0)) < 0) { + return -1; + } + if (!cdvdCd.server) { + nopdelay(); + } + } + while(!cdvdCd.server); + + pkt = sendBuffer; + PUSHDATA( int, pkt, mode, i); + pkt += i; len += i; + + if ((ret = SifCallRpc(&cdvdCd, 0, 0, sendBuffer, len, NULL, 0, 0, 0)) < 0) + return -1; + + cdvdInitialised = 1; + + return 0; +} diff --git a/backends/platform/ps2/cd.h b/backends/platform/ps2/cd.h new file mode 100644 index 0000000000..2bd1ddfe27 --- /dev/null +++ b/backends/platform/ps2/cd.h @@ -0,0 +1,26 @@ +/********************************************************************* + * Copyright (C) 2003 Tord Lindstrom (pukko@home.se) + * This file is subject to the terms and conditions of the PS2Link License. + * See the file LICENSE in the main directory of this distribution for more + * details. + */ + +#ifndef _CD_H_ +#define _CD_H_ + +#define CDVD_INIT_WAIT 0 +#define CDVD_INIT_NOWAIT 1 +#define CDVD_EXIT 5 + +#ifdef __cplusplus +extern "C" { +#endif + +int cdvdInit(int mode); +void cdvdExit(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/backends/platform/ps2/eecodyvdfs.c b/backends/platform/ps2/eecodyvdfs.c new file mode 100644 index 0000000000..655b5b941c --- /dev/null +++ b/backends/platform/ps2/eecodyvdfs.c @@ -0,0 +1,67 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include "eecodyvdfs.h" +#include +#include +#include + +static SifRpcClientData_t cd0; +static unsigned sbuff[64] __attribute__((aligned (64))); + +int driveStopped; + +int initCdvdFs(void) { + int res; + while(((res = SifBindRpc(&cd0, CDVDFS_IRX_ID, 0)) >= 0) && (cd0.server == NULL)) + nopdelay(); + driveStopped = 0; + return res; +} + +void readRTC(struct CdClock *dest) { + SifCallRpc(&cd0, READ_RTC, 0, (void *)sbuff, 0, (void *)sbuff, 8, 0, 0); + memcpy(dest, sbuff, 8); +} + +int driveStop(void) { + if (driveStopped) + return 0; + SifCallRpc(&cd0, DRIVE_STOP, 0, (void *)sbuff, 0, (void *)sbuff, 4, 0, 0); + if (*(int *)sbuff == 0) + driveStopped = 1; + return *(int *)sbuff; +} + +int driveStandby(void) { + if (!driveStopped) + return 0; + SifCallRpc(&cd0, DRIVE_STANDBY, 0, (void *)sbuff, 0, (void *)sbuff, 4, 0, 0); + if (*(int *)sbuff == 0) + driveStopped = 0; + return *(int *)sbuff; +} + + diff --git a/backends/platform/ps2/eecodyvdfs.h b/backends/platform/ps2/eecodyvdfs.h new file mode 100644 index 0000000000..9e58d35687 --- /dev/null +++ b/backends/platform/ps2/eecodyvdfs.h @@ -0,0 +1,52 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef EECDVDFS_H +#define EECDVDFS_H + +#include +#include "iop/CoDyVDfs/common/codyvdirx.h" + +struct CdClock { + u8 stat; + u8 second; + u8 minute; + u8 hour; + u8 padding; + u8 day; + u8 month; + u8 year; +} __attribute__((packed)); + +#ifdef __cplusplus +extern "C" { +#endif + int initCdvdFs(void); + void readRTC(struct CdClock *dest); + int driveStop(void); + int driveStandby(void); +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/backends/platform/ps2/fileio.cpp b/backends/platform/ps2/fileio.cpp new file mode 100644 index 0000000000..3b21e0796f --- /dev/null +++ b/backends/platform/ps2/fileio.cpp @@ -0,0 +1,728 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "backends/ps2/fileio.h" + +#include +#include +#include +#include +#include +#include "backends/ps2/asyncfio.h" +#include "base/engine.h" +#include "common/file.h" +#include "eecodyvdfs.h" +#include "common/config-manager.h" + +#define CACHE_SIZE (2048 * 32) +#define MAX_READ_STEP (2048 * 16) +#define MAX_CACHED_FILES 6 +#define CACHE_READ_THRESHOLD (16 * 2048) +#define CACHE_FILL_MIN (2048 * 24) +#define READ_ALIGN 64 // align all reads to the size of an EE cache line +#define READ_ALIGN_MASK (READ_ALIGN - 1) + +extern void sioprintf(const char *zFormat, ...); + +AsyncFio fio; + +Ps2File::Ps2File(int64 cacheId) { + _cacheId = cacheId; +} + +Ps2File::~Ps2File(void) { +} + +class Ps2ReadFile : public Ps2File { +public: + Ps2ReadFile(int64 cacheId, bool stream); + virtual ~Ps2ReadFile(void); + virtual bool open(const char *name); + virtual uint32 read(void *dest, uint32 len); + virtual uint32 write(const void *src, uint32 len); + virtual uint32 tell(void); + virtual uint32 size(void); + virtual int seek(int32 offset, int origin); + virtual bool eof(void); +private: + void cacheReadAhead(void); + void cacheReadSync(void); + int _fd, _sema; + uint8 *_cacheBuf; + bool _cacheOpRunning; + uint32 _filePos, _physFilePos, _cachePos; + uint32 _fileSize, _bytesInCache, _cacheOfs; + + uint32 _readBytesBlock; + bool _stream; +}; + +Ps2ReadFile::Ps2ReadFile(int64 cacheId, bool stream) : Ps2File(cacheId) { + _fd = -1; + _cacheBuf = (uint8*)memalign(64, CACHE_SIZE); + + _cacheOpRunning = 0; + _filePos = _physFilePos = _cachePos = 0; + _fileSize = _bytesInCache = _cacheOfs = 0; + _cacheOpRunning = false; + _readBytesBlock = 0; + _stream = stream; + + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + _sema = CreateSema(&newSema); + assert(_sema >= 0); +} + +Ps2ReadFile::~Ps2ReadFile(void) { + if (_cacheOpRunning) + cacheReadSync(); + free(_cacheBuf); + if (_fd >= 0) + fio.close(_fd); + DeleteSema(_sema); +} + +bool Ps2ReadFile::open(const char *name) { + assert(_fd < 0); + _fd = fio.open(name, O_RDONLY); + if (_fd >= 0) { + _fileSize = fio.seek(_fd, 0, SEEK_END); + fio.seek(_fd, 0, SEEK_SET); + return true; + } else + return false; +} + +uint32 Ps2ReadFile::tell(void) { + WaitSema(_sema); + uint32 res = _filePos; + SignalSema(_sema); + return res; +} + +uint32 Ps2ReadFile::size(void) { + WaitSema(_sema); + uint32 res = _fileSize; + SignalSema(_sema); + return res; +} + +bool Ps2ReadFile::eof(void) { + WaitSema(_sema); + bool res = (_filePos == _fileSize); + SignalSema(_sema); + return res; +} + +int Ps2ReadFile::seek(int32 offset, int origin) { + WaitSema(_sema); + int seekDest; + int res = -1; + switch (origin) { + case SEEK_SET: + seekDest = offset; + break; + case SEEK_CUR: + seekDest = _filePos + offset; + break; + case SEEK_END: + seekDest = _fileSize + offset; + break; + default: + seekDest = -1; + break; + } + if ((seekDest >= 0) && (seekDest <= (int)_fileSize)) { + _filePos = seekDest; + res = 0; + } + SignalSema(_sema); + return res; +} + +void Ps2ReadFile::cacheReadAhead(void) { + if (_cacheOpRunning) { + // there's already some cache read running + if (fio.poll(_fd)) // did it finish? + cacheReadSync(); // yes. + } + if ((!_cacheOpRunning) && ((_readBytesBlock >= CACHE_READ_THRESHOLD) || _stream) && fio.fioAvail()) { + // the engine seems to do sequential reads and there are no other I/Os going on. read ahead. + uint32 cachePosEnd = _cachePos + _bytesInCache; + + if (_cachePos > _filePos) + return; // there was a seek in the meantime, don't cache. + if (cachePosEnd - _filePos >= CACHE_FILL_MIN) + return; // cache is full enough. + if (cachePosEnd == _fileSize) + return; // can't read beyond EOF. + + assert(cachePosEnd < _fileSize); + + if (_cachePos + _bytesInCache <= _filePos) { + _cacheOfs = _bytesInCache = 0; + _cachePos = cachePosEnd = _filePos & ~READ_ALIGN_MASK; + assert(_filePos == _physFilePos); + } else { + uint32 cacheDiff = _filePos - _cachePos; + assert(_bytesInCache >= cacheDiff); + cacheDiff &= ~READ_ALIGN_MASK; + _bytesInCache -= cacheDiff; + _cachePos += cacheDiff; + _cacheOfs = (_cacheOfs + cacheDiff) % CACHE_SIZE; + } + + if (_physFilePos != cachePosEnd) { + sioprintf("unexpected _physFilePos %d cache %d %d", _physFilePos, _cacheOfs, _bytesInCache); + assert(!(cachePosEnd & READ_ALIGN_MASK)); + _physFilePos = fio.seek(_fd, cachePosEnd, SEEK_SET); + if (_physFilePos != cachePosEnd) { + sioprintf("cache seek error: seek to %d instead of %d, fs = %d", _physFilePos, cachePosEnd, _fileSize); + return; + } + } + + uint32 cacheDest = (_cacheOfs + _bytesInCache) % CACHE_SIZE; + uint32 cacheRead = CACHE_SIZE - _bytesInCache; + if (cacheDest + cacheRead > CACHE_SIZE) + cacheRead = CACHE_SIZE - cacheDest; + if (cacheRead > MAX_READ_STEP) + cacheRead = MAX_READ_STEP; + + assert((!(cacheRead & READ_ALIGN_MASK)) && cacheRead); + + _cacheOpRunning = true; + fio.read(_fd, _cacheBuf + cacheDest, cacheRead); + } +} + +void Ps2ReadFile::cacheReadSync(void) { + if (_cacheOpRunning) { + int res = fio.sync(_fd); + assert(res >= 0); + _bytesInCache += res; + _physFilePos += res; + _cacheOpRunning = false; + } +} + +uint32 Ps2ReadFile::read(void *dest, uint32 len) { + WaitSema(_sema); + uint8 *destBuf = (uint8*)dest; + if ((_filePos < _cachePos) || (_filePos + len > _cachePos + _bytesInCache)) + cacheReadSync(); // we have to read from CD, sync cache. + + while (len && (_filePos != _fileSize)) { + if ((_filePos >= _cachePos) && (_filePos < _cachePos + _bytesInCache)) { // read from cache + uint32 staPos = (_cacheOfs + (_filePos - _cachePos)) % CACHE_SIZE; + uint32 cpyLen = _bytesInCache - (_filePos - _cachePos); + if (cpyLen > len) + cpyLen = len; + if (staPos + cpyLen > CACHE_SIZE) + cpyLen = CACHE_SIZE - staPos; + + assert(cpyLen); + memcpy(destBuf, _cacheBuf + staPos, cpyLen); + _filePos += cpyLen; + destBuf += cpyLen; + _readBytesBlock += len; + len -= cpyLen; + } else { // cache miss + assert(!_cacheOpRunning); + if (_physFilePos != _filePos) { + if ((_filePos < _physFilePos) || (_filePos > _physFilePos + (CACHE_SIZE / 2))) + _readBytesBlock = 0; // reset cache hit count + + _physFilePos = _filePos & ~READ_ALIGN_MASK; + if (fio.seek(_fd, _physFilePos, SEEK_SET) != (int)_physFilePos) + break; // read beyond EOF + } + + int doRead = len + (_filePos - _physFilePos); + doRead = (doRead + READ_ALIGN_MASK) & ~READ_ALIGN_MASK; + + if (doRead > MAX_READ_STEP) + doRead = MAX_READ_STEP; + if (doRead < 2048) + doRead = 2048; + + fio.read(_fd, _cacheBuf, doRead); + _cachePos = _physFilePos; + _cacheOfs = 0; + _bytesInCache = fio.sync(_fd); + _physFilePos += _bytesInCache; + if (!_bytesInCache) + break; // EOF + } + } + cacheReadAhead(); + SignalSema(_sema); + return destBuf - (uint8*)dest; +} + +uint32 Ps2ReadFile::write(const void *src, uint32 len) { + sioprintf("write request on Ps2ReadFile!"); + SleepThread(); + return 0; +} + +class Ps2WriteFile : public Ps2File { +public: + Ps2WriteFile(int64 cacheId); + virtual ~Ps2WriteFile(void); + virtual bool open(const char *name); + virtual uint32 read(void *dest, uint32 len); + virtual uint32 write(const void *src, uint32 len); + virtual uint32 tell(void); + virtual uint32 size(void); + virtual int seek(int32 offset, int origin); + virtual bool eof(void); +private: + int _fd; + uint8 *_cacheBuf; + uint32 _filePos, _bytesInCache; +}; + +Ps2WriteFile::Ps2WriteFile(int64 cacheId) : Ps2File(cacheId) { + _fd = -1; + _cacheBuf = (uint8*)malloc(CACHE_SIZE); + _filePos = _bytesInCache = 0; +} + +Ps2WriteFile::~Ps2WriteFile(void) { + if ((_fd >= 0) && (_bytesInCache)) { + fio.write(_fd, _cacheBuf, _bytesInCache); + int wrRes = fio.sync(_fd); + if (wrRes != (int)_bytesInCache) // too late to return an error + printf("Cache flush on fclose(): Unable to write %d cached bytes to mc, only %d bytes written\n", _bytesInCache, wrRes); + } + if (_fd >= 0) + fio.close(_fd); + free(_cacheBuf); +} + +bool Ps2WriteFile::open(const char *name) { + _fd = fio.open(name, O_WRONLY | O_CREAT | O_TRUNC); + return (_fd >= 0); +} + +uint32 Ps2WriteFile::read(void *dest, uint32 len) { + printf("ERROR: Read request on Ps2WriteFile\n"); + SleepThread(); + return 0; +} + +uint32 Ps2WriteFile::write(const void *src, uint32 len) { + uint32 size = len; + uint8 *srcBuf = (uint8*)src; + while (size) { + uint32 doCpy = (len > CACHE_SIZE - _bytesInCache) ? (CACHE_SIZE - _bytesInCache) : len; + if (doCpy) { + memcpy(_cacheBuf + _bytesInCache, srcBuf, doCpy); + _bytesInCache += doCpy; + srcBuf += doCpy; + size -= doCpy; + } + + if (_bytesInCache == CACHE_SIZE) { + fio.write(_fd, _cacheBuf, _bytesInCache); + if (fio.sync(_fd) != (int)_bytesInCache) { + printf("Unable to flush %d cached bytes to memory card!\n", _bytesInCache); + return 0; + } + _filePos += _bytesInCache; + _bytesInCache = 0; + } + } + return len; +} + +uint32 Ps2WriteFile::tell(void) { + return _bytesInCache + _filePos; +} + +uint32 Ps2WriteFile::size(void) { + return tell(); +} + +int Ps2WriteFile::seek(int32 offset, int origin) { + printf("Seek(%d/%d) request on Ps2WriteFile\n", offset, origin); + SleepThread(); + return 0; +} + +bool Ps2WriteFile::eof(void) { + return true; +} + +struct TocNode { + char name[64]; + TocNode *next, *sub; + bool isDir; + uint8 nameLen; +}; + +class TocManager { +public: + TocManager(void); + ~TocManager(void); + void readEntries(const char *root); + int64 fileExists(const char *name); + bool haveEntries(void); +private: + void readDir(const char *path, TocNode **node, int level); + TocNode *_rootNode; + char _root[256]; + uint8 _rootLen; +}; + +static TocManager tocManager; + +struct FioHandleCache { + Ps2File *file; + FioHandleCache *next, *prev; +}; + +static FioHandleCache *cacheListStart = NULL; +static FioHandleCache *cacheListEnd = NULL; +static int cacheListLen = 0; +static int openFileCount = 0; +static int cacheListSema = -1; + +static bool checkedPath = false; + +Ps2File *findInCache(int64 id); + +FILE *ps2_fopen(const char *fname, const char *mode) { + if (cacheListSema == -1) { + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + cacheListSema = CreateSema(&newSema); + assert(cacheListSema >= 0); + } + + printf("ps2_fopen: %s, %s\n", fname, mode); + + if (!checkedPath && g_engine) { + // are we playing from cd/dvd? + const char *gameDataPath = ConfMan.get("path").c_str(); + printf("Read TOC dir: %s\n", gameDataPath); + if (strncmp(gameDataPath, "cdfs:", 5) != 0) + driveStop(); // no, we aren't. stop the drive. it's noisy. + // now cache the dir tree + tocManager.readEntries(gameDataPath); + checkedPath = true; + } + + if (((mode[0] != 'r') && (mode[0] != 'w')) || ((mode[1] != '\0') && (mode[1] != 'b'))) { + printf("unsupported mode \"%s\" for file \"%s\"\n", mode, fname); + return NULL; + } + + bool rdOnly = (mode[0] == 'r'); + + int64 cacheId = -1; + if (rdOnly && tocManager.haveEntries()) + cacheId = tocManager.fileExists(fname); + + if (cacheId != 0) { + Ps2File *file = findInCache(cacheId); + if (file) + return (FILE*)file; + + if (rdOnly) { + bool isAudioFile = strstr(fname, ".bun") || strstr(fname, ".BUN") || strstr(fname, ".Bun"); + file = new Ps2ReadFile(cacheId, isAudioFile); + } else + file = new Ps2WriteFile(cacheId); + + if (file->open(fname)) { + openFileCount++; + return (FILE*)file; + } else + delete file; + } + return NULL; +} + +void checkCacheListLen(void) { + while ((cacheListLen > MAX_CACHED_FILES) || ((openFileCount > 13) && cacheListLen)) { + assert(cacheListEnd && cacheListStart); + delete cacheListEnd->file; + if (cacheListEnd->prev) { + cacheListEnd->prev->next = NULL; + FioHandleCache *temp = cacheListEnd; + cacheListEnd = cacheListEnd->prev; + delete temp; + } else { + assert(cacheListEnd == cacheListStart); + assert(cacheListLen == 1); + delete cacheListEnd; + cacheListEnd = cacheListStart = NULL; + } + cacheListLen--; + openFileCount--; + } +} + +int ps2_fclose(FILE *stream) { + Ps2File *file = (Ps2File*)stream; + if (file->_cacheId > 0) { // this is a file on the CD, could be smart to cache it + FioHandleCache *newHandle = new FioHandleCache; + newHandle->file = file; + file->seek(0, SEEK_SET); + + WaitSema(cacheListSema); + if (!cacheListEnd) { + assert(!cacheListStart); + newHandle->prev = newHandle->next = NULL; + cacheListEnd = cacheListStart = newHandle; + } else { + assert(cacheListStart); + newHandle->prev = NULL; + newHandle->next = cacheListStart; + cacheListStart->prev = newHandle; + cacheListStart = newHandle; + } + cacheListLen++; + checkCacheListLen(); + SignalSema(cacheListSema); + } else { + openFileCount--; + delete file; + } + return 0; +} + +Ps2File *findInCache(int64 id) { + if (id <= 0) + return NULL; + WaitSema(cacheListSema); + FioHandleCache *node = cacheListStart; + while (node) { + if (node->file->_cacheId == id) { + if (node == cacheListStart) + cacheListStart = node->next; + if (node == cacheListEnd) + cacheListEnd = node->prev; + if (node->prev) + node->prev->next = node->next; + if (node->next) + node->next->prev = node->prev; + Ps2File *ret = node->file; + delete node; + cacheListLen--; + SignalSema(cacheListSema); + return ret; + } else + node = node->next; + } + SignalSema(cacheListSema); + return NULL; +} + +int ps2_fseek(FILE *stream, long offset, int origin) { + return ((Ps2File*)stream)->seek(offset, origin); +} + +uint32 ps2_ftell(FILE *stream) { + return ((Ps2File*)stream)->tell(); +} + +uint32 ps2_fsize(FILE *stream) { + return ((Ps2File*)stream)->size(); +} + +int ps2_feof(FILE *stream) { + return ((Ps2File*)stream)->eof(); +} + +size_t ps2_fread(void *buf, size_t r, size_t n, FILE *stream) { + assert(r != 0); + return ((Ps2File*)stream)->read(buf, r * n) / r; +} + +int ps2_fgetc(FILE *stream) { + uint8 temp; + if (((Ps2File*)stream)->read(&temp, 1)) + return temp; + else + return EOF; +} + +char *ps2_fgets(char *buf, int n, FILE *stream) { + char *retVal = buf; + while (n--) { + if (n == 0) + *buf = '\0'; + else { + char c = ps2_fgetc(stream); + if (c == EOF) + return NULL; + if ((c == '\r') || (c == '\n')) { + *buf++ = '\0'; + return retVal; + } + *buf++ = c; + } + } + return retVal; +} + +int ps2_fprintf(FILE *pOut, const char *zFormat, ...) { + va_list ap; + char resStr[2048]; + + va_start(ap,zFormat); + int res = vsnprintf(resStr, 2048, zFormat, ap); + va_end(ap); + if ((pOut == stderr) || (pOut == stdout)) { + printf("%s", resStr); + sioprintf("%s", resStr); + } else + res = ps2_fwrite(resStr, 1, res, pOut); + return res; +} + +size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream) { + assert(r != 0); + return ((Ps2File*)stream)->write(buf, r * n) / r; +} + +int ps2_fputc(int c, FILE *stream) { + if (((Ps2File*)stream)->write(&c, 1) == 1) + return c; + else + return -1; +} + +int ps2_fputs(const char *s, FILE *stream) { + int len = strlen(s); + if (ps2_fwrite(s, 1, len, stream) == (size_t)len) + return len; + else + return EOF; +} + +int ps2_fflush(FILE *stream) { + printf("fflush not implemented\n"); + return 0; +} + +TocManager::TocManager(void) { + _rootNode = NULL; +} + +TocManager::~TocManager(void) { +} + +bool TocManager::haveEntries(void) { + return _rootNode != NULL; +} + +void TocManager::readEntries(const char *root) { + _rootLen = strlen(root); + strcpy(_root, root); + while (_root[_rootLen - 1] == '/') { + _rootLen--; + _root[_rootLen] = '\0'; + } + char readPath[256]; + sprintf(readPath, "%s/", _root); + printf("readDir: %s\n", readPath); + readDir(readPath, &_rootNode, 0); +} + +void TocManager::readDir(const char *path, TocNode **node, int level) { + if (level <= 2) { // we don't scan deeper than that + iox_dirent_t dirent; + int fd = fio.dopen(path); + if (fd >= 0) { + while (fio.dread(fd, &dirent) > 0) + if (dirent.name[0] != '.') { // skip '.' and '..' + *node = new TocNode; + (*node)->sub = (*node)->next = NULL; + + (*node)->nameLen = strlen(dirent.name); + memcpy((*node)->name, dirent.name, (*node)->nameLen + 1); + + if (dirent.stat.mode & FIO_S_IFDIR) { // directory + (*node)->isDir = true; + char nextPath[256]; + sprintf(nextPath, "%s%s/", path, dirent.name); + readDir(nextPath, &((*node)->sub), level + 1); + } else + (*node)->isDir = false; + node = &((*node)->next); + } + fio.dclose(fd); + } else + printf("Can't open path: %s\n", path); + } +} + +int64 TocManager::fileExists(const char *name) { + if (((name[_rootLen] != '/') && (name[_rootLen] != '\0')) || (strnicmp(name, _root, _rootLen) != 0)) { + for (int i = 0; i < 8; i++) + if (name[i] == ':') // we don't know the content of other drives, + return -1; // assume file exists + else if ((name[i] == '/') || (name[i] == '\\')) + return 0; // does not exists (this is probably ScummVM trying the 'current directory'.) + return 0; + } + + uint8 nameLen = strlen(name); + + name += _rootLen + 1; + nameLen -= _rootLen + 1; + + TocNode *node = _rootNode; + int64 retId = 1; + while (node) { + if (((name[node->nameLen] == '/') || (name[node->nameLen] == '\0')) && (strnicmp(name, node->name, node->nameLen) == 0)) { + name += node->nameLen; + nameLen -= node->nameLen; + if (node->isDir) { + if (nameLen) { + name++; // skip '/' + nameLen--; + node = node->sub; + retId <<= 10; + } else + return 0; // can't open a directory with fopen() + } else { + if (nameLen == 0) + return retId; // ok, found + else + return 0; // here's a file, but there's something left in the path + } + } else { + node = node->next; + retId++; + } + } + return 0; // does not exist +} + diff --git a/backends/platform/ps2/fileio.h b/backends/platform/ps2/fileio.h new file mode 100644 index 0000000000..ed94c2db6a --- /dev/null +++ b/backends/platform/ps2/fileio.h @@ -0,0 +1,77 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __PS2FILE_IO__ +#define __PS2FILE_IO__ + +#include "common/scummsys.h" + +class Ps2File { +public: + Ps2File(int64 cacheId); + virtual ~Ps2File(void); + virtual bool open(const char *name) = 0; + virtual uint32 read(void *dest, uint32 len) = 0; + virtual uint32 write(const void *src, uint32 len) = 0; + virtual uint32 tell(void) = 0; + virtual uint32 size(void) = 0; + virtual int seek(int32 offset, int origin) = 0; + virtual bool eof(void) = 0; + int64 _cacheId; +private: +}; + +class Ps2SmushFile : public Ps2File { +public: + Ps2SmushFile(int64 cacheId); + virtual ~Ps2SmushFile(void); + virtual bool open(const char *name); + virtual uint32 read(void *dest, uint32 len); + virtual uint32 write(const void *src, uint32 len); + virtual uint32 tell(void); + virtual uint32 size(void); + virtual int seek(int32 offset, int origin); + virtual bool eof(void); +private: + uint32 _filePos, _fileSize; + int _id; +}; + +FILE *ps2_fopen(const char *fname, const char *mode); +int ps2_fclose(FILE *stream); +int ps2_fflush(FILE *stream); +int ps2_fseek(FILE *stream, long offset, int origin); +uint32 ps2_ftell(FILE *stream); +int ps2_feof(FILE *stream); +uint32 ps2_fsize(FILE *stream); + +size_t ps2_fread(void *buf, size_t r, size_t n, FILE *stream); +int ps2_fgetc(FILE *stream); +char *ps2_fgets(char *buf, int n, FILE *stream); + +size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream); +int ps2_fputc(int c, FILE *stream); +int ps2_fputs(const char *s, FILE *stream); +int ps2_fprintf(FILE *pOut, const char *zFormat, ...); + +#endif // __PS2FILE_IO__ + diff --git a/backends/platform/ps2/icon.cpp b/backends/platform/ps2/icon.cpp new file mode 100644 index 0000000000..db46ac5987 --- /dev/null +++ b/backends/platform/ps2/icon.cpp @@ -0,0 +1,932 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "backends/ps2/savefile.h" +#include "backends/ps2/Gs2dScreen.h" +#include "backends/ps2/GsDefs.h" + +const iconIVECTOR Ps2SaveFileManager::_bgcolor[4] = { + { 68, 23, 116, 0 }, // top left + { 255, 255, 255, 0 }, // top right + { 255, 255, 255, 0 }, // bottom left + { 68, 23, 116, 0 }, // bottom right +}; + +const iconFVECTOR Ps2SaveFileManager::_lightdir[3] = { + { 0.5, 0.5, 0.5, 0.0 }, + { 0.0,-0.4,-0.1, 0.0 }, + {-0.5,-0.5, 0.5, 0.0 }, +}; + +const iconFVECTOR Ps2SaveFileManager::_lightcol[3] = { + { 0.3, 0.3, 0.3, 0.00 }, + { 0.4, 0.4, 0.4, 0.00 }, + { 0.5, 0.5, 0.5, 0.00 }, +}; + +const iconFVECTOR Ps2SaveFileManager::_ambient = { 0.50, 0.50, 0.50, 0.00 }; + +// Source File: stdico2.rle +// Orig. Offset: 0 / 0x00000000 +// Length: 14018 / 0x000036C2 (bytes) + +const uint8 Ps2SaveFileManager::_rleIcoData[14018] = { + 0xCC, 0x41, 0x00, 0x00, 0xCC, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x24, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, + 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, + 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, + 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, + 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x4E, 0x07, + 0x0C, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE7, 0x03, 0xE6, 0x03, 0xE9, 0x03, 0xF0, 0x2B, 0xF8, 0x57, 0x74, 0x00, 0x0C, 0x00, 0xFD, 0x73, + 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE6, 0x03, + 0xE9, 0x03, 0xF0, 0x2B, 0xF8, 0x57, 0x62, 0x00, 0x21, 0x00, 0xFE, 0x77, 0xFB, 0x67, 0xF9, 0x5F, + 0xF8, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, + 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF7, 0x53, + 0xF1, 0x33, 0xEB, 0x13, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE9, 0x03, 0xED, 0x1F, 0xF3, 0x3F, 0xF9, 0x5B, 0xFB, 0x67, 0xFE, 0x77, 0x5F, 0x00, 0x21, 0x00, + 0xFB, 0x6B, 0xF5, 0x4B, 0xF0, 0x2F, 0xEE, 0x2F, 0xF0, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, + 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, + 0xF1, 0x2F, 0xF0, 0x2F, 0xEF, 0x2B, 0xEC, 0x1B, 0xE9, 0x0B, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xEA, 0x0F, 0xEC, 0x1F, 0xF1, 0x2F, 0xF6, 0x4B, + 0xFC, 0x6B, 0x5F, 0x00, 0x21, 0x00, 0xF8, 0x57, 0xEF, 0x2B, 0xE8, 0x07, 0xE6, 0x07, 0xE8, 0x07, + 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, + 0xEA, 0x07, 0xEA, 0x07, 0xE9, 0x07, 0xE9, 0x07, 0xE9, 0x07, 0xE8, 0x07, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, + 0xE7, 0x07, 0xE9, 0x07, 0xF0, 0x2B, 0xF8, 0x57, 0x56, 0x00, 0x30, 0x00, 0xFD, 0x73, 0xFB, 0x67, + 0xFA, 0x63, 0xF9, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xF9, 0x5F, 0xF2, 0x3B, + 0xEB, 0x13, 0xE5, 0x03, 0xE3, 0x03, 0xE4, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xEC, 0x13, 0xF3, 0x3B, + 0xF9, 0x5F, 0xFA, 0x63, 0xF9, 0x63, 0xFA, 0x63, 0xFB, 0x6B, 0xFE, 0x77, 0x50, 0x00, 0x30, 0x00, + 0xFA, 0x63, 0xF5, 0x43, 0xF1, 0x37, 0xF0, 0x37, 0xF2, 0x37, 0xF2, 0x37, 0xF2, 0x37, 0xF2, 0x37, + 0xF1, 0x33, 0xEE, 0x1F, 0xE9, 0x07, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE7, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, + 0xEA, 0x07, 0xEE, 0x1F, 0xF1, 0x33, 0xF1, 0x37, 0xF0, 0x37, 0xF1, 0x37, 0xF5, 0x47, 0xFB, 0x67, + 0x4F, 0x00, 0x32, 0x00, 0xFD, 0x77, 0xF6, 0x4B, 0xEE, 0x1F, 0xE9, 0x0B, 0xE8, 0x0B, 0xEA, 0x0B, + 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x07, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xEA, 0x07, 0xEA, 0x0B, 0xEA, 0x0B, 0xE8, 0x0B, + 0xE9, 0x0B, 0xEF, 0x23, 0xF7, 0x4F, 0xFE, 0x7B, 0x49, 0x00, 0x39, 0x00, 0xFD, 0x73, 0xFB, 0x6B, + 0xFA, 0x67, 0xFB, 0x67, 0xFB, 0x67, 0xF8, 0x57, 0xF0, 0x2F, 0xE9, 0x07, 0xE4, 0x03, 0xE4, 0x03, + 0xE5, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, + 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE5, 0x03, + 0xE4, 0x03, 0xE5, 0x03, 0xEA, 0x0B, 0xF1, 0x33, 0xF8, 0x5B, 0xFC, 0x6B, 0xFE, 0x77, 0x46, 0x00, + 0x3A, 0x00, 0xFF, 0x7B, 0xF9, 0x5F, 0xF4, 0x43, 0xF1, 0x3B, 0xF2, 0x3B, 0xF3, 0x3B, 0xF1, 0x2F, + 0xEC, 0x17, 0xE8, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, + 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x47, 0x03, 0x47, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, + 0x68, 0x03, 0x88, 0x03, 0xA8, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xEC, 0x1B, + 0xF0, 0x33, 0xF5, 0x47, 0xFB, 0x63, 0x46, 0x00, 0x3B, 0x00, 0xFC, 0x6F, 0xF4, 0x43, 0xED, 0x1B, + 0xE9, 0x0F, 0xE9, 0x0F, 0xEB, 0x0F, 0xEB, 0x0F, 0xE9, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0xA7, 0x03, + 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x88, 0x03, 0x67, 0x03, 0x27, 0x03, 0x06, 0x03, 0xC5, 0x02, + 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xC6, 0x02, 0xE7, 0x02, 0x27, 0x07, 0x67, 0x03, 0x87, 0x03, + 0xC7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x07, 0xE9, 0x0F, 0xEF, 0x23, 0xF6, 0x4F, 0xFE, 0x77, + 0x43, 0x00, 0x40, 0x00, 0xFD, 0x77, 0xFC, 0x6F, 0xF6, 0x4F, 0xEF, 0x27, 0xE8, 0x03, 0xE4, 0x03, + 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, + 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x47, 0x03, 0x27, 0x03, 0x06, 0x03, 0x06, 0x03, 0xE6, 0x02, + 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xC6, 0x02, 0x85, 0x02, 0x65, 0x02, 0x24, 0x02, 0x04, 0x02, + 0x04, 0x02, 0x05, 0x02, 0x25, 0x02, 0x45, 0x06, 0x85, 0x06, 0xC6, 0x02, 0x06, 0x03, 0x46, 0x03, + 0x87, 0x03, 0xA7, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xE7, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xEA, 0x07, 0xF1, 0x33, 0xF8, 0x5B, 0xFC, 0x6F, + 0xFD, 0x77, 0xFF, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xFE, 0x77, 0xF9, 0x5B, 0xF5, 0x43, 0xEF, 0x2F, + 0xEB, 0x13, 0xE7, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x26, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x65, 0x02, + 0x45, 0x02, 0x45, 0x02, 0x45, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, + 0xC4, 0x01, 0xA3, 0x05, 0x83, 0x05, 0x63, 0x01, 0x83, 0x01, 0x83, 0x05, 0xA3, 0x01, 0xE4, 0x01, + 0x24, 0x02, 0x65, 0x02, 0xC6, 0x02, 0x26, 0x03, 0x67, 0x03, 0xA7, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, + 0xEC, 0x1B, 0xF1, 0x37, 0xF5, 0x47, 0xF9, 0x5F, 0xFD, 0x73, 0x3F, 0x00, 0x41, 0x00, 0xFC, 0x6B, + 0xF4, 0x43, 0xED, 0x1B, 0xE9, 0x0F, 0xE8, 0x07, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x86, 0x03, 0x26, 0x03, 0xA5, 0x02, + 0x24, 0x02, 0xE4, 0x01, 0xC4, 0x01, 0x84, 0x01, 0x84, 0x01, 0x84, 0x01, 0x83, 0x01, 0x63, 0x01, + 0x63, 0x01, 0x63, 0x01, 0x43, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x02, 0x05, 0x02, 0x05, + 0x02, 0x05, 0x22, 0x01, 0x43, 0x01, 0x83, 0x01, 0xC4, 0x01, 0x25, 0x02, 0xA6, 0x02, 0x06, 0x03, + 0x67, 0x03, 0xA7, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x0B, 0xEA, 0x13, 0xEE, 0x23, 0xF5, 0x47, 0xFC, 0x6B, + 0x39, 0x00, 0x47, 0x00, 0xFF, 0x7B, 0xFE, 0x77, 0xFD, 0x73, 0xFC, 0x73, 0xFD, 0x73, 0xFD, 0x73, + 0xF7, 0x4F, 0xEF, 0x23, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x66, 0x03, 0xE5, 0x02, 0x85, 0x02, + 0x04, 0x02, 0x83, 0x01, 0x43, 0x01, 0x23, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, + 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x04, 0xE3, 0x04, 0xE3, 0x08, 0xE2, 0x08, 0xC2, 0x08, + 0xC2, 0x04, 0xC1, 0x04, 0xC1, 0x04, 0xE2, 0x00, 0x03, 0x01, 0x23, 0x01, 0xA4, 0x01, 0x05, 0x02, + 0x65, 0x02, 0xE6, 0x02, 0x46, 0x03, 0x87, 0x03, 0xC8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xEA, 0x07, 0xF2, 0x37, + 0xFB, 0x67, 0x39, 0x00, 0x47, 0x00, 0xFD, 0x73, 0xF8, 0x5B, 0xF5, 0x47, 0xF4, 0x47, 0xF4, 0x47, + 0xF5, 0x47, 0xF1, 0x2F, 0xEC, 0x13, 0xE7, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, + 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x47, 0x03, 0x46, 0x03, 0x26, 0x03, 0xC5, 0x02, 0x64, 0x02, + 0xE4, 0x01, 0x83, 0x01, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xC3, 0x04, 0xE3, 0x04, 0xE3, 0x00, + 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, + 0xE2, 0x08, 0xC2, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0x03, 0x01, 0x43, 0x01, + 0xA4, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x47, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE5, 0x03, 0xE4, 0x03, 0xE9, 0x03, + 0xF2, 0x33, 0xFA, 0x67, 0x39, 0x00, 0x47, 0x00, 0xFA, 0x63, 0xF3, 0x3B, 0xED, 0x1B, 0xEB, 0x1B, + 0xEC, 0x1B, 0xED, 0x1B, 0xEB, 0x13, 0xEA, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, + 0x87, 0x03, 0x46, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x44, 0x02, + 0xC4, 0x01, 0x63, 0x01, 0x03, 0x05, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, + 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x08, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, + 0x23, 0x09, 0x03, 0x05, 0x03, 0x05, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xE3, 0x04, 0xE3, 0x04, + 0x23, 0x01, 0x43, 0x01, 0x83, 0x05, 0xE4, 0x05, 0x66, 0x02, 0x07, 0x03, 0x88, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, 0x4A, 0x00, 0xFF, 0x7B, 0xFE, 0x77, 0xFC, 0x6F, + 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0xA7, 0x03, 0x66, 0x03, 0x26, 0x03, 0x06, 0x03, 0xC5, 0x02, 0x85, 0x02, 0x65, 0x06, + 0x44, 0x06, 0x04, 0x02, 0xE3, 0x01, 0x83, 0x01, 0x43, 0x01, 0x03, 0x05, 0xC3, 0x04, 0xC3, 0x08, + 0xC3, 0x08, 0xE3, 0x08, 0x04, 0x09, 0x03, 0x09, 0x03, 0x05, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, + 0x23, 0x09, 0x23, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, 0x03, 0x09, + 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x63, 0x05, + 0xE5, 0x05, 0x86, 0x02, 0x27, 0x03, 0xA8, 0x03, 0xC7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, + 0x4A, 0x00, 0xFD, 0x6F, 0xF9, 0x5B, 0xF5, 0x47, 0xEF, 0x2B, 0xEA, 0x0B, 0xE6, 0x03, 0xE4, 0x03, + 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x47, 0x03, 0xE6, 0x02, 0xA5, 0x02, + 0x65, 0x02, 0x24, 0x02, 0x04, 0x06, 0xE4, 0x05, 0xA3, 0x05, 0x83, 0x01, 0x43, 0x01, 0x22, 0x01, + 0xE2, 0x04, 0xC2, 0x04, 0xA2, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x24, 0x09, 0x24, 0x09, + 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x44, 0x09, 0x64, 0x09, 0x65, 0x09, 0x65, 0x09, + 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x03, 0x09, + 0x23, 0x09, 0x03, 0x09, 0xE3, 0x04, 0x23, 0x05, 0x83, 0x01, 0x25, 0x02, 0xC6, 0x02, 0x47, 0x03, + 0xA7, 0x03, 0xC7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, 0x4A, 0x00, 0xFA, 0x5F, 0xF3, 0x3B, 0xED, 0x1F, + 0xE9, 0x13, 0xE8, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, + 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x24, 0x02, 0xE4, 0x05, 0xA3, 0x05, 0x63, 0x05, 0x63, 0x05, + 0x43, 0x01, 0x23, 0x01, 0x02, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xC2, 0x08, 0xE3, 0x08, + 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, 0x65, 0x09, 0x65, 0x09, 0x65, 0x09, 0x64, 0x09, + 0x64, 0x09, 0x85, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x23, 0x0D, 0xE3, 0x0C, + 0xC3, 0x08, 0xC3, 0x08, 0x03, 0x09, 0x24, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, + 0x63, 0x01, 0xE3, 0x01, 0x65, 0x02, 0x06, 0x03, 0x67, 0x03, 0xC8, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x34, 0x00, + 0x4C, 0x00, 0xFF, 0x7B, 0xFC, 0x6F, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x46, 0x03, 0xC6, 0x02, 0x45, 0x02, + 0xE5, 0x01, 0x84, 0x05, 0x63, 0x05, 0x23, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0xE3, 0x00, + 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, + 0x65, 0x09, 0x86, 0x09, 0x86, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0xA6, 0x0D, + 0xA6, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x24, 0x0D, 0x03, 0x0D, 0xE3, 0x0C, 0xE3, 0x08, + 0x24, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x03, 0x05, 0xE2, 0x04, 0x22, 0x01, 0xA3, 0x01, + 0x24, 0x02, 0xC5, 0x02, 0x47, 0x03, 0xA8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFE, 0x7B, + 0xFC, 0x6B, 0xF9, 0x5B, 0xF5, 0x4B, 0xEF, 0x2B, 0xEA, 0x0B, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x46, 0x03, 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, + 0x64, 0x01, 0x43, 0x05, 0x23, 0x05, 0x03, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x05, 0x04, 0x05, + 0xE3, 0x04, 0xE3, 0x04, 0x03, 0x09, 0x03, 0x09, 0x23, 0x0D, 0x44, 0x0D, 0x44, 0x0D, 0x65, 0x0D, + 0x85, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xA6, 0x11, 0xC6, 0x11, + 0xC7, 0x0D, 0xA7, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x0D, 0x04, 0x0D, 0x04, 0x0D, + 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x44, 0x09, 0x03, 0x05, 0xE2, 0x04, 0x22, 0x01, 0x63, 0x01, + 0x04, 0x02, 0xA5, 0x02, 0x26, 0x03, 0xA7, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE5, 0x03, 0xE4, 0x03, 0xE9, 0x07, 0xF2, 0x37, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x77, + 0xF8, 0x57, 0xF2, 0x37, 0xED, 0x23, 0xEA, 0x13, 0xE9, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x27, 0x03, 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x63, 0x01, + 0x23, 0x01, 0x03, 0x05, 0x23, 0x05, 0x23, 0x09, 0x24, 0x09, 0x45, 0x09, 0x45, 0x09, 0x45, 0x09, + 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x0D, 0x64, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x86, 0x0D, + 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, + 0xC6, 0x11, 0xA6, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x45, 0x0D, 0x45, 0x0D, 0x45, 0x0D, + 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x09, 0x44, 0x09, 0x03, 0x05, 0xE3, 0x04, 0x23, 0x01, 0x83, 0x01, + 0x04, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x87, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, + 0xE4, 0x03, 0xE3, 0x03, 0xE8, 0x03, 0xF1, 0x33, 0xFA, 0x63, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x73, + 0xF5, 0x47, 0xED, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xC8, 0x03, + 0xA7, 0x03, 0x66, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x25, 0x06, 0xA4, 0x05, 0x43, 0x05, 0x02, 0x01, + 0xE2, 0x04, 0x03, 0x05, 0x23, 0x05, 0x44, 0x09, 0x65, 0x09, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, + 0x65, 0x09, 0x85, 0x09, 0x84, 0x09, 0x84, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x86, 0x0D, + 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x11, 0x85, 0x11, 0xA6, 0x11, 0xA6, 0x11, + 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x66, 0x11, 0x65, 0x0D, + 0x65, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x04, 0x05, 0x03, 0x05, 0x44, 0x01, 0x84, 0x01, + 0x05, 0x02, 0xA6, 0x02, 0x26, 0x03, 0x87, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x13, 0xF3, 0x3B, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFC, 0x6F, + 0xF4, 0x3F, 0xEB, 0x0F, 0xE5, 0x03, 0xE4, 0x03, 0xE7, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, + 0x46, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x04, 0x02, 0xA4, 0x05, 0x23, 0x05, 0xE2, 0x04, 0xC2, 0x04, + 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x64, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, + 0x85, 0x0D, 0x85, 0x09, 0x85, 0x09, 0x85, 0x09, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x0D, + 0x65, 0x0D, 0x45, 0x0D, 0x44, 0x09, 0x24, 0x0D, 0x24, 0x0D, 0x24, 0x0D, 0x44, 0x11, 0x65, 0x11, + 0x85, 0x11, 0x86, 0x11, 0xA6, 0x11, 0x87, 0x11, 0x87, 0x0D, 0x87, 0x0D, 0x86, 0x11, 0x86, 0x0D, + 0x85, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x24, 0x09, 0x04, 0x05, 0x04, 0x01, 0x44, 0x01, 0xC4, 0x01, + 0x45, 0x02, 0xC6, 0x02, 0x46, 0x03, 0xA7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE9, 0x07, + 0xEA, 0x17, 0xED, 0x23, 0xF1, 0x33, 0xF7, 0x53, 0xFC, 0x6F, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x6F, + 0xF4, 0x43, 0xEC, 0x13, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x26, 0x03, + 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x23, 0x05, 0xE2, 0x04, 0xC2, 0x04, 0xC2, 0x04, + 0xC2, 0x08, 0x03, 0x09, 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x11, 0x85, 0x0D, 0x85, 0x0D, + 0x85, 0x09, 0x85, 0x09, 0x85, 0x09, 0x65, 0x09, 0x65, 0x09, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, + 0x24, 0x09, 0x04, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xC2, 0x08, 0xE3, 0x0C, 0x03, 0x0D, + 0x44, 0x0D, 0x65, 0x11, 0x86, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x0D, 0xA6, 0x0D, 0x85, 0x0D, + 0x85, 0x0D, 0x65, 0x0D, 0x45, 0x09, 0x24, 0x09, 0x04, 0x05, 0x23, 0x01, 0x64, 0x01, 0xE5, 0x01, + 0x86, 0x02, 0x06, 0x03, 0x67, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xEB, 0x0F, + 0xEF, 0x2B, 0xF4, 0x4B, 0xF8, 0x5B, 0xFB, 0x6B, 0xFE, 0x77, 0x32, 0x00, 0x4B, 0x00, 0xFD, 0x73, + 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x46, 0x03, 0xA5, 0x02, + 0x24, 0x02, 0xA4, 0x01, 0x23, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x08, 0xA2, 0x08, 0xC2, 0x08, + 0xE3, 0x08, 0x24, 0x0D, 0x64, 0x0D, 0x85, 0x11, 0x85, 0x11, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, + 0x85, 0x09, 0x65, 0x09, 0x65, 0x05, 0x65, 0x05, 0x64, 0x05, 0x44, 0x05, 0x43, 0x05, 0x23, 0x05, + 0xE3, 0x04, 0xC3, 0x04, 0xA3, 0x04, 0x62, 0x04, 0x61, 0x04, 0x41, 0x04, 0x81, 0x08, 0xA2, 0x08, + 0x03, 0x0D, 0x44, 0x0D, 0x66, 0x11, 0x87, 0x11, 0xA7, 0x11, 0xC7, 0x0D, 0xA6, 0x0D, 0xA5, 0x0D, + 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x03, 0x05, 0x23, 0x01, 0xA4, 0x01, 0x25, 0x02, + 0xC6, 0x02, 0x47, 0x03, 0x87, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEC, 0x13, + 0xF4, 0x3F, 0xFB, 0x6B, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, + 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xC8, 0x03, 0x87, 0x03, 0x26, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x83, 0x01, 0x02, 0x01, 0xA2, 0x00, + 0x82, 0x04, 0xA2, 0x04, 0xA2, 0x08, 0xC2, 0x08, 0xE3, 0x08, 0x24, 0x0D, 0x44, 0x0D, 0x64, 0x0D, + 0x65, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x44, 0x0D, 0x64, 0x09, 0x64, 0x09, 0x64, 0x05, 0x84, 0x05, + 0x84, 0x05, 0x84, 0x05, 0x64, 0x01, 0x43, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xA2, 0x04, 0x82, 0x04, + 0x41, 0x04, 0x21, 0x04, 0x21, 0x04, 0x41, 0x04, 0x81, 0x08, 0xC2, 0x08, 0x24, 0x0D, 0x65, 0x0D, + 0x86, 0x0D, 0xC7, 0x11, 0xC6, 0x0D, 0xC6, 0x0D, 0xA5, 0x0D, 0x84, 0x0D, 0x44, 0x09, 0x24, 0x09, + 0x23, 0x05, 0x23, 0x05, 0x64, 0x01, 0xE4, 0x01, 0x66, 0x02, 0x06, 0x03, 0x67, 0x03, 0x88, 0x03, + 0xA8, 0x03, 0xC7, 0x03, 0xC5, 0x03, 0xC5, 0x03, 0xEB, 0x13, 0xF5, 0x47, 0xFE, 0x77, 0x35, 0x00, + 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xEC, 0x1B, 0xE6, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x47, 0x03, 0xC6, 0x02, + 0x24, 0x02, 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x82, 0x04, 0xA2, 0x08, 0xC3, 0x08, + 0xE3, 0x08, 0x24, 0x0D, 0x44, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x44, 0x0D, 0x24, 0x0D, + 0x24, 0x09, 0x24, 0x09, 0x44, 0x05, 0x63, 0x05, 0x84, 0x01, 0x84, 0x01, 0xA4, 0x01, 0x83, 0x01, + 0x63, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC1, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x21, 0x04, + 0x41, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x44, 0x0D, 0x86, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, + 0xC5, 0x0D, 0xA5, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x23, 0x05, 0x23, 0x05, 0x43, 0x05, 0xA4, 0x05, + 0x25, 0x02, 0xA6, 0x02, 0x27, 0x03, 0x87, 0x03, 0xA8, 0x03, 0xA7, 0x03, 0xC6, 0x03, 0xC4, 0x03, + 0xC4, 0x03, 0xEA, 0x0B, 0xF4, 0x3F, 0xFD, 0x73, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF4, 0x47, + 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0x68, 0x03, 0xE6, 0x02, 0x25, 0x02, 0x84, 0x05, 0xE2, 0x04, 0xA1, 0x00, + 0x81, 0x00, 0x61, 0x00, 0x82, 0x04, 0xA3, 0x08, 0xE4, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x85, 0x0D, + 0x85, 0x09, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x24, 0x09, 0x43, 0x05, 0x63, 0x05, + 0x83, 0x01, 0xA3, 0x01, 0xE3, 0x01, 0xE4, 0x01, 0xC3, 0x01, 0xA3, 0x01, 0x63, 0x01, 0x42, 0x01, + 0x02, 0x01, 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x41, 0x04, 0x61, 0x04, 0x82, 0x04, + 0xE3, 0x04, 0x24, 0x09, 0x85, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, 0xC5, 0x0D, 0xA5, 0x0D, 0x64, 0x09, + 0x23, 0x09, 0x03, 0x05, 0x23, 0x05, 0x63, 0x05, 0xC4, 0x05, 0x65, 0x02, 0xC6, 0x02, 0x47, 0x03, + 0x87, 0x03, 0xA7, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xC5, 0x03, 0xC5, 0x03, 0xEB, 0x0F, 0xF4, 0x3F, + 0xFC, 0x6B, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xEC, 0x1B, 0xE6, 0x03, 0xE6, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x06, 0x03, + 0x45, 0x02, 0xA4, 0x01, 0x02, 0x05, 0x82, 0x04, 0x81, 0x04, 0x81, 0x00, 0x82, 0x04, 0xA2, 0x04, + 0xC3, 0x08, 0x04, 0x09, 0x44, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x44, 0x09, 0x44, 0x09, + 0x44, 0x05, 0x64, 0x05, 0x84, 0x05, 0xA4, 0x05, 0xC3, 0x01, 0x03, 0x02, 0x24, 0x02, 0x44, 0x02, + 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x04, 0x02, 0xC3, 0x01, 0xA3, 0x01, 0x63, 0x01, 0x02, 0x01, + 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x44, 0x09, 0x85, 0x0D, + 0xA6, 0x0D, 0xA6, 0x11, 0xA5, 0x0D, 0x85, 0x0D, 0x44, 0x09, 0x23, 0x05, 0x02, 0x05, 0x23, 0x01, + 0x63, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x67, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0x86, 0x03, + 0xA7, 0x07, 0xC9, 0x13, 0xEB, 0x1B, 0xF1, 0x2F, 0xF7, 0x4F, 0xFD, 0x73, 0x35, 0x00, 0x4B, 0x00, + 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x26, 0x03, 0xA5, 0x02, 0xE4, 0x01, 0x42, 0x01, 0xC2, 0x00, + 0x61, 0x00, 0x82, 0x04, 0xC2, 0x04, 0xC3, 0x04, 0xC3, 0x04, 0xC3, 0x08, 0x03, 0x09, 0x44, 0x09, + 0x64, 0x09, 0x85, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, 0x64, 0x05, 0xA4, 0x05, 0x04, 0x02, + 0x44, 0x02, 0x64, 0x02, 0x84, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, + 0xA5, 0x02, 0x65, 0x02, 0x45, 0x02, 0x04, 0x02, 0x83, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x41, 0x00, + 0x81, 0x04, 0xE2, 0x08, 0x24, 0x09, 0x65, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xA6, 0x11, 0x85, 0x0D, + 0x65, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, 0x23, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x45, 0x02, + 0xC6, 0x02, 0x46, 0x03, 0x86, 0x03, 0x85, 0x03, 0x86, 0x03, 0xA9, 0x0F, 0xCE, 0x2B, 0xF3, 0x43, + 0xF7, 0x53, 0xFB, 0x67, 0xFE, 0x77, 0x35, 0x00, 0x4A, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, + 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, 0x67, 0x03, + 0xE6, 0x02, 0x24, 0x02, 0x63, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x81, 0x00, 0xC3, 0x04, 0x04, 0x05, + 0x04, 0x09, 0x04, 0x09, 0x03, 0x05, 0x03, 0x09, 0x43, 0x09, 0x64, 0x09, 0x64, 0x09, 0x24, 0x09, + 0x03, 0x09, 0x24, 0x05, 0x84, 0x05, 0x04, 0x02, 0x85, 0x02, 0xC5, 0x02, 0x05, 0x03, 0x26, 0x03, + 0x46, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x27, 0x03, 0x07, 0x03, 0xE7, 0x02, + 0xA6, 0x02, 0x04, 0x02, 0x43, 0x01, 0xA1, 0x00, 0x61, 0x00, 0xA2, 0x04, 0x03, 0x09, 0x44, 0x0D, + 0x65, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x03, 0x05, + 0x23, 0x05, 0x43, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xC5, 0x02, 0x46, 0x03, 0x86, 0x03, + 0x84, 0x03, 0x85, 0x03, 0xAB, 0x17, 0xD3, 0x3F, 0xFB, 0x67, 0xFE, 0x77, 0xFE, 0x7B, 0x36, 0x00, + 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, 0x26, 0x03, 0x85, 0x02, 0xC3, 0x01, 0x02, 0x01, 0xA1, 0x00, + 0x61, 0x00, 0x62, 0x04, 0xC3, 0x04, 0x25, 0x09, 0x45, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, + 0x23, 0x09, 0x43, 0x09, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, 0x84, 0x05, 0x04, 0x02, 0x65, 0x02, + 0x05, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x88, 0x03, 0xA8, 0x03, + 0xA8, 0x03, 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x27, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, + 0x81, 0x00, 0xA2, 0x04, 0x03, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x24, 0x0D, + 0x04, 0x09, 0x04, 0x09, 0xE3, 0x08, 0x03, 0x05, 0x23, 0x05, 0x63, 0x01, 0xA4, 0x01, 0x05, 0x02, + 0x85, 0x02, 0xE6, 0x02, 0x46, 0x03, 0x85, 0x03, 0x83, 0x03, 0x84, 0x03, 0xAC, 0x1B, 0xD5, 0x4B, + 0xFF, 0x7B, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x06, 0x03, 0x45, 0x02, 0x83, 0x01, + 0xE2, 0x00, 0x81, 0x00, 0x61, 0x04, 0x82, 0x04, 0xE4, 0x08, 0x45, 0x09, 0x66, 0x09, 0x65, 0x09, + 0x45, 0x09, 0x24, 0x09, 0x23, 0x09, 0x03, 0x05, 0x23, 0x05, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, + 0x65, 0x02, 0xC6, 0x02, 0x26, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, + 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x47, 0x03, 0xA5, 0x02, + 0xC4, 0x01, 0x22, 0x01, 0xA2, 0x00, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x08, 0xC3, 0x08, 0xC3, 0x08, + 0xC3, 0x08, 0xC3, 0x08, 0xA3, 0x08, 0xC3, 0x08, 0xC2, 0x04, 0xE2, 0x04, 0x22, 0x01, 0x83, 0x01, + 0xE4, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x47, 0x03, 0x85, 0x03, 0x82, 0x03, 0x63, 0x03, + 0x8A, 0x13, 0xD5, 0x47, 0xFE, 0x7B, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, + 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0xC5, 0x02, + 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0x82, 0x00, 0x62, 0x04, 0x83, 0x08, 0xE4, 0x08, 0x45, 0x09, + 0x66, 0x09, 0x86, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x03, 0x09, 0x03, 0x05, 0x22, 0x01, 0x63, 0x01, + 0xE4, 0x01, 0x65, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x47, 0x03, 0x68, 0x03, 0x68, 0x03, 0x87, 0x03, + 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, + 0x67, 0x03, 0xC5, 0x02, 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0xA2, 0x00, 0xA2, 0x00, 0x81, 0x04, + 0x81, 0x04, 0x81, 0x04, 0x81, 0x04, 0x81, 0x04, 0x82, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0x02, 0x01, + 0x63, 0x01, 0xC3, 0x01, 0x24, 0x02, 0xA6, 0x02, 0x07, 0x03, 0x47, 0x03, 0x67, 0x03, 0x86, 0x03, + 0x63, 0x03, 0x64, 0x03, 0x8B, 0x13, 0xD4, 0x43, 0xFD, 0x73, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, + 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, + 0x46, 0x03, 0x85, 0x02, 0xC4, 0x01, 0x03, 0x01, 0xA2, 0x00, 0x82, 0x04, 0x82, 0x04, 0xC3, 0x08, + 0x04, 0x09, 0x65, 0x09, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x03, 0x09, 0xE2, 0x04, + 0x22, 0x01, 0xA3, 0x01, 0x44, 0x02, 0xC5, 0x02, 0x26, 0x03, 0x47, 0x03, 0x88, 0x03, 0x88, 0x03, + 0x68, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x66, 0x03, 0x66, 0x03, 0x66, 0x03, + 0x66, 0x03, 0x87, 0x03, 0x66, 0x03, 0x06, 0x03, 0x85, 0x02, 0xE4, 0x01, 0x63, 0x01, 0x23, 0x01, + 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x61, 0x00, 0x41, 0x00, 0x41, 0x00, 0x61, 0x04, 0xA2, 0x04, + 0x02, 0x01, 0x42, 0x01, 0xC3, 0x01, 0x44, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x47, 0x03, 0x67, 0x03, + 0x67, 0x03, 0x88, 0x07, 0x88, 0x0B, 0x8A, 0x13, 0xAF, 0x2B, 0xD6, 0x4F, 0xFD, 0x73, 0x38, 0x00, + 0x48, 0x00, 0xFF, 0x7B, 0xF6, 0x4F, 0xEE, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0xA8, 0x03, 0x26, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x82, 0x00, + 0xA2, 0x04, 0xC3, 0x08, 0x24, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x0D, + 0x23, 0x09, 0x02, 0x05, 0x62, 0x05, 0xE3, 0x01, 0x85, 0x02, 0x26, 0x03, 0x67, 0x03, 0x87, 0x03, + 0x87, 0x03, 0x88, 0x03, 0x68, 0x03, 0x47, 0x03, 0x47, 0x03, 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, + 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, 0x86, 0x03, 0x87, 0x03, 0x46, 0x03, 0x06, 0x03, 0x85, 0x02, + 0x24, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x00, 0x41, 0x00, + 0x81, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xA3, 0x01, 0x25, 0x02, 0xA5, 0x02, 0xE6, 0x02, 0x27, 0x03, + 0x47, 0x03, 0x66, 0x03, 0x67, 0x03, 0x8A, 0x0F, 0xAD, 0x27, 0xB2, 0x3B, 0xD6, 0x4F, 0xFA, 0x63, + 0xFE, 0x7B, 0x38, 0x00, 0x47, 0x00, 0xFF, 0x7B, 0xF6, 0x4F, 0xEE, 0x1B, 0xE7, 0x03, 0xE6, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x06, 0x03, 0x24, 0x02, 0x63, 0x01, 0xC1, 0x00, + 0x61, 0x00, 0x81, 0x00, 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, + 0x44, 0x0D, 0x44, 0x09, 0x23, 0x09, 0x22, 0x05, 0x83, 0x05, 0x24, 0x02, 0xC5, 0x02, 0x46, 0x03, + 0x66, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x47, 0x03, 0x27, 0x03, 0x06, 0x03, 0x06, 0x03, + 0x05, 0x03, 0xE5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x66, 0x03, + 0x46, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x64, 0x02, 0x04, 0x02, 0x83, 0x01, 0xE2, 0x00, 0xA2, 0x00, + 0x62, 0x00, 0x81, 0x00, 0xC2, 0x00, 0x42, 0x01, 0xC4, 0x01, 0x25, 0x02, 0xA6, 0x02, 0x07, 0x03, + 0x27, 0x03, 0x47, 0x03, 0x66, 0x03, 0x65, 0x03, 0x67, 0x03, 0xAC, 0x1B, 0xD3, 0x3F, 0xFA, 0x63, + 0xFC, 0x6F, 0xFE, 0x77, 0x37, 0x00, 0x46, 0x00, 0xFE, 0x7B, 0xFD, 0x73, 0xFA, 0x63, 0xF3, 0x3F, + 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x47, 0x03, 0xA6, 0x02, + 0xE4, 0x01, 0x22, 0x01, 0x81, 0x00, 0x61, 0x00, 0x82, 0x00, 0xE3, 0x04, 0x23, 0x09, 0x44, 0x0D, + 0x64, 0x0D, 0x65, 0x11, 0x44, 0x0D, 0x44, 0x0D, 0x23, 0x09, 0x23, 0x09, 0x22, 0x05, 0x83, 0x05, + 0x04, 0x02, 0x85, 0x02, 0x06, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xC6, 0x02, + 0xA6, 0x02, 0x85, 0x02, 0x85, 0x02, 0x65, 0x02, 0x64, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, + 0xC5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0xC5, 0x02, 0x85, 0x02, + 0x04, 0x02, 0x83, 0x01, 0x23, 0x01, 0xE2, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xC3, 0x01, 0x24, 0x02, + 0xA6, 0x02, 0x07, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x64, 0x03, 0x86, 0x03, + 0xAD, 0x1F, 0xD7, 0x53, 0x39, 0x00, 0x47, 0x00, 0xFE, 0x77, 0xFA, 0x63, 0xF6, 0x4F, 0xF2, 0x3F, + 0xEE, 0x27, 0xEA, 0x0F, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x67, 0x03, 0x06, 0x03, + 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, 0x61, 0x00, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x24, 0x09, + 0x64, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x03, 0x09, 0x02, 0x05, 0x22, 0x05, + 0x62, 0x01, 0xC3, 0x01, 0x24, 0x02, 0x85, 0x02, 0x85, 0x02, 0x84, 0x02, 0x64, 0x02, 0x44, 0x02, + 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0x04, 0x02, + 0x04, 0x02, 0x24, 0x02, 0x44, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xE6, 0x02, 0x06, 0x03, + 0xE5, 0x02, 0xA5, 0x02, 0x24, 0x02, 0xA4, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC4, 0x01, 0x24, 0x02, + 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x67, 0x03, 0x68, 0x03, 0x88, 0x03, 0x86, 0x03, 0x63, 0x03, + 0x84, 0x03, 0xAC, 0x1B, 0xD6, 0x4F, 0x39, 0x00, 0x48, 0x00, 0xFC, 0x6F, 0xF6, 0x4F, 0xEF, 0x2B, + 0xEA, 0x17, 0xE8, 0x0F, 0xE8, 0x07, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x47, 0x03, + 0xC6, 0x02, 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0x61, 0x04, 0x62, 0x04, 0xA3, 0x08, 0x04, 0x09, + 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x04, 0x09, 0xE3, 0x08, 0xE3, 0x04, + 0x02, 0x01, 0x22, 0x01, 0x62, 0x01, 0xA3, 0x01, 0xE3, 0x01, 0xE3, 0x01, 0xE3, 0x01, 0xC3, 0x05, + 0xA3, 0x01, 0x83, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x84, 0x01, + 0x84, 0x01, 0x84, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC3, 0x01, 0xE4, 0x01, 0x45, 0x06, 0x85, 0x02, + 0xE6, 0x02, 0x06, 0x03, 0xE6, 0x02, 0xA5, 0x02, 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x45, 0x02, + 0x85, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x46, 0x03, 0x67, 0x03, 0x67, 0x03, 0x88, 0x03, 0x85, 0x03, + 0x83, 0x03, 0x83, 0x03, 0xAB, 0x17, 0xD5, 0x4B, 0xFE, 0x77, 0x38, 0x00, 0x48, 0x00, 0xFB, 0x6B, + 0xF3, 0x3F, 0xEA, 0x0F, 0xE4, 0x03, 0xE4, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xA8, 0x03, 0x26, 0x03, 0x85, 0x02, 0xC3, 0x01, 0x22, 0x01, 0xA1, 0x00, 0x61, 0x04, 0x62, 0x04, + 0xA3, 0x08, 0x04, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x04, 0x0D, + 0xE4, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x02, 0x01, 0x22, 0x01, 0x43, 0x01, 0x63, 0x01, 0x63, 0x05, + 0x63, 0x05, 0x42, 0x05, 0x42, 0x05, 0x22, 0x05, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x23, 0x05, + 0x23, 0x05, 0x23, 0x05, 0x44, 0x05, 0x44, 0x05, 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x83, 0x05, + 0xC4, 0x05, 0x25, 0x06, 0x85, 0x02, 0xC5, 0x02, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, + 0xC6, 0x02, 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, + 0x87, 0x03, 0x87, 0x03, 0x86, 0x07, 0x88, 0x0B, 0xAE, 0x27, 0xD6, 0x4F, 0xFD, 0x77, 0x38, 0x00, + 0x48, 0x00, 0xFB, 0x6B, 0xF2, 0x3B, 0xE9, 0x0B, 0xE4, 0x03, 0xE4, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x06, 0x03, 0x64, 0x02, 0xA3, 0x01, 0x02, 0x01, 0x81, 0x00, + 0x41, 0x04, 0x41, 0x04, 0x82, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x65, 0x0D, + 0x45, 0x0D, 0x25, 0x0D, 0x24, 0x09, 0x04, 0x09, 0x24, 0x05, 0x23, 0x05, 0x23, 0x05, 0x43, 0x05, + 0x43, 0x05, 0x43, 0x05, 0x43, 0x09, 0x43, 0x09, 0x43, 0x09, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, + 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x05, 0x44, 0x05, 0x44, 0x05, 0x44, 0x05, 0x23, 0x05, + 0x43, 0x05, 0x43, 0x05, 0x84, 0x05, 0xC4, 0x05, 0x04, 0x06, 0x44, 0x02, 0xA5, 0x02, 0xC5, 0x02, + 0xE5, 0x02, 0x06, 0x03, 0x06, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x66, 0x03, 0x66, 0x03, + 0x66, 0x03, 0x66, 0x03, 0x87, 0x03, 0x89, 0x0F, 0xAC, 0x23, 0xD0, 0x33, 0xD4, 0x47, 0xF9, 0x63, + 0xFE, 0x7B, 0x38, 0x00, 0x47, 0x00, 0xFC, 0x6B, 0xF3, 0x3F, 0xEB, 0x13, 0xE6, 0x03, 0xE5, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x06, 0x03, 0x44, 0x02, 0x83, 0x01, + 0xE1, 0x00, 0x81, 0x00, 0x61, 0x00, 0x41, 0x00, 0x81, 0x04, 0xC2, 0x04, 0x03, 0x09, 0x24, 0x0D, + 0x45, 0x0D, 0x66, 0x11, 0x65, 0x11, 0x45, 0x0D, 0x45, 0x0D, 0x45, 0x09, 0x45, 0x09, 0x44, 0x05, + 0x44, 0x05, 0x44, 0x09, 0x63, 0x09, 0x63, 0x09, 0x63, 0x09, 0x84, 0x09, 0x84, 0x09, 0x85, 0x09, + 0x85, 0x09, 0x85, 0x05, 0x84, 0x09, 0x64, 0x05, 0x64, 0x05, 0x64, 0x05, 0x84, 0x05, 0x84, 0x05, + 0x85, 0x05, 0x85, 0x05, 0x64, 0x05, 0x64, 0x05, 0x63, 0x05, 0x63, 0x05, 0x83, 0x05, 0xA3, 0x05, + 0x04, 0x06, 0x65, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, + 0x67, 0x03, 0x86, 0x03, 0x85, 0x03, 0x64, 0x03, 0x86, 0x03, 0x8C, 0x1B, 0xB2, 0x3F, 0xF8, 0x5F, + 0xFB, 0x6B, 0xFD, 0x73, 0x39, 0x00, 0x44, 0x00, 0xFC, 0x6B, 0xF4, 0x43, 0xEC, 0x13, 0xE7, 0x03, + 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x05, 0x03, 0x64, 0x02, + 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0xA2, 0x04, 0xE3, 0x08, + 0x04, 0x09, 0x45, 0x0D, 0x66, 0x11, 0x66, 0x11, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x09, + 0x65, 0x09, 0x44, 0x09, 0x44, 0x09, 0x43, 0x09, 0x63, 0x09, 0x64, 0x09, 0x64, 0x09, 0x84, 0x09, + 0x85, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, + 0xA5, 0x09, 0xA5, 0x09, 0xA6, 0x09, 0x85, 0x09, 0x64, 0x05, 0x44, 0x05, 0x43, 0x05, 0x22, 0x05, + 0x42, 0x05, 0x83, 0x05, 0x04, 0x02, 0x65, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x47, 0x03, 0x67, 0x03, + 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x85, 0x03, 0x84, 0x03, 0x86, 0x03, 0xAE, 0x27, 0xD7, 0x57, + 0x3C, 0x00, 0x44, 0x00, 0xFC, 0x6B, 0xF3, 0x3B, 0xEB, 0x0F, 0xE5, 0x03, 0xE5, 0x03, 0xE8, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x26, 0x03, 0x84, 0x02, 0xC3, 0x01, 0x22, 0x01, + 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x82, 0x04, 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x45, 0x0D, + 0x65, 0x0D, 0x66, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x65, 0x09, 0x44, 0x09, + 0x44, 0x09, 0x23, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, + 0x85, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, + 0xA6, 0x09, 0xA5, 0x09, 0x85, 0x09, 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x23, 0x09, 0x63, 0x05, + 0xA3, 0x01, 0x04, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, + 0x87, 0x03, 0x85, 0x03, 0x84, 0x03, 0x87, 0x03, 0xAF, 0x27, 0xF8, 0x5B, 0x3C, 0x00, 0x44, 0x00, + 0xFB, 0x6B, 0xF3, 0x3B, 0xEA, 0x0B, 0xE4, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE9, 0x03, 0xE9, 0x03, + 0xE9, 0x03, 0xC8, 0x03, 0x46, 0x03, 0xC5, 0x02, 0x03, 0x02, 0x42, 0x01, 0xC2, 0x00, 0x61, 0x04, + 0x62, 0x04, 0x82, 0x08, 0xC3, 0x08, 0x04, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x0D, 0x85, 0x0D, + 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x03, 0x09, + 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x44, 0x05, 0x85, 0x09, + 0xA6, 0x0D, 0xC6, 0x0D, 0xA6, 0x0D, 0x85, 0x0D, 0xA5, 0x0D, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, + 0xA5, 0x0D, 0xA5, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x43, 0x09, 0x63, 0x05, 0x83, 0x01, 0xA3, 0x01, + 0x24, 0x02, 0x85, 0x02, 0x06, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA5, 0x03, + 0xA4, 0x03, 0xA7, 0x03, 0xCF, 0x27, 0xF8, 0x57, 0x3C, 0x00, 0x45, 0x00, 0xFC, 0x6F, 0xF4, 0x43, + 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, + 0x67, 0x03, 0x06, 0x03, 0x64, 0x02, 0xA3, 0x01, 0x22, 0x01, 0xA2, 0x04, 0x82, 0x04, 0xA3, 0x08, + 0xE3, 0x08, 0x04, 0x09, 0x24, 0x09, 0x44, 0x09, 0x64, 0x09, 0x65, 0x09, 0x65, 0x0D, 0x65, 0x0D, + 0x65, 0x09, 0x64, 0x09, 0x43, 0x05, 0x43, 0x05, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xA3, 0x04, + 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0xC2, 0x04, 0x03, 0x05, 0x45, 0x09, 0xA6, 0x0D, 0xC6, 0x0D, + 0xA6, 0x0D, 0x86, 0x0D, 0xA6, 0x0D, 0xA5, 0x0D, 0xA5, 0x0D, 0xC5, 0x0D, 0xC6, 0x0D, 0xC6, 0x0D, + 0xA6, 0x0D, 0x85, 0x09, 0x64, 0x09, 0x63, 0x05, 0x43, 0x01, 0x63, 0x01, 0xA3, 0x01, 0x24, 0x02, + 0xC6, 0x02, 0x47, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xC7, 0x03, + 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, 0x45, 0x00, 0xFD, 0x73, 0xF8, 0x57, 0xF2, 0x37, + 0xEE, 0x27, 0xEB, 0x17, 0xEA, 0x0B, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, + 0x47, 0x03, 0xC6, 0x02, 0x24, 0x02, 0xA3, 0x01, 0x23, 0x01, 0xC2, 0x04, 0xC3, 0x04, 0xE3, 0x04, + 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, + 0x44, 0x05, 0x43, 0x05, 0x43, 0x05, 0x23, 0x01, 0x02, 0x01, 0xC2, 0x00, 0x82, 0x04, 0x61, 0x04, + 0x41, 0x04, 0x41, 0x04, 0x81, 0x04, 0xC2, 0x04, 0x24, 0x09, 0x65, 0x09, 0x86, 0x0D, 0xA6, 0x0D, + 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xC6, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x0D, + 0xA6, 0x09, 0x85, 0x09, 0x64, 0x05, 0x23, 0x05, 0x22, 0x05, 0x63, 0x01, 0xE4, 0x01, 0x85, 0x02, + 0x06, 0x03, 0x67, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, + 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, 0x45, 0x00, 0xFE, 0x7B, 0xFC, 0x6B, 0xF9, 0x5F, 0xF6, 0x4F, + 0xF0, 0x2F, 0xEB, 0x13, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0x87, 0x03, + 0x27, 0x03, 0xA5, 0x02, 0x24, 0x02, 0x83, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xA2, 0x04, + 0xA2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0x03, 0x05, 0x03, 0x05, 0x03, 0x01, + 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x22, 0x01, 0xC2, 0x00, 0x81, 0x00, 0x41, 0x00, 0x20, 0x00, + 0x40, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x04, 0x24, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0xA6, 0x11, + 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x0D, 0xA6, 0x0D, 0xA6, 0x09, + 0x85, 0x09, 0x65, 0x05, 0x44, 0x05, 0x23, 0x05, 0x63, 0x05, 0xC3, 0x01, 0x44, 0x02, 0xE5, 0x02, + 0x46, 0x03, 0x86, 0x03, 0xC7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, + 0xFE, 0x7B, 0x3E, 0x00, 0x42, 0x00, 0xFC, 0x6F, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, + 0xE7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x24, 0x02, + 0x83, 0x01, 0x43, 0x01, 0xE2, 0x00, 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE2, 0x04, + 0x02, 0x01, 0x02, 0x01, 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x83, 0x01, 0x83, 0x01, 0x62, 0x01, + 0x02, 0x01, 0xA1, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x04, 0x41, 0x04, 0x81, 0x04, 0xA2, 0x04, + 0x03, 0x09, 0x44, 0x09, 0x85, 0x0D, 0xC6, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x11, + 0xC7, 0x11, 0xA7, 0x0D, 0xA6, 0x09, 0xA6, 0x09, 0x86, 0x09, 0x65, 0x09, 0x44, 0x09, 0x23, 0x09, + 0x43, 0x05, 0xA3, 0x05, 0x24, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x86, 0x03, 0xC7, 0x03, 0xE6, 0x03, + 0xE4, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xF6, 0x4F, + 0xED, 0x1F, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, + 0x67, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x24, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x23, 0x01, 0x22, 0x01, + 0x42, 0x05, 0x42, 0x05, 0x62, 0x01, 0x63, 0x01, 0x83, 0x01, 0xA4, 0x01, 0xC4, 0x01, 0xE4, 0x01, + 0x04, 0x02, 0x24, 0x02, 0x03, 0x02, 0xA3, 0x01, 0x22, 0x01, 0xC1, 0x00, 0x60, 0x00, 0x40, 0x00, + 0x20, 0x04, 0x61, 0x04, 0xA2, 0x04, 0x03, 0x09, 0x44, 0x0D, 0x85, 0x11, 0xC6, 0x11, 0xC7, 0x15, + 0xC7, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x0D, 0xA6, 0x0D, 0x86, 0x09, 0x65, 0x09, + 0x44, 0x05, 0x24, 0x05, 0x03, 0x09, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, 0x85, 0x02, 0x06, 0x03, + 0x66, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, + 0x3E, 0x00, 0x42, 0x00, 0xFE, 0x7B, 0xF6, 0x4B, 0xED, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x46, 0x03, 0x06, 0x03, 0xA5, 0x02, + 0x45, 0x02, 0x05, 0x02, 0xE4, 0x01, 0xC4, 0x01, 0xC3, 0x01, 0xE3, 0x01, 0x04, 0x02, 0x24, 0x02, + 0x45, 0x02, 0x45, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0x84, 0x02, 0x44, 0x02, + 0xE3, 0x01, 0x42, 0x01, 0xC1, 0x00, 0x40, 0x00, 0x20, 0x00, 0x41, 0x04, 0xA2, 0x04, 0x24, 0x09, + 0x65, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, + 0xC7, 0x11, 0xA6, 0x0D, 0x85, 0x09, 0x44, 0x09, 0x24, 0x05, 0x03, 0x05, 0x03, 0x05, 0x43, 0x05, + 0x83, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x66, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, + 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3E, 0x00, 0x42, 0x00, 0xFD, 0x73, 0xF4, 0x47, + 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xA7, 0x03, + 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x85, 0x02, 0x65, 0x02, + 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x26, 0x03, + 0x46, 0x03, 0x46, 0x03, 0x26, 0x03, 0xC5, 0x02, 0x64, 0x06, 0xC3, 0x05, 0x02, 0x01, 0x60, 0x00, + 0x20, 0x00, 0x41, 0x04, 0xC3, 0x08, 0x45, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xC6, 0x11, 0xC6, 0x11, + 0xA6, 0x11, 0x86, 0x0D, 0x87, 0x0D, 0xA7, 0x11, 0xC7, 0x11, 0xA6, 0x0D, 0x65, 0x0D, 0x24, 0x09, + 0x03, 0x05, 0x02, 0x05, 0x03, 0x05, 0x43, 0x01, 0x84, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xE6, 0x02, + 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, + 0x3E, 0x00, 0x42, 0x00, 0xFD, 0x77, 0xF5, 0x4B, 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x47, 0x03, + 0x27, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x27, 0x03, + 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x06, 0x03, + 0x85, 0x02, 0xC3, 0x05, 0x02, 0x01, 0x61, 0x00, 0x20, 0x00, 0x62, 0x04, 0xE3, 0x08, 0x65, 0x0D, + 0xA6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x11, 0xA7, 0x0D, 0xA7, 0x0D, 0xA7, 0x11, + 0xA6, 0x11, 0x86, 0x0D, 0x44, 0x09, 0x03, 0x09, 0xE2, 0x04, 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, + 0x83, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, + 0xE8, 0x03, 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xF6, 0x4F, 0xED, 0x1B, + 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA7, 0x03, + 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0x06, 0x03, + 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0xA8, 0x03, + 0xA8, 0x03, 0x67, 0x03, 0xE6, 0x02, 0x44, 0x02, 0x83, 0x01, 0xE2, 0x00, 0x61, 0x00, 0x41, 0x00, + 0x82, 0x04, 0x03, 0x09, 0x85, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x11, + 0xC7, 0x11, 0xA7, 0x0D, 0xA7, 0x11, 0x86, 0x11, 0x65, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, + 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, 0x63, 0x05, 0xA3, 0x01, 0x24, 0x02, 0xC5, 0x02, 0x46, 0x03, + 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3E, 0x00, + 0x42, 0x00, 0xFE, 0x77, 0xF6, 0x4B, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x46, 0x03, + 0x46, 0x03, 0x26, 0x03, 0x26, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, + 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x88, 0x03, 0x88, 0x03, 0x27, 0x03, 0x85, 0x02, 0xE3, 0x01, + 0x22, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x62, 0x04, 0xA3, 0x08, 0x24, 0x09, 0xA5, 0x0D, 0xC5, 0x11, + 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xE7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x86, 0x11, + 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, 0x83, 0x05, + 0xC3, 0x01, 0x44, 0x02, 0xC5, 0x02, 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3C, 0x00, 0x44, 0x00, 0xFE, 0x77, 0xFC, 0x6B, 0xF8, 0x5B, + 0xF2, 0x3B, 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0x88, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x46, 0x03, + 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, + 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0xE6, 0x02, 0x44, 0x02, 0x83, 0x01, 0xE2, 0x00, 0xA1, 0x00, + 0x82, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x44, 0x0D, 0xA5, 0x11, 0xC5, 0x11, 0xC6, 0x11, 0xC6, 0x11, + 0xC7, 0x11, 0xE7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x04, 0x09, + 0xE3, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0x03, 0x05, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, 0x64, 0x02, + 0xE5, 0x02, 0x46, 0x03, 0xA7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xEE, 0x23, 0xF7, 0x53, + 0xFE, 0x7B, 0x3C, 0x00, 0x44, 0x00, 0xFB, 0x63, 0xF5, 0x47, 0xF1, 0x33, 0xED, 0x1F, 0xEA, 0x0B, + 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, + 0xA8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, + 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, + 0x27, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x42, 0x01, 0xC1, 0x00, 0xA1, 0x04, 0xA2, 0x04, 0xE3, 0x04, + 0x24, 0x09, 0x64, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, + 0xC7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x24, 0x09, 0xE3, 0x04, 0xE2, 0x04, + 0xE2, 0x04, 0xE3, 0x04, 0x43, 0x05, 0xA4, 0x05, 0x04, 0x06, 0x85, 0x02, 0x06, 0x03, 0x66, 0x03, + 0xA7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, + 0x45, 0x00, 0xFE, 0x77, 0xF6, 0x4F, 0xEF, 0x23, 0xE9, 0x0F, 0xE8, 0x0B, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xC7, 0x03, 0xC8, 0x03, + 0xC8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x67, 0x03, + 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x46, 0x03, 0x26, 0x03, 0xE6, 0x02, + 0x44, 0x02, 0xA3, 0x01, 0x22, 0x05, 0xC1, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0x23, 0x05, 0x64, 0x09, + 0x85, 0x0D, 0xA5, 0x11, 0xA6, 0x11, 0xA6, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xC7, 0x11, 0xC6, 0x11, + 0xA6, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x00, + 0xE3, 0x00, 0x44, 0x01, 0xA4, 0x05, 0x25, 0x06, 0xA6, 0x06, 0x26, 0x03, 0x66, 0x03, 0xA7, 0x03, + 0xC6, 0x03, 0xC5, 0x03, 0xC8, 0x03, 0xCF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x39, 0x00, 0x47, 0x00, + 0xFE, 0x77, 0xFC, 0x6F, 0xF8, 0x5B, 0xF1, 0x33, 0xEA, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, + 0x66, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x26, 0x03, 0xE5, 0x02, 0xA5, 0x02, + 0x64, 0x02, 0xE4, 0x01, 0x63, 0x01, 0x02, 0x05, 0xE2, 0x08, 0xE3, 0x08, 0x23, 0x09, 0x64, 0x09, + 0x85, 0x0D, 0xA5, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA7, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xA6, 0x11, + 0xA6, 0x11, 0xA6, 0x11, 0x85, 0x11, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x03, 0x05, + 0xE3, 0x04, 0x03, 0x01, 0x44, 0x01, 0xC4, 0x01, 0x45, 0x06, 0xE6, 0x06, 0x46, 0x03, 0x66, 0x03, + 0x87, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x39, 0x00, + 0x47, 0x00, 0xFA, 0x63, 0xF6, 0x4B, 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xC7, 0x03, + 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x46, 0x03, 0x06, 0x03, 0xC6, 0x02, 0x65, 0x02, + 0x04, 0x02, 0xE4, 0x01, 0x83, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x09, 0x24, 0x09, 0x64, 0x09, + 0x85, 0x0D, 0xA5, 0x0D, 0xC6, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x87, 0x11, 0x87, 0x11, 0x86, 0x11, + 0xA6, 0x11, 0xA6, 0x11, 0xA5, 0x11, 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x24, 0x09, + 0x24, 0x09, 0x03, 0x05, 0x03, 0x05, 0x43, 0x05, 0xC4, 0x01, 0x65, 0x02, 0x06, 0x03, 0x46, 0x03, + 0x66, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, + 0x38, 0x00, 0x48, 0x00, 0xFE, 0x73, 0xF6, 0x4B, 0xEF, 0x23, 0xE9, 0x13, 0xE8, 0x0B, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x66, 0x03, 0x06, 0x03, 0xA6, 0x02, + 0x45, 0x02, 0xC4, 0x01, 0x83, 0x01, 0x63, 0x01, 0x43, 0x05, 0x43, 0x05, 0x44, 0x05, 0x65, 0x09, + 0x65, 0x0D, 0x85, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x87, 0x11, + 0x66, 0x11, 0x86, 0x15, 0xA6, 0x15, 0xA6, 0x11, 0x85, 0x11, 0x64, 0x0D, 0x24, 0x09, 0x23, 0x09, + 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, 0x23, 0x09, 0x23, 0x05, 0x63, 0x05, 0xE4, 0x01, 0x85, 0x02, + 0x06, 0x03, 0x66, 0x03, 0x66, 0x03, 0x87, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, + 0xF6, 0x53, 0xFE, 0x7B, 0x36, 0x00, 0x4A, 0x00, 0xFE, 0x77, 0xFD, 0x73, 0xF8, 0x5B, 0xF0, 0x2F, + 0xE9, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x86, 0x03, + 0x46, 0x03, 0x06, 0x03, 0x85, 0x02, 0x25, 0x02, 0xC4, 0x01, 0x64, 0x01, 0x23, 0x01, 0x23, 0x05, + 0x23, 0x05, 0x44, 0x05, 0x65, 0x09, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xC6, 0x11, 0xC7, 0x11, + 0xE7, 0x11, 0xE8, 0x11, 0xC8, 0x11, 0x87, 0x11, 0x87, 0x15, 0x86, 0x15, 0x86, 0x11, 0xA6, 0x11, + 0x85, 0x11, 0x44, 0x0D, 0x23, 0x09, 0x03, 0x05, 0x23, 0x09, 0x44, 0x09, 0x44, 0x09, 0x43, 0x09, + 0x63, 0x05, 0xA3, 0x05, 0x24, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x66, 0x03, 0x86, 0x03, 0x87, 0x03, + 0xA5, 0x03, 0xA4, 0x03, 0xA6, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, + 0xFD, 0x73, 0xF9, 0x5F, 0xF6, 0x4B, 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x67, 0x03, + 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x66, 0x03, 0x26, 0x03, 0xE5, 0x02, 0x85, 0x02, 0x04, 0x02, + 0xC4, 0x01, 0x84, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x85, 0x0D, + 0xA6, 0x0D, 0xC7, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x15, 0xE7, 0x15, 0xE8, 0x15, 0xC8, 0x15, + 0xA8, 0x15, 0x87, 0x15, 0x86, 0x15, 0x86, 0x11, 0x85, 0x11, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, + 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x43, 0x05, 0x63, 0x05, 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, + 0xE6, 0x02, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, + 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFB, 0x67, 0xF5, 0x43, 0xEE, 0x23, + 0xEA, 0x13, 0xE9, 0x0B, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC7, 0x03, 0xA8, 0x03, 0x67, 0x03, 0x27, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xE5, 0x02, 0x05, 0x03, + 0x05, 0x03, 0xC5, 0x02, 0x65, 0x02, 0x04, 0x06, 0xA4, 0x05, 0x64, 0x05, 0x63, 0x05, 0x43, 0x05, + 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x65, 0x0D, 0xA6, 0x0D, 0xC7, 0x11, 0xC7, 0x11, 0xC6, 0x11, + 0xC6, 0x11, 0xC7, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC7, 0x15, 0xA7, 0x11, + 0x86, 0x11, 0x85, 0x0D, 0x64, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x04, 0x09, 0xE3, 0x04, 0xE3, 0x04, + 0x23, 0x05, 0x83, 0x01, 0xE3, 0x01, 0x64, 0x02, 0xC5, 0x02, 0x06, 0x03, 0x47, 0x03, 0x67, 0x03, + 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, + 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x5F, 0xF1, 0x33, 0xE9, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x27, 0x03, 0xE6, 0x02, + 0x86, 0x02, 0x65, 0x02, 0x44, 0x02, 0x44, 0x02, 0x64, 0x02, 0x65, 0x02, 0x24, 0x02, 0xE4, 0x05, + 0x84, 0x05, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x64, 0x09, + 0x85, 0x0D, 0xA6, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x15, + 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC7, 0x15, 0xA7, 0x11, 0x86, 0x11, 0x65, 0x0D, 0x44, 0x09, + 0x24, 0x09, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x04, 0xE2, 0x04, 0x42, 0x01, 0xA3, 0x01, 0x24, 0x02, + 0xA5, 0x02, 0x06, 0x03, 0x27, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, + 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x5F, + 0xF1, 0x2F, 0xE8, 0x03, 0xE4, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, + 0xA7, 0x03, 0x46, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x45, 0x02, 0xE5, 0x01, 0xC4, 0x01, 0xC4, 0x01, + 0xA4, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0xA4, 0x05, 0x63, 0x05, 0x43, 0x05, 0x03, 0x09, 0x03, 0x09, + 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, 0x85, 0x0D, 0xA6, 0x0D, 0xC7, 0x11, 0xC7, 0x11, + 0xC7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, + 0xC7, 0x11, 0xA7, 0x11, 0xA6, 0x11, 0x85, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x04, 0x09, 0x03, 0x05, + 0xE2, 0x04, 0x02, 0x01, 0x62, 0x01, 0xE3, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x26, 0x03, 0x47, 0x03, + 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, + 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x33, 0xEA, 0x07, 0xE6, 0x03, + 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, + 0x05, 0x02, 0xA4, 0x01, 0x64, 0x01, 0x44, 0x05, 0x44, 0x05, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, + 0x43, 0x05, 0x43, 0x05, 0x23, 0x09, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x24, 0x09, 0x45, 0x09, + 0x65, 0x09, 0x86, 0x0D, 0xA7, 0x0D, 0xC7, 0x11, 0xC8, 0x11, 0xC8, 0x11, 0xE8, 0x11, 0xC8, 0x11, + 0xC7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0x86, 0x11, + 0x86, 0x0D, 0x65, 0x0D, 0x24, 0x09, 0x03, 0x09, 0x03, 0x05, 0x02, 0x01, 0x22, 0x01, 0x83, 0x01, + 0x04, 0x02, 0x85, 0x02, 0x06, 0x03, 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x86, 0x03, + 0xA7, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, + 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x67, 0x03, + 0x27, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x64, 0x01, 0x23, 0x01, 0xE3, 0x04, + 0xE3, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, + 0x23, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x09, 0x25, 0x0D, 0x66, 0x0D, 0x86, 0x0D, 0xA7, 0x0D, + 0xC7, 0x11, 0xC7, 0x11, 0xC8, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0xA6, 0x11, 0xA6, 0x0D, + 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x45, 0x0D, 0x24, 0x09, + 0x03, 0x05, 0x02, 0x05, 0x22, 0x01, 0x63, 0x01, 0xE3, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x27, 0x03, + 0x47, 0x03, 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x86, 0x03, 0xA7, 0x03, 0xA5, 0x03, 0xA4, 0x03, + 0xC7, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, + 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x85, 0x02, 0x45, 0x02, 0x04, 0x02, + 0xC4, 0x01, 0x63, 0x01, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, + 0x03, 0x09, 0x03, 0x09, 0x04, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x24, 0x0D, 0x04, 0x0D, 0xE3, 0x08, + 0xE3, 0x08, 0x04, 0x09, 0x45, 0x09, 0x66, 0x0D, 0xA6, 0x11, 0xA7, 0x11, 0xC7, 0x11, 0xA7, 0x11, + 0xA6, 0x11, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, + 0x66, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x09, 0x03, 0x05, 0x22, 0x05, 0x63, 0x01, + 0xC3, 0x01, 0x24, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x47, 0x03, 0x46, 0x03, 0x66, 0x03, + 0x67, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xC4, 0x03, 0xC7, 0x03, 0xCE, 0x23, 0xF7, 0x53, + 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF1, 0x37, 0xEA, 0x0B, 0xE5, 0x03, 0xE6, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x26, 0x03, + 0xC5, 0x02, 0x65, 0x02, 0xE4, 0x01, 0x83, 0x01, 0x63, 0x01, 0x43, 0x01, 0x23, 0x05, 0x03, 0x05, + 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, + 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x24, 0x0D, 0xE3, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x04, 0x09, + 0x45, 0x0D, 0x86, 0x11, 0xA6, 0x11, 0xA6, 0x15, 0x86, 0x11, 0x65, 0x0D, 0x45, 0x0D, 0x45, 0x0D, + 0x65, 0x0D, 0x86, 0x11, 0x86, 0x11, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x09, 0x24, 0x09, + 0x03, 0x09, 0x03, 0x09, 0x02, 0x05, 0x63, 0x05, 0xA3, 0x01, 0x24, 0x02, 0x85, 0x02, 0xC5, 0x02, + 0xE6, 0x02, 0x26, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, + 0xA6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, + 0xFA, 0x63, 0xF1, 0x37, 0xE9, 0x0B, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x46, 0x03, 0xA5, 0x02, 0x24, 0x02, 0xC3, 0x05, 0x42, 0x05, + 0x02, 0x05, 0xE2, 0x00, 0xE2, 0x00, 0xC2, 0x04, 0xE2, 0x08, 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, + 0x43, 0x09, 0x44, 0x09, 0x64, 0x09, 0x64, 0x09, 0x85, 0x09, 0xA6, 0x0D, 0xA6, 0x11, 0x86, 0x0D, + 0x24, 0x0D, 0xE3, 0x08, 0xC2, 0x04, 0xC3, 0x04, 0xE3, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x86, 0x11, + 0xA6, 0x11, 0x85, 0x11, 0x44, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x66, 0x0D, + 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, 0x22, 0x05, 0x42, 0x05, + 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, 0xC5, 0x02, 0xE5, 0x02, 0x05, 0x03, 0x26, 0x03, 0x46, 0x03, + 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xC5, 0x03, 0xC8, 0x03, + 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF1, 0x37, 0xEA, 0x0B, + 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x46, 0x03, + 0xC5, 0x02, 0x24, 0x02, 0xA3, 0x01, 0x42, 0x05, 0xE2, 0x04, 0xA2, 0x04, 0xA2, 0x04, 0xA2, 0x04, + 0xA2, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xE3, 0x04, 0x03, 0x05, 0x44, 0x09, 0x65, 0x09, + 0x85, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xA7, 0x11, 0x86, 0x11, 0x45, 0x0D, 0x04, 0x09, 0xE3, 0x08, + 0xC3, 0x08, 0xE4, 0x08, 0x04, 0x09, 0x45, 0x0D, 0x85, 0x11, 0x85, 0x11, 0x85, 0x0D, 0x44, 0x09, + 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x45, 0x0D, 0x45, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x23, 0x09, + 0x03, 0x05, 0x03, 0x05, 0x22, 0x01, 0x62, 0x01, 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, 0xA5, 0x02, + 0x06, 0x03, 0x06, 0x03, 0x05, 0x03, 0x26, 0x03, 0x26, 0x03, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, + 0x87, 0x03, 0xA7, 0x03, 0xC5, 0x03, 0xC4, 0x03, 0xC6, 0x03, 0xED, 0x1F, 0xF6, 0x4F, 0xFE, 0x7B, + 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x06, 0x03, 0x65, 0x02, 0xC3, 0x01, 0x42, 0x01, + 0x02, 0x05, 0xC2, 0x08, 0xA2, 0x08, 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0x61, 0x04, 0x81, 0x04, + 0x81, 0x00, 0xA2, 0x04, 0xC3, 0x04, 0x04, 0x09, 0x45, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xC6, 0x11, + 0xA6, 0x11, 0x86, 0x0D, 0x65, 0x0D, 0x25, 0x09, 0x04, 0x09, 0xE4, 0x08, 0xE4, 0x08, 0x04, 0x09, + 0x45, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, + 0x24, 0x09, 0x23, 0x09, 0x03, 0x09, 0x03, 0x09, 0x02, 0x09, 0x02, 0x05, 0x22, 0x01, 0x63, 0x01, + 0xC3, 0x01, 0x04, 0x02, 0x64, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, + 0x26, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xC5, 0x03, + 0xC2, 0x03, 0xC4, 0x03, 0xEC, 0x1B, 0xF6, 0x4B, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, + 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, + 0x67, 0x03, 0xC6, 0x02, 0x04, 0x02, 0x62, 0x01, 0x02, 0x01, 0xC2, 0x04, 0xA2, 0x08, 0x82, 0x08, + 0xA2, 0x08, 0x82, 0x04, 0x61, 0x04, 0x40, 0x00, 0x40, 0x00, 0x41, 0x00, 0x62, 0x00, 0xA3, 0x04, + 0xE4, 0x08, 0x25, 0x0D, 0x66, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x66, 0x0D, + 0x45, 0x0D, 0x25, 0x09, 0x05, 0x09, 0x04, 0x09, 0x04, 0x09, 0x24, 0x09, 0x45, 0x09, 0x65, 0x0D, + 0x64, 0x09, 0x64, 0x09, 0x44, 0x09, 0x43, 0x05, 0x43, 0x05, 0x23, 0x05, 0x03, 0x05, 0x02, 0x05, + 0xE2, 0x04, 0x02, 0x05, 0x22, 0x05, 0x63, 0x01, 0xC3, 0x01, 0x24, 0x02, 0x64, 0x02, 0xA5, 0x02, + 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, + 0x66, 0x03, 0x86, 0x03, 0xA7, 0x03, 0xC7, 0x03, 0xC5, 0x03, 0xC4, 0x03, 0xC6, 0x03, 0xEE, 0x23, + 0xF6, 0x4F, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0x47, 0x03, 0x85, 0x02, 0xC3, 0x01, + 0x02, 0x01, 0xA1, 0x00, 0x81, 0x04, 0x61, 0x04, 0x61, 0x08, 0x62, 0x04, 0x62, 0x04, 0x41, 0x04, + 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x62, 0x04, 0xA3, 0x04, 0xE4, 0x08, 0x25, 0x0D, 0x45, 0x0D, + 0x86, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x66, 0x0D, 0x45, 0x0D, 0x25, 0x09, + 0x04, 0x09, 0x04, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x23, 0x05, + 0x23, 0x05, 0x23, 0x05, 0x22, 0x05, 0x22, 0x05, 0x22, 0x05, 0x43, 0x05, 0x63, 0x05, 0x83, 0x01, + 0xC3, 0x01, 0x24, 0x02, 0x64, 0x02, 0xA5, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, + 0x06, 0x03, 0x06, 0x03, 0x05, 0x03, 0x25, 0x03, 0x45, 0x03, 0x65, 0x03, 0x85, 0x03, 0x85, 0x03, + 0xA6, 0x03, 0xC7, 0x07, 0xC9, 0x17, 0xED, 0x23, 0xF3, 0x3F, 0xF9, 0x5F, 0xFF, 0x7B, 0x35, 0x00, + 0x4A, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xE8, 0x03, 0xC8, 0x03, 0x46, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x60, 0x04, + 0x40, 0x04, 0x21, 0x04, 0x41, 0x04, 0x41, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, + 0x82, 0x04, 0xC4, 0x08, 0x04, 0x0D, 0x04, 0x0D, 0x24, 0x0D, 0x65, 0x0D, 0x85, 0x11, 0xA6, 0x11, + 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x45, 0x0D, 0x25, 0x09, 0x24, 0x09, 0x04, 0x09, 0x04, 0x09, + 0x24, 0x09, 0x24, 0x09, 0x04, 0x09, 0x03, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x22, 0x05, + 0x43, 0x05, 0x63, 0x05, 0xA4, 0x01, 0xE4, 0x01, 0x04, 0x02, 0x44, 0x02, 0x84, 0x02, 0xA5, 0x02, + 0xC6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x05, 0x03, + 0x25, 0x03, 0x24, 0x03, 0x44, 0x03, 0x63, 0x03, 0x82, 0x03, 0xA4, 0x03, 0xC9, 0x13, 0xCF, 0x33, + 0xF6, 0x4F, 0xF9, 0x5F, 0xFC, 0x6F, 0x36, 0x00, 0x49, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, + 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x46, 0x03, 0x65, 0x02, + 0xA3, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x61, 0x04, 0x40, 0x04, 0x40, 0x04, 0x60, 0x00, 0x61, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x01, 0x04, 0x42, 0x04, 0xA3, 0x08, 0xE4, 0x0C, 0x04, 0x0D, 0x04, 0x09, + 0x04, 0x09, 0x24, 0x0D, 0x65, 0x11, 0x86, 0x11, 0xA6, 0x15, 0x86, 0x11, 0x65, 0x0D, 0x45, 0x0D, + 0x24, 0x09, 0x04, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x03, 0x09, 0xE3, 0x04, + 0xE2, 0x04, 0x02, 0x05, 0x22, 0x05, 0x62, 0x05, 0xA3, 0x05, 0xC4, 0x01, 0x05, 0x02, 0x45, 0x02, + 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, + 0xE5, 0x02, 0xE5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x65, 0x03, + 0x83, 0x03, 0xA6, 0x03, 0xCE, 0x27, 0xF6, 0x53, 0xFE, 0x77, 0xFF, 0x7B, 0x37, 0x00, 0x47, 0x00, + 0xFA, 0x63, 0xF1, 0x33, 0xEA, 0x07, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, + 0xC8, 0x03, 0x46, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x43, 0x01, 0x02, 0x01, 0xE1, 0x00, 0xA1, 0x00, + 0xA1, 0x00, 0xA1, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x21, 0x00, 0x21, 0x04, 0x42, 0x04, 0x83, 0x08, + 0xC4, 0x08, 0x04, 0x09, 0x03, 0x09, 0x03, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x65, 0x11, 0x65, 0x11, + 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, + 0x03, 0x05, 0x23, 0x05, 0x23, 0x05, 0x43, 0x01, 0x63, 0x01, 0x83, 0x01, 0xC3, 0x01, 0x04, 0x02, + 0x25, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, + 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC4, 0x02, 0xE4, 0x02, 0x05, 0x03, 0x28, 0x0B, + 0x4B, 0x17, 0x8D, 0x1F, 0x8C, 0x1F, 0xAA, 0x1F, 0xAD, 0x23, 0xD4, 0x43, 0xFB, 0x6B, 0x39, 0x00, + 0x47, 0x00, 0xF9, 0x5F, 0xF1, 0x2F, 0xE8, 0x03, 0xE4, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE9, 0x03, + 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0xE6, 0x02, 0x65, 0x02, 0xC4, 0x01, 0x83, 0x01, 0x63, 0x01, + 0x42, 0x01, 0x22, 0x01, 0x02, 0x01, 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x21, 0x00, 0x42, 0x04, + 0x62, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x03, 0x09, 0x23, 0x09, 0x24, 0x09, 0x45, 0x0D, 0x45, 0x0D, + 0x25, 0x0D, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xC3, 0x04, 0xE2, 0x04, + 0x03, 0x05, 0x23, 0x05, 0x43, 0x01, 0x83, 0x01, 0xA4, 0x01, 0xE4, 0x01, 0x04, 0x02, 0x24, 0x02, + 0x44, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, + 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, 0xC3, 0x02, 0xC2, 0x02, 0xE5, 0x02, + 0x2B, 0x17, 0x91, 0x37, 0xD6, 0x4B, 0xD5, 0x4B, 0xD4, 0x4B, 0xD5, 0x4F, 0xF9, 0x5F, 0xFE, 0x77, + 0x39, 0x00, 0x46, 0x00, 0xFA, 0x5F, 0xF1, 0x33, 0xE9, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, + 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x25, 0x02, + 0x04, 0x02, 0xC3, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x42, 0x01, 0xE2, 0x00, 0x82, 0x00, 0x41, 0x00, + 0x41, 0x00, 0x42, 0x00, 0x82, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x44, 0x09, 0x24, 0x09, + 0x25, 0x09, 0x04, 0x09, 0xC3, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0xA2, 0x04, + 0xE2, 0x04, 0x02, 0x01, 0x63, 0x01, 0xA3, 0x01, 0xE4, 0x01, 0x25, 0x02, 0x65, 0x02, 0x65, 0x02, + 0x85, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC3, 0x02, 0xC3, 0x02, + 0xE7, 0x02, 0x4F, 0x2B, 0xB8, 0x57, 0xFD, 0x77, 0xFD, 0x77, 0xFD, 0x77, 0xFD, 0x77, 0xFE, 0x7B, + 0x3A, 0x00, 0x41, 0x00, 0xFB, 0x67, 0xF5, 0x43, 0xEE, 0x23, 0xEA, 0x13, 0xE9, 0x0B, 0xE8, 0x03, + 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x47, 0x03, 0xE6, 0x02, 0xC6, 0x02, + 0xA5, 0x02, 0x64, 0x02, 0x24, 0x02, 0x04, 0x02, 0xC3, 0x01, 0x42, 0x01, 0xE2, 0x00, 0x81, 0x00, + 0x41, 0x00, 0x42, 0x00, 0x62, 0x00, 0xA2, 0x04, 0xE3, 0x04, 0x03, 0x05, 0x24, 0x09, 0x04, 0x09, + 0xE4, 0x08, 0xC3, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x81, 0x04, 0x81, 0x04, 0x82, 0x04, 0xC2, 0x04, + 0x02, 0x01, 0x63, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x45, 0x02, 0x85, 0x02, 0xA6, 0x02, 0xC5, 0x02, + 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xC6, 0x02, 0xE6, 0x0A, 0xE8, 0x12, + 0x2D, 0x23, 0x95, 0x4B, 0xDD, 0x73, 0x3F, 0x00, 0x41, 0x00, 0xFD, 0x73, 0xF9, 0x5F, 0xF6, 0x4B, + 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xC8, 0x03, 0xA7, 0x03, + 0x67, 0x03, 0x46, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x64, 0x02, 0x04, 0x02, + 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x04, 0x82, 0x04, 0xA2, 0x04, + 0xE2, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xC3, 0x08, 0xA3, 0x04, 0x82, 0x04, 0x61, 0x04, 0x61, 0x00, + 0x81, 0x00, 0xA1, 0x04, 0xE2, 0x00, 0x43, 0x01, 0xA3, 0x01, 0x24, 0x02, 0x65, 0x02, 0x85, 0x02, + 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0x84, 0x02, 0x83, 0x02, 0x82, 0x02, 0x81, 0x02, 0x81, 0x02, + 0xC5, 0x02, 0x0A, 0x1B, 0x4F, 0x37, 0x95, 0x4B, 0xBA, 0x63, 0xFE, 0x7B, 0x40, 0x00, 0x3F, 0x00, + 0xFE, 0x77, 0xFD, 0x73, 0xF8, 0x5B, 0xF1, 0x2F, 0xE9, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, + 0xC7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x66, 0x03, 0x46, 0x03, 0x26, 0x03, 0xE5, 0x02, 0xC5, 0x02, + 0xA5, 0x02, 0x44, 0x02, 0xC3, 0x01, 0x42, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x82, 0x00, 0x82, 0x04, + 0x82, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xC3, 0x04, 0xC3, 0x08, 0xA3, 0x04, 0x82, 0x04, + 0x81, 0x04, 0x81, 0x00, 0xA1, 0x00, 0xC2, 0x00, 0x22, 0x01, 0xA3, 0x01, 0x04, 0x02, 0x65, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, + 0xA6, 0x02, 0xA6, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA3, 0x02, + 0x81, 0x02, 0x81, 0x02, 0xC6, 0x06, 0x2E, 0x2F, 0xB7, 0x5B, 0xFD, 0x73, 0xFE, 0x77, 0x43, 0x00, + 0x3B, 0x00, 0xFE, 0x73, 0xF6, 0x4B, 0xEF, 0x23, 0xE9, 0x13, 0xE7, 0x0B, 0xE7, 0x03, 0xC6, 0x03, + 0xC6, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x66, 0x03, 0x46, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, + 0x64, 0x02, 0x04, 0x02, 0xA3, 0x01, 0x42, 0x01, 0xE2, 0x00, 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, + 0xC2, 0x00, 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x81, 0x00, + 0xA1, 0x00, 0xC1, 0x00, 0x02, 0x01, 0x83, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xA6, 0x02, 0xC6, 0x02, + 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, + 0xA5, 0x02, 0x84, 0x02, 0x84, 0x02, 0xA5, 0x02, 0xC7, 0x0A, 0xE9, 0x12, 0xE9, 0x16, 0xC7, 0x16, + 0xC7, 0x16, 0x0C, 0x23, 0x74, 0x4B, 0xFD, 0x73, 0x46, 0x00, 0x39, 0x00, 0xFA, 0x63, 0xF6, 0x4B, + 0xF0, 0x37, 0xEB, 0x1B, 0xC7, 0x03, 0xC4, 0x03, 0xA5, 0x03, 0x86, 0x03, 0x67, 0x03, 0x47, 0x03, + 0x26, 0x03, 0x05, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0x84, 0x02, 0x24, 0x02, 0xE3, 0x01, 0x83, 0x01, + 0x42, 0x01, 0x22, 0x01, 0x02, 0x01, 0x02, 0x01, 0x23, 0x01, 0x23, 0x01, 0x23, 0x01, 0x03, 0x01, + 0xE2, 0x04, 0xC2, 0x04, 0xA1, 0x00, 0x81, 0x00, 0xA1, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xC4, 0x01, + 0x24, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA6, 0x02, 0xA5, 0x02, 0x84, 0x02, 0x62, 0x02, 0x62, 0x02, 0xA5, 0x02, + 0xEB, 0x1E, 0x51, 0x37, 0x52, 0x43, 0x51, 0x43, 0x51, 0x43, 0x74, 0x4B, 0xB9, 0x63, 0x47, 0x00, + 0x39, 0x00, 0xFE, 0x77, 0xFC, 0x6F, 0xF8, 0x5B, 0xF0, 0x33, 0xC9, 0x07, 0xA4, 0x03, 0xA4, 0x03, + 0x86, 0x03, 0x47, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0x84, 0x02, + 0x44, 0x02, 0x24, 0x02, 0xE3, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x63, 0x01, 0x63, 0x01, 0x83, 0x01, + 0xA4, 0x01, 0x84, 0x01, 0x43, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC1, 0x00, 0xA1, 0x00, 0xC2, 0x00, + 0x22, 0x01, 0x83, 0x01, 0xE4, 0x01, 0x45, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0x83, 0x02, + 0x61, 0x02, 0x61, 0x02, 0xC7, 0x0E, 0x30, 0x37, 0xB9, 0x5F, 0xDB, 0x6B, 0xDB, 0x6B, 0xDB, 0x6B, + 0xDC, 0x6F, 0xFD, 0x77, 0x49, 0x00, 0x32, 0x00, 0xFE, 0x77, 0xF6, 0x4F, 0xEE, 0x23, 0xA9, 0x0F, + 0x87, 0x07, 0x67, 0x03, 0x26, 0x03, 0x05, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0x85, 0x02, 0x65, 0x02, 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x03, 0x02, 0xE3, 0x01, 0xE4, 0x01, + 0xE4, 0x01, 0x04, 0x02, 0xE4, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x42, 0x01, 0x02, 0x01, 0x02, 0x01, + 0x22, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x25, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA4, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0x84, 0x02, 0xA4, 0x02, + 0xA4, 0x02, 0x84, 0x0A, 0xA6, 0x0E, 0x0D, 0x27, 0x96, 0x53, 0xFE, 0x7B, 0x4F, 0x00, 0x30, 0x00, + 0xFB, 0x63, 0xF5, 0x47, 0xD0, 0x33, 0x8B, 0x1B, 0x47, 0x03, 0x03, 0x03, 0xE2, 0x02, 0xC3, 0x02, + 0xA3, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x85, 0x02, 0x85, 0x02, 0x65, 0x02, + 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, 0xC3, 0x01, + 0x82, 0x01, 0x62, 0x01, 0x62, 0x01, 0x83, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x45, 0x02, 0x65, 0x02, + 0x85, 0x02, 0x84, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0x84, 0x02, 0x84, 0x02, 0x83, 0x02, + 0x82, 0x02, 0x61, 0x02, 0x82, 0x02, 0xA6, 0x06, 0xE9, 0x1E, 0x2F, 0x37, 0x74, 0x4B, 0xBA, 0x67, + 0x50, 0x00, 0x30, 0x00, 0xFE, 0x77, 0xFC, 0x6B, 0xD8, 0x5B, 0x90, 0x33, 0x48, 0x0B, 0xE2, 0x02, + 0xC1, 0x02, 0xC3, 0x02, 0xA3, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, + 0xA5, 0x02, 0x86, 0x02, 0x65, 0x02, 0x65, 0x02, 0x45, 0x02, 0x65, 0x02, 0x64, 0x02, 0x44, 0x02, + 0x24, 0x02, 0x03, 0x02, 0xE3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x24, 0x02, + 0x64, 0x02, 0x64, 0x02, 0x85, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, + 0x84, 0x02, 0x83, 0x02, 0x82, 0x02, 0x61, 0x02, 0x82, 0x02, 0xC8, 0x0E, 0x30, 0x37, 0x98, 0x5F, + 0xDB, 0x6F, 0xFD, 0x77, 0x52, 0x00, 0x2B, 0x00, 0xFE, 0x7B, 0xB6, 0x4F, 0x6D, 0x23, 0x06, 0x0B, + 0x05, 0x0B, 0xE7, 0x0A, 0xE8, 0x0A, 0xC7, 0x06, 0xC6, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xC5, 0x02, + 0xA6, 0x02, 0xA6, 0x02, 0x86, 0x02, 0x85, 0x02, 0x85, 0x02, 0x85, 0x02, 0x84, 0x02, 0x64, 0x02, + 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x44, 0x02, 0x44, 0x02, + 0x64, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0xC6, 0x02, + 0xC7, 0x06, 0xC8, 0x0A, 0xC7, 0x0A, 0xA5, 0x0A, 0xC7, 0x0A, 0x0E, 0x2B, 0x97, 0x57, 0x56, 0x00, + 0x2A, 0x00, 0xDA, 0x67, 0x94, 0x47, 0x6F, 0x37, 0x4F, 0x37, 0x50, 0x37, 0x50, 0x33, 0x0C, 0x1F, + 0xE7, 0x06, 0xA3, 0x02, 0xA2, 0x02, 0xA3, 0x02, 0xA3, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, + 0x64, 0x02, 0x63, 0x02, 0x63, 0x02, 0x63, 0x02, 0x43, 0x02, 0x43, 0x02, 0x43, 0x02, 0x22, 0x02, + 0x23, 0x02, 0x23, 0x02, 0x43, 0x02, 0x43, 0x02, 0x63, 0x02, 0x63, 0x02, 0x63, 0x02, 0x62, 0x02, + 0x62, 0x02, 0x81, 0x02, 0xA3, 0x02, 0xC7, 0x0A, 0x0C, 0x23, 0x50, 0x33, 0x30, 0x37, 0x2F, 0x37, + 0x30, 0x37, 0x75, 0x4B, 0xDB, 0x6B, 0x56, 0x00, 0x2A, 0x00, 0xFD, 0x77, 0xDB, 0x6B, 0xD9, 0x63, + 0xB9, 0x63, 0xB9, 0x63, 0xB8, 0x5F, 0x71, 0x3B, 0x09, 0x13, 0xC3, 0x02, 0xA0, 0x02, 0xA1, 0x02, + 0x82, 0x02, 0x82, 0x02, 0x62, 0x02, 0x63, 0x02, 0x43, 0x02, 0x63, 0x02, 0x62, 0x02, 0x42, 0x02, + 0x42, 0x02, 0x42, 0x02, 0x42, 0x02, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0x42, 0x02, 0x42, 0x02, + 0x42, 0x02, 0x42, 0x02, 0x42, 0x02, 0x62, 0x02, 0x60, 0x02, 0x60, 0x02, 0xA2, 0x02, 0x0A, 0x17, + 0x52, 0x3F, 0xB9, 0x5F, 0xB9, 0x63, 0xB9, 0x63, 0xB9, 0x63, 0xDB, 0x6B, 0xFE, 0x77, 0x5C, 0x00, + 0x1E, 0x00, 0xB7, 0x57, 0x4F, 0x2B, 0xE7, 0x06, 0xC4, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xA6, 0x06, + 0xA6, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, + 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x86, 0x06, + 0x86, 0x06, 0xA6, 0x06, 0xA4, 0x06, 0xA3, 0x06, 0xE7, 0x0A, 0x4F, 0x2F, 0xB8, 0x5B, 0x62, 0x00, + 0x1E, 0x00, 0xDB, 0x6B, 0x95, 0x4B, 0x4F, 0x2F, 0x2D, 0x2F, 0x2E, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, + 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, + 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, + 0x0F, 0x2F, 0x0E, 0x2F, 0x0D, 0x2F, 0x0C, 0x2F, 0x4F, 0x33, 0x95, 0x4F, 0xDC, 0x6F, 0x62, 0x00, + 0x1E, 0x00, 0xFE, 0x77, 0xDB, 0x67, 0xB8, 0x5F, 0xB7, 0x5F, 0xB8, 0x5F, 0xB8, 0x5F, 0x98, 0x5F, + 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, + 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, + 0x98, 0x5F, 0x98, 0x5F, 0x97, 0x5F, 0x97, 0x5F, 0xB8, 0x5F, 0xDB, 0x6B, 0xFE, 0x7B, 0x3F, 0x08, + 0x00, 0x00 +}; + + diff --git a/backends/platform/ps2/iop/CoDyVDfs/Makefile b/backends/platform/ps2/iop/CoDyVDfs/Makefile new file mode 100644 index 0000000000..4493e77154 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/Makefile @@ -0,0 +1,30 @@ +# _____ ___ ____ ___ ____ +# ____| | ____| | | |____| +# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. +#----------------------------------------------------------------------- +# Copyright 2001-2004, ps2dev - http://www.ps2dev.org +# Licenced under Academic Free License version 2.0 +# Review ps2sdk README & LICENSE files for further details. +# +# $Id$ + + +IOP_OBJS_DIR = obj/ +IOP_BIN_DIR = bin/ +IOP_SRC_DIR = iop/ +IOP_INC_DIR = include/ + +IOP_BIN = iop/CoDyVDfs.irx +IOP_OBJS = obj/codyvdfs.o obj/fiofs.o obj/rpcfs.o obj/imports.o + +IOP_CFLAGS += -Wall -fno-builtin +IOP_LDFLAGS += -s + +all: $(IOP_OBJS_DIR) $(IOP_BIN_DIR) $(IOP_BIN) + +clean: + rm -f -r $(IOP_OBJS_DIR) $(IOP_BIN_DIR) + +include $(PS2SDKSRC)/Defs.make +include $(PS2SDKSRC)/iop/Rules.make +include $(PS2SDKSRC)/iop/Rules.release diff --git a/backends/platform/ps2/iop/CoDyVDfs/common/codyvdirx.h b/backends/platform/ps2/iop/CoDyVDfs/common/codyvdirx.h new file mode 100644 index 0000000000..6b81d000ae --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/common/codyvdirx.h @@ -0,0 +1,38 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef CDVDFS_COMMON_H +#define CDVDFS_COMMON_H + +#define CDVDFS_IRX_ID 0xD004352 + +// commands: +#define READ_RTC 0 +#define SET_READ_SPEED 1 +#define DRIVE_STOP 2 +#define DRIVE_STANDBY 3 + +#define CdTrayOpen 0 +#define CdTrayClose 1 +#define CdTrayCheck 2 + +#endif // CDVDFS_COMMON_H diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h new file mode 100644 index 0000000000..9f7a9762be --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/cdtypes.h @@ -0,0 +1,134 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __CDTYPES_H__ +#define __CDTYPES_H__ + +typedef unsigned int uint32; +typedef unsigned short uint16; +typedef unsigned char uint8; +typedef signed int int32; +typedef signed short int16; +typedef signed char int8; + +typedef struct { + uint8 len_di; + uint8 attributeLength; + uint8 lba[4]; + uint16 parent; + char name[256]; // arbitrary number +} ISOPathTableRecord __attribute__ ((packed)); + +typedef struct { + uint8 year; // Number of years since 1900 + uint8 month; // Month of the year from 1 to 12 + uint8 day; // Day of the Month from 1 to 31 + uint8 hour; // Hour of the day from 0 to 23 + uint8 min; // Minute of the hour from 0 to 59 + uint8 sec; // second of the minute from 0 to 59 + uint8 gmtOff; // Offset from Greenwich Mean Time in number of 15 minute intervals from -48(West) to +52(East) + uint8 padding[10]; +} ISOTime __attribute__ ((packed)); + +typedef struct { + uint8 year; // Number of years since 1900 + uint8 month; // Month of the year from 1 to 12 + uint8 day; // Day of the Month from 1 to 31 + uint8 hour; // Hour of the day from 0 to 23 + uint8 min; // Minute of the hour from 0 to 59 + uint8 sec; // second of the minute from 0 to 59 + uint8 gmtOff; // Offset from Greenwich Mean Time in number of 15 minute intervals from -48(West) to +52(East) + //uint8 padding[10]; +} ISOFileTime __attribute__ ((packed)); + +typedef struct { + uint8 len_dr; + uint8 attributeLength; + uint8 lba[4]; + uint8 lba_BE[4]; + uint8 size[4]; + uint8 size_BE[4]; + ISOFileTime time; + uint8 flags; + uint8 fieldSize; + uint8 gapSize; + uint8 sequenceNumber[4]; + uint8 len_fi; + char name[256]; // arbitrary number +} ISODirectoryRecord __attribute__ ((packed)); + +typedef struct { + char volumeSetId[128]; + char publisherId[128]; + char preparerId[128]; + char applicationId[128]; + char copyrightId[37]; + char abstractId[37]; + char bibliographicId[37]; +} ISOIds __attribute__ ((packed)); + +typedef struct { + uint16 length; + uint32 tocLBA; + uint32 tocLBA_bigend; + uint32 tocSize; + uint32 tocSize_bigend; + uint8 dateStamp[8]; + uint8 reserved[6]; + uint8 reserved2; + uint8 reserved3; +} ISORoot __attribute__((packed)); // 0x22 + +typedef struct { + uint8 type; // 0x00 + char identifier[5]; // 0x01 + uint8 version; // 0x06 + uint8 reserved1; // 0x07 + char systemIdentifier[32]; // 0x08 + char volumeIdentifier[32]; // 0x28 + uint8 reserved2[8]; // 0x48 + uint32 volumeSpaceSize; // 0x50 + uint32 volumeSpaceSizeBE; // 0x54 + char reserved3[32]; // 0x58 + uint32 volumeSetSize; // 0x78 + uint32 volumeSequenceNumber; // 0x7C + uint32 logicalBlockSize; // 0x80 + uint32 pathTableSize; // 0x84 + uint32 pathTableSizeBE; // 0x88 + uint32 pathTablePos; // 0x8C + uint32 pathTable2Pos; // 0x90 + uint32 pathTablePosBE; // 0x94 + uint32 pathTable2PosBE; // 0x98 + ISORoot rootDir; // 0x9C + ISOIds ids; // 0xBE + ISOTime creation; // 0x32D + ISOTime modification; // 0x33E + ISOTime expiration; // 0x34F + ISOTime effective; // 0x360 + uint8 fileStructureVersion; // 0x371 + uint8 reserved4; // 0x372 + uint8 applicationUse[512]; // 0x373 + uint8 reserved5[653]; // 0x573 +} ISOPvd __attribute__ ((packed)); // 0x800 + +#endif // __CDTYPES_H__ + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c new file mode 100644 index 0000000000..627054e6fd --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.c @@ -0,0 +1,347 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "fiofs.h" +#include "codyvdfs.h" +#include "../common/codyvdirx.h" + +#define DBG_PRINTF printf + +char cachedDir[256]; +int cachedDirLba, cachedDirOfs, cachedDirSize; +static uint8 cacheBuf[2340]; + +int mediaType, fsRootLba, fsRootSize; + +int verifyDriveReady(void) { + int res; + u32 trayStat; + res = CdTrayReq(CdTrayCheck, &trayStat); + if ((mediaType == DISC_UNKNOWN) || (res == 0) || (trayStat == 1)) { + // media was exchanged + if (checkDiscReady(100) == 0) // wait up to 1 second + return initDisc(); + else { + mediaType = DISC_UNKNOWN; + return -1; // drive still not ready + } + } + if (mediaType == DISC_NONE) + return -1; + return 0; +} + +int cacheEnterDir(ISODirectoryRecord *dir) { + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + char *cacheName; + cachedDirLba = READ_ARRAY32(dir->lba); + cachedDirSize = READ_ARRAY32(dir->size); + cachedDirOfs = 0; + cacheName = cachedDir + strlen(cachedDir); + memcpy(cacheName, dir->name, dir->len_fi); + cacheName[dir->len_fi] = '/'; + cacheName[dir->len_fi + 1] = '\0'; + return cdReadSectors(cachedDirLba, 1, cacheBuf, &rmode); +} + +int initRootCache(void) { + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + ISODirectoryRecord *root = (ISODirectoryRecord*)cacheBuf; + + if (cdReadSectors(fsRootLba, 1, cacheBuf, &rmode) == 0) { + cachedDir[0] = '\0'; + fsRootSize = READ_ARRAY32(root->size); + cachedDirLba = fsRootLba; + cachedDirOfs = 0; + cachedDirSize = fsRootSize; + if (READ_ARRAY32(root->lba) == fsRootLba) + return 0; + } + DBG_PRINTF("Can't read root directory table in sector %d\n", fsRootLba); + mediaType = DISC_NONE; + return -1; +} + +ISODirectoryRecord *findEntryInCache(const char *name, int nameLen) { + int i; + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + ISODirectoryRecord *entry; + for (i = 0; i < NUM_SECTORS(cachedDirSize); i++) { + entry = (ISODirectoryRecord *)cacheBuf; + if (i != cachedDirOfs) { + if (cdReadSectors(cachedDirLba + i, 1, cacheBuf, &rmode) < 0) + return NULL; + cachedDirOfs = i; + } + + while (entry->len_dr && ((uint8*)entry < cacheBuf + SECTOR_SIZE)) { + if ((entry->len_fi > 2) && (entry->name[entry->len_fi - 2] == ';') && (entry->name[entry->len_fi - 1] == '1')) { + if ((nameLen == entry->len_fi - 2) && (strnicmp(name, entry->name, entry->len_fi - 2) == 0)) + return entry; + } else { + if ((nameLen == entry->len_fi) && (strnicmp(name, entry->name, entry->len_fi) == 0)) + return entry; + } + entry = (ISODirectoryRecord *)( (uint8*)entry + entry->len_dr ); + } + } + return NULL; +} + +ISODirectoryRecord *findPath(const char *path) { + ISODirectoryRecord *pathPos; + const char *tok; + + if (path[0] == '/') + path++; + + if (strnicmp(cachedDir, path, strlen(cachedDir)) == 0) + path += strlen(cachedDir); // requested path is somewhere in our cache + else + initRootCache(); // not cached, we start again at the cd root + + if (path[0] == '/') + path++; + + if (!path[0]) { // open root dir + if (cachedDirOfs) + initRootCache(); + return (ISODirectoryRecord *)cacheBuf; + } + + do { + tok = strchr(path, '/'); + if (tok) + pathPos = findEntryInCache(path, tok - path); + else + pathPos = findEntryInCache(path, strlen(path)); + + if (pathPos && tok && tok[1] && IS_DIR(pathPos)) + if (cacheEnterDir(pathPos) < 0) + return NULL; + + path = tok + 1; + } while (pathPos && tok && tok[1]); + return pathPos; +} + +int checkDiscReady(int retries) { + if (retries == -1) { + if (CdDiskReady(0) == 2) // block until drive ready, should always return 2 + return 0; + } else { + do { + if (CdDiskReady(1) == 2) + return 0; + DelayThread(10 * 1000); + } while (--retries >= 0); + } + return -1; +} + + +int initDisc(void) { + int type, sector, discType; + ISOPvd *pvd; + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + ISOPathTableRecord *rootRec; + + if (checkDiscReady(0) < 0) { + printf("disc not ready\n"); + mediaType = DISC_UNKNOWN; // retry later + return -1; + } + + do { // wait until drive detected disc type + type = CdGetDiskType(); + if (DISC_NOT_READY(type)) + DelayThread(10 * 1000); + } while (DISC_NOT_READY(type)); + + if (type == CdDiskIllegal) { + printf("Illegal disc type\n"); + mediaType = DISC_NONE; + return -1; + } + if (type == CdDiskNone) { + printf("Tray empty\n"); + mediaType = DISC_NONE; + return -1; + } + + discType = DISC_DVD; + switch (type) { + case CdDiskCDPS1: + case CdDiskCDDAPS1: + case CdDiskCDPS2: + case CdDiskCDDAPS2: + case CdDiskCDDA: + discType = DISC_MODE2; + rmode.datapattern = CdSect2340; + default: + break; + } + + for (sector = 16; sector < 32; sector++) { + printf("sec %d\n", sector); + if (cdReadSectors(sector, 1, cacheBuf, &rmode) == 0) { + if (discType == DISC_DVD) + pvd = (ISOPvd *)cacheBuf; + else { + switch (cacheBuf[3]) { + case 1: + discType = DISC_MODE1; + printf("Disc: Mode1\n"); + pvd = (ISOPvd*)(cacheBuf + 4); + break; + case 2: + discType = DISC_MODE2; + printf("Disc: Mode2\n"); + pvd = (ISOPvd*)(cacheBuf + 12); + break; + default: + DBG_PRINTF("Unknown Sector Type %02X\n", cacheBuf[3]); + return -1; + } + } + rmode.datapattern = CdSect2048; + if ((pvd->type == 1) && (memcmp(pvd->identifier, "CD001", 5) == 0)) { // found ISO9660 PVD + DBG_PRINTF("Found ISO9660 PVD in sector %d\n", sector); + + DBG_PRINTF("reading path table from sector %d\n", pvd->pathTablePos); + if (cdReadSectors(pvd->pathTablePos, 1, cacheBuf, &rmode) < 0) { + DBG_PRINTF("Can't read path table\n"); + return -1; + } + + rootRec = (ISOPathTableRecord *)cacheBuf; + if ((rootRec->len_di != 1) || (rootRec->name[0] != 0)) { + DBG_PRINTF("Root entry missing: %02X - %02X\n", rootRec->len_di, rootRec->name[0]); + return -1; + } + + fsRootLba = READ_ARRAY32(rootRec->lba); // this points to the root record + + mediaType = discType; + DBG_PRINTF("Root directory in sector %d\n", fsRootLba); + return initRootCache(); + } + } + } + mediaType = DISC_NONE; + // PVD not found + return -1; +} + +int cdReadSectors(int lba, int num, void *dest, CdRMode *rmode) { + int err; + if (CdRead(lba, num, dest, rmode) == 1) { + CdSync(0); + err = CdGetError(); + return (err > 0) ? -err : err; + } + return -0xFF; +} + +int cd_dummy(void) { + printf("cd_dummy called!\n"); + return -1; +} + +int cd_init(iop_device_t *dev) { + printf("FS init\n"); + memset(cachedDir, 0, 256); + cachedDirLba = cachedDirOfs = 0; + mediaType = DISC_UNKNOWN; + return 0; +} + +iop_device_ops_t FS_ops = { + (void *) cd_init, + (void *) cd_dummy, + (void *) cd_dummy, + (void *) cd_open, + (void *) cd_close, + (void *) cd_read, + (void *) cd_dummy, + (void *) cd_lseek, + (void *) cd_dummy, + (void *) cd_dummy, + (void *) cd_dummy, + (void *) cd_dummy, + (void *) cd_dopen, + (void *) cd_dclose, + (void *) cd_dread, + (void *) cd_dummy, + (void *) cd_dummy, +}; + +#define FS_NAME "cdfs" +#define FS_DESC "CD-ROM" + +iop_device_t fsdriver = { + FS_NAME, + IOP_DT_FS | IOP_DT_FSEXT, + 1, + FS_DESC, + &FS_ops +}; + +int _start(void) { + printf("CoDyVDfs v0.01\n"); + + CdInit(1); + DelDrv(FS_NAME); + AddDrv(&fsdriver); + + initRpc(); + initFio(); + return(0); +} + +int strnicmp(const char *s1, const char *s2, int n) { + if (n) { + do { + if (tolower(*s1) != tolower(*s2)) + return tolower(*s1) - tolower(*s2); + if (*s1++ == '\0') + break; + s2++; + } while (--n); + } + return 0; +} + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h new file mode 100644 index 0000000000..5e6295993c --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/codyvdfs.h @@ -0,0 +1,84 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __CoDyVDfs_H__ +#define __CoDyVDfs_H__ + +#include +#include "cdtypes.h" + +typedef cd_read_mode_t CdRMode; + +// for reading misaligned ints +#define READ_ARRAY32(a) \ + (a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24)) + +#define SECTOR_SIZE 0x800 +#define SECTOR_MASK 0x7FF +#define NUM_SECTORS(a) ((a + 2047) >> 11) + +#define IS_DIR(a) ((a)->flags & 2) + +#define DISC_UNKNOWN 0xFE +#define DISC_NONE 0xFF +#define DISC_DVD 0 +#define DISC_MODE1 1 +#define DISC_MODE2 2 + +enum ReadModes { + CdSect2048 = 0, + CdSect2328, // 1 + CdSect2340 // 2 +}; + +enum { + CdDiskNone = 0x00, + CdDiskDetect, // 0x01 + CdDiskDetectCD, // 0x02 + CdDiskDetectDVD, // 0x03 + CdDiskDetectUnk = 0x05, + CdDiskCDPS1 = 0x10, + CdDiskCDDAPS1 = 0x11, + CdDiskCDPS2 = 0x12, + CdDiskCDDAPS2 = 0x13, + CdDiskDVDPS2 = 0x14, + CdDiskDVDV2 = 0xFC, + CdDiskCDDA = 0xFD, + CdDiskDVDV = 0xFE, + CdDiskIllegal = 0xFF +}; + +#define DISC_NOT_READY(type) ((type > CdDiskNone) && (type < CdDiskCDPS1) && (type != CdDiskDetectUnk)) + +int initRpc(void); + +int verifyDriveReady(void); +int cdReadSectors(int lba, int num, void *dest, CdRMode *rmode); +int initRootCache(void); +ISODirectoryRecord *findPath(const char *path); +int cacheEnterDir(ISODirectoryRecord *dir); +int initDisc(void); +int checkDiscReady(int retries); +int strnicmp(const char *s1, const char *s2, int n); + +#endif // __MYCDVDFS_H__ + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c new file mode 100644 index 0000000000..701ece1525 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.c @@ -0,0 +1,262 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "cdtypes.h" +#include "codyvdfs.h" +#include +#include +#include +#include +#include +#include + +#define MAX_DIO_HANDLES 8 +#define MAX_FIO_HANDLES 32 + +typedef struct { + int lba, size, lbaOfs; + uint32 curOfs; + uint8 *buf; +} DioHandle; + +typedef struct { + int lba, size; + int pos; + uint8 *buf; + int cachedLba; +} FioHandle; + +static DioHandle dioHandles[MAX_DIO_HANDLES]; +static FioHandle fioHandles[MAX_FIO_HANDLES]; + +int initFio(void) { + int i; + + for (i = 0; i < MAX_DIO_HANDLES; i++) + dioHandles[i].lba = 0; + for (i = 0; i < MAX_FIO_HANDLES; i++) + fioHandles[i].lba = 0; + return 0; +} + +int allocDioHandle(void) { + int i; + for (i = 0; i < MAX_DIO_HANDLES; i++) + if (!dioHandles[i].lba) + return i; + return -1; +} + +int allocFioHandle(void) { + int i; + for (i = 0; i < MAX_FIO_HANDLES; i++) + if (!fioHandles[i].lba) + return i; + return -1; +} + +int cd_open(iop_file_t *handle, const char *name, int mode) { + int fdSlot; + FioHandle *fd; + ISODirectoryRecord *rec; + + if (verifyDriveReady() < 0) + return -EIO; + + rec = findPath(name); + if (!rec || IS_DIR(rec)) + return -ENOENT; + + fdSlot = allocFioHandle(); + if (fdSlot < 0) + return -ENFILE; + + fd = fioHandles + fdSlot; + + fd->buf = AllocSysMemory(ALLOC_FIRST, 0x800, NULL); + if (!fd->buf) + return -ENOMEM; + + fd->lba = READ_ARRAY32(rec->lba); + fd->size = READ_ARRAY32(rec->size); + fd->pos = 0; + fd->cachedLba = 0; + + handle->privdata = (void*)fdSlot; + return 0; +} + +int cd_lseek(iop_file_t *handle, int ofs, int whence) { + FioHandle *fd = fioHandles + (int)handle->privdata; + int newOfs; + switch(whence) { + case SEEK_SET: + newOfs = ofs; + break; + case SEEK_CUR: + newOfs = fd->pos + ofs; + break; + case SEEK_END: + newOfs = fd->size + ofs; + break; + default: + newOfs = -1; + } + if ((newOfs >= 0) && (newOfs <= fd->size)) { + fd->pos = newOfs; + return newOfs; + } else + return -1; +} + +int cd_read(iop_file_t *handle, void *dest, int length) { + FioHandle *fd = fioHandles + (int)handle->privdata; + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + int readLba, readPos, bytesLeft; + uint8 *destPos = (uint8*)dest; + int doCopy; + int numLba; + readLba = fd->lba + (fd->pos >> 11); + readPos = fd->pos & 0x7FF; + + if (fd->pos + length > fd->size) + length = fd->size - fd->pos; + + if (length < 0) + return 0; + + bytesLeft = length; + while (bytesLeft > 0) { + if (readPos || (bytesLeft < 0x800) || (readLba == fd->cachedLba)) { + if (fd->cachedLba != readLba) { + if (cdReadSectors(readLba, 1, fd->buf, &rmode) == 0) + fd->cachedLba = readLba; + else + break; // read error + } + doCopy = 0x800 - readPos; + if (doCopy > bytesLeft) + doCopy = bytesLeft; + + memcpy(destPos, fd->buf + readPos, doCopy); + readPos += doCopy; + readLba += readPos >> 11; + readPos &= 0x7FF; + bytesLeft -= doCopy; + fd->pos += doCopy; + destPos += doCopy; + } else { + numLba = bytesLeft >> 11; + if (cdReadSectors(readLba, numLba, destPos, &rmode) != 0) + break; + readLba += numLba; + fd->pos += numLba << 11; + destPos += numLba << 11; + bytesLeft &= 0x7FF; + } + } + return destPos - (uint8*)dest; +} + +int cd_close(iop_file_t *handle) { + FioHandle *hd = fioHandles + (int)handle->privdata; + FreeSysMemory(hd->buf); + hd->lba = hd->pos = hd->size = 0; + hd->buf = 0; + return 0; +} + +int cd_dopen(iop_file_t *handle, const char *path) { + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + int fdSlot; + ISODirectoryRecord *rec; + + if (verifyDriveReady() < 0) + return -EIO; + + rec = findPath(path); + if (!rec || !IS_DIR(rec)) + return -ENOENT; + + fdSlot = allocDioHandle(); + + if (fdSlot < 0) + return -ENFILE; + + dioHandles[fdSlot].buf = AllocSysMemory(ALLOC_FIRST, 0x800, NULL); + if (!dioHandles[fdSlot].buf) + return -ENOMEM; + + dioHandles[fdSlot].lba = READ_ARRAY32(rec->lba); + dioHandles[fdSlot].size = READ_ARRAY32(rec->size); + if (cdReadSectors(dioHandles[fdSlot].lba, 1, dioHandles[fdSlot].buf, &rmode) != 0) { + dioHandles[fdSlot].lba = dioHandles[fdSlot].size = 0; + FreeSysMemory(dioHandles[fdSlot].buf); + dioHandles[fdSlot].buf = NULL; + return -EIO; + } + dioHandles[fdSlot].curOfs = 0; + dioHandles[fdSlot].lbaOfs = 0; + handle->privdata = (void*)fdSlot; + return fdSlot; +} + +int cd_dread(iop_file_t *handle, iox_dirent_t *buf) { + CdRMode rmode = { 16, 0, CdSect2048, 0 }; + ISODirectoryRecord *rec; + DioHandle *hd = dioHandles + (int)handle->privdata; + int i; + for (i = hd->lbaOfs; i < NUM_SECTORS(hd->size); i++) { + if (i != hd->lbaOfs) { + cdReadSectors(hd->lba + i, 1, hd->buf, &rmode); + hd->lbaOfs = i; + hd->curOfs = 0; + } + while ((hd->curOfs < SECTOR_SIZE) && ((ISODirectoryRecord *)(hd->buf + hd->curOfs))->len_dr) { + rec = (ISODirectoryRecord *)(hd->buf + hd->curOfs); + hd->curOfs += rec->len_dr; + if ((rec->len_fi != 1) || ((rec->name[0] != 0) && (rec->name[0] != 1))) { // skip '.' / '..' + memcpy(buf->name, rec->name, rec->len_fi); + if ((buf->name[rec->len_fi - 2] == ';') && (buf->name[rec->len_fi - 1] == '1')) + buf->name[rec->len_fi - 2] = '\0'; + else + buf->name[rec->len_fi] = '\0'; + buf->stat.mode = FIO_S_IRUSR | FIO_S_IXUSR | FIO_S_IRGRP | FIO_S_IXGRP | FIO_S_IROTH | FIO_S_IXOTH; + buf->stat.mode |= IS_DIR(rec) ? FIO_S_IFDIR : FIO_S_IFREG; + buf->stat.attr = 0; + buf->stat.size = READ_ARRAY32(rec->size); + buf->stat.hisize = 0; + return 1; + } + } + } + return 0; +} + +int cd_dclose(iop_file_t *handle) { + DioHandle *hd; + hd = dioHandles + (int)handle->privdata; + FreeSysMemory(hd->buf); + hd->size = hd->lba = 0; + return 0; +} + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h new file mode 100644 index 0000000000..21d7dff218 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/fiofs.h @@ -0,0 +1,37 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __FIOFS_H__ +#define __FIOFS_H__ + +int initFio(void); + +int cd_open(iop_file_t *handle, const char *name, int mode); +int cd_lseek(iop_file_t *handle, int ofs, int whence); +int cd_read(iop_file_t *handle, void *dest, int length); +int cd_close(iop_file_t *handle); +int cd_dopen(iop_file_t *handle, const char *path); +int cd_dread(iop_file_t *handle, fio_dirent_t *buf); +int cd_dclose(iop_file_t *handle); + +#endif // __FIOFS_H__ + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst new file mode 100644 index 0000000000..d3ed3b0442 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/imports.lst @@ -0,0 +1,65 @@ + +cdvdman_IMPORTS_start +I_sceCdInit +I_sceCdStandby +I_sceCdRead +I_sceCdSeek +I_sceCdGetError +I_sceCdSync +I_sceCdGetDiskType +I_sceCdDiskReady +I_sceCdTrayReq +I_sceCdStop +I_sceCdReadClock +cdvdman_IMPORTS_end + +intrman_IMPORTS_start +I_CpuSuspendIntr +I_CpuResumeIntr +intrman_IMPORTS_end + +iomanX_IMPORTS_start +I_AddDrv +I_DelDrv +iomanX_IMPORTS_end + +sifcmd_IMPORTS_start +I_sceSifInitRpc +I_sceSifSetRpcQueue +I_sceSifRegisterRpc +I_sceSifRpcLoop +sifcmd_IMPORTS_end + +stdio_IMPORTS_start +I_printf +stdio_IMPORTS_end + +sysclib_IMPORTS_start +I_memcmp +I_memcpy +I_memset +I_strlen +I_strncmp +I_strtoul +I_strcpy +I_strcat +I_strchr +I_strncpy +I_strtok +I_strrchr +I_tolower +sysclib_IMPORTS_end + +sysmem_IMPORTS_start +I_AllocSysMemory +I_FreeSysMemory +sysmem_IMPORTS_end + +thbase_IMPORTS_start +I_CreateThread +I_StartThread +I_GetThreadId +I_DelayThread +thbase_IMPORTS_end + + diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/irx_imports.h b/backends/platform/ps2/iop/CoDyVDfs/iop/irx_imports.h new file mode 100644 index 0000000000..1f974cf834 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/irx_imports.h @@ -0,0 +1,30 @@ +/* +# _____ ___ ____ ___ ____ +# ____| | ____| | | |____| +# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. +#----------------------------------------------------------------------- +# Copyright (c) 2003 Marcus R. Brown +# Licenced under Academic Free License version 2.0 +# Review ps2sdk README & LICENSE files for further details. +# +# $Id$ +# Defines all IRX imports. +*/ + +#ifndef IOP_IRX_IMPORTS_H +#define IOP_IRX_IMPORTS_H + +#include "irx.h" + +/* Please keep these in alphabetical order! */ +#include "cdvdman.h" +#include "intrman.h" +#include "iomanX.h" +#include "loadcore.h" +#include "sifcmd.h" +#include "stdio.h" +#include "sysclib.h" +#include "sysmem.h" +#include "thbase.h" + +#endif /* IOP_IRX_IMPORTS_H */ diff --git a/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c new file mode 100644 index 0000000000..16f70e9ed4 --- /dev/null +++ b/backends/platform/ps2/iop/CoDyVDfs/iop/rpcfs.c @@ -0,0 +1,115 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include +#include "codyvdfs.h" +#include "../common/codyvdirx.h" + +struct t_SifRpcDataQueue qd; +struct t_SifRpcServerData sd0; +static uint8 rpcBuffer[64]; + +void *rpcServer(int func, void *data, int size); +void rpcThread(void *param); + +int initRpc(void) { + iop_thread_t thread; + int tid; + + thread.attr = TH_C; + thread.thread = rpcThread; + thread.priority = 40; + thread.stacksize = 0x1000; + thread.attr = 0; + + tid = CreateThread(&thread); + if (tid >= 0) + StartThread(tid, 0); + else { + printf("Unable to start RPC Thread!\n"); + return -1; + } + return 0; +} + +void rpcThread(void *param) { + SifInitRpc(0); + SifSetRpcQueue(&qd, GetThreadId()); + SifRegisterRpc(&sd0, CDVDFS_IRX_ID, rpcServer, (void *)rpcBuffer, 0, 0, &qd); + SifRpcLoop(&qd); +} + +void *rpcReadClock(void *data) { + CdReadClock((cd_clock_t *)data); + return data; +} + +void *driveStop(void *data) { + if (CdStop() == 1) { + if (CdSync(0) == 0) { + *(int*)data = CdGetError(); + } else + *(int*)data = -0x100; + } else + *(int*)data = -0x101; + return data; +} + +void *driveStandby(void *data) { + int type; + if (CdStandby() == 1) { + if (CdSync(0) == 0) { + *(int*)data = CdGetError(); + } else + *(int*)data = -0x100; + } else + *(int*)data = -0x101; + + do { // wait until drive detected disc type + type = CdGetDiskType(); + if (DISC_NOT_READY(type)) + DelayThread(10 * 1000); + } while (DISC_NOT_READY(type)); + printf("Standby: Disc type: %02X\n", type); + + return data; +} + +void *rpcServer(int func, void *data, int size) { + switch (func) { + case READ_RTC: + return rpcReadClock(data); + case DRIVE_STOP: + return driveStop(data); + case DRIVE_STANDBY: + return driveStandby(data); + default: + printf("Unknown RPC command %d\n", func); + return NULL; + } + return NULL; +} + + diff --git a/backends/platform/ps2/irxboot.cpp b/backends/platform/ps2/irxboot.cpp new file mode 100644 index 0000000000..fc844fc319 --- /dev/null +++ b/backends/platform/ps2/irxboot.cpp @@ -0,0 +1,215 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include "backends/ps2/irxboot.h" + +extern void sioprintf(const char *zFormat, ...); + +static const char hddArg[] = "-o" "\0" "4" "\0" "-n" "\0" "20"; +static const char pfsArg[] = "-m" "\0" "2" "\0" "-o" "\0" "16" "\0" "-n" "\0" "40" /*"\0" "-debug"*/; + +IrxFile irxFiles[] = { + { "SIO2MAN", BIOS, NOTHING, NULL, 0 }, + { "MCMAN", BIOS, NOTHING, NULL, 0 }, + { "MCSERV", BIOS, NOTHING, NULL, 0 }, + { "PADMAN", BIOS, NOTHING, NULL, 0 }, + { "LIBSD", BIOS, NOTHING, NULL, 0 }, + + { "IOMANX.IRX", SYSTEM | NOT_HOST, NOTHING, NULL, 0 }, // already loaded by ps2link + { "FILEXIO.IRX", SYSTEM, NOTHING, NULL, 0 }, + { "CODYVDFS.IRX", SYSTEM, NOTHING, NULL, 0 }, + { "SJPCM.IRX", SYSTEM, NOTHING, NULL, 0 }, + + { "USBD.IRX", USB | OPTIONAL | DEPENDANCY, USB_DRIVER, NULL, 0 }, + { "PS2MOUSE.IRX", USB | OPTIONAL, MOUSE_DRIVER, NULL, 0 }, + { "RPCKBD.IRX", USB | OPTIONAL, KBD_DRIVER, NULL, 0 }, + { "USB_MASS.IRX", USB | OPTIONAL, MASS_DRIVER, NULL, 0 }, + + { "PS2DEV9.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 }, + { "PS2ATAD.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 }, + { "PS2HDD.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, hddArg, sizeof(hddArg) }, + { "PS2FS.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, pfsArg, sizeof(pfsArg) }, + { "POWEROFF.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 } +}; + +static const int numIrxFiles = sizeof(irxFiles) / sizeof(irxFiles[0]); + +BootDevice detectBootPath(const char *elfPath, char *bootPath) { + + BootDevice device; + + if (strncasecmp(elfPath, "cdrom0:", 7) == 0) + device = CDROM; + else if (strncasecmp(elfPath, "host", 4) == 0) + device = HOST; + else + device = OTHER; + + sioprintf("elf path: %s, device %d", elfPath, device); + + strcpy(bootPath, elfPath); + + char *pathPos = bootPath; + char seperator; + + if (device == CDROM) { + // CDVD uses '\' as seperator + while (*pathPos) { + if (*pathPos == '/') + *pathPos = '\\'; + pathPos++; + } + seperator = '\\'; + } else { + // all the other devices use '/' + while (*pathPos) { + if (*pathPos == '\\') + *pathPos = '/'; + pathPos++; + } + seperator = '/'; + } + pathPos = strrchr(bootPath, seperator); + if (!pathPos) + pathPos = strchr(bootPath, ':'); + + if (pathPos) { + if ((pathPos[0] == ':') && (device == CDROM)) { + pathPos[1] = '\\'; + pathPos[2] = '\0'; + } else + pathPos[1] = '\0'; + sioprintf("done. IRX path: \"%s\"", bootPath); + } else { + sioprintf("path not recognized, default to host."); + strcpy(bootPath, "host:"); + device = UNKNOWN; + } + return device; +} + +int loadIrxModules(int device, const char *irxPath, IrxReference **modules) { + + IrxReference *resModules = (IrxReference *)malloc(numIrxFiles * sizeof(IrxReference)); + IrxReference *curModule = resModules; + + for (int i = 0; i < numIrxFiles; i++) { + curModule->fileRef = irxFiles + i; + if ((device == HOST) && (irxFiles[i].flags & NOT_HOST)) + continue; + + if ((irxFiles[i].flags & TYPEMASK) == BIOS) { + curModule->loc = IRX_FILE; + curModule->path = (char *)malloc(32); + sprintf(curModule->path, "rom0:%s", irxFiles[i].name); + curModule->buffer = NULL; + curModule->size = 0; + curModule->argSize = 0; + curModule->args = NULL; + curModule->errorCode = 0; + } else { + curModule->loc = IRX_BUFFER; + curModule->path = (char *)malloc(256); + + sprintf(curModule->path, "%s%s%s", irxPath, irxFiles[i].name, (device == CDROM) ? ";1" : ""); + int fd = fioOpen(curModule->path, O_RDONLY); + if (fd < 0) { + // IRX not found + sioprintf("Can't open %s: %d", curModule->path, fd); + // we keep the error code of the path where we originally expected the file + curModule->errorCode = fd; + + // try cdrom root directory + sprintf(curModule->path, "cdrom0:\\%s;1", irxFiles[i].name); + fd = fioOpen(curModule->path, O_RDONLY); + if (fd < 0) { + // still not found, try host: + sioprintf("Can't open %s: %d", curModule->path, fd); + sprintf(curModule->path, "host:%s", irxFiles[i].name); + fd = fioOpen(curModule->path, O_RDONLY); + if (fd < 0) { + // we simply can't find it. + sioprintf("Can't open %s: %d", curModule->path, fd); + // restore the path where we originally expected the file, for error message (later, after boot up) + sprintf(curModule->path, "%s%s%s", irxPath, irxFiles[i].name, (device == CDROM) ? ";1" : ""); + } + } + } + + if (fd >= 0) { + curModule->size = fioLseek(fd, 0, SEEK_END); + fioLseek(fd, 0, SEEK_SET); + curModule->buffer = (uint8 *)memalign(64, (curModule->size + 63) & ~63); + fioRead(fd, curModule->buffer, curModule->size); + + curModule->argSize = irxFiles[i].argSize; + curModule->args = irxFiles[i].args; + curModule->errorCode = 0; + fioClose(fd); + } else { + if (irxFiles[i].flags & DEPENDANCY) { + // other modules depend on this one. + // kill the modules we already loaded, if they depend on the one that failed. + IrxReference *pos = resModules; + while (pos < curModule) { + if ((pos->fileRef->flags & TYPEMASK) == (irxFiles[i].flags & TYPEMASK)) { + if (pos->path) + free(pos->path); + if (pos->buffer) + free(pos->buffer); + + IrxReference *copyPos = pos; + while (copyPos < curModule) { + copyPos[0] = copyPos[1]; + copyPos++; + } + curModule--; + } else + pos++; + } + // and skip any remaining modules that depend on the missing one, too. + while ((i < numIrxFiles - 1) && ((irxFiles[i + 1].flags & TYPEMASK) == (curModule->fileRef->flags & TYPEMASK))) + i++; + // the module that actually failed (curModule) is kept in the array for displaying an error message + } + curModule->size = 0; + curModule->buffer = NULL; + curModule->argSize = 0; + curModule->args = NULL; + } + } + curModule++; + } + *modules = resModules; + sioprintf("List of %d modules:", curModule - resModules); + for (int i = 0; i < curModule - resModules; i++) + sioprintf("%s", resModules[i].path); + return curModule - resModules; +} + diff --git a/backends/platform/ps2/irxboot.h b/backends/platform/ps2/irxboot.h new file mode 100644 index 0000000000..c41a4ac311 --- /dev/null +++ b/backends/platform/ps2/irxboot.h @@ -0,0 +1,84 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __IRXBOOT_H__ +#define __IRXBOOT_H__ + +#include "common/scummsys.h" + +enum IrxFlags { + BIOS = 0, + SYSTEM = 1, + USB = 2, + HDD = 3, + TYPEMASK = 3, + + OPTIONAL = 4, + DEPENDANCY = 8, + NOT_HOST = 16 +}; + +enum IrxPurpose { + NOTHING, + HDD_DRIVER, + USB_DRIVER, + MOUSE_DRIVER, + KBD_DRIVER, + MASS_DRIVER +}; + +enum IrxLocation { + IRX_BUFFER, + IRX_FILE +}; + +enum BootDevice { + HOST = 0, + CDROM, + OTHER, + UNKNOWN +}; + +struct IrxFile { + const char *name; + int flags; + IrxPurpose purpose; + const char *args; + int argSize; +}; + +struct IrxReference { + IrxFile *fileRef; + IrxLocation loc; + char *path; + void *buffer; + uint32 size; + uint32 argSize; + const char *args; + int errorCode; +}; + +BootDevice detectBootPath(const char *elfPath, char *bootPath); +int loadIrxModules(int device, const char *irxPath, IrxReference **modules); + +#endif // __IRXBOOT_H__ + diff --git a/backends/platform/ps2/ps2input.cpp b/backends/platform/ps2/ps2input.cpp new file mode 100644 index 0000000000..b3835ef648 --- /dev/null +++ b/backends/platform/ps2/ps2input.cpp @@ -0,0 +1,547 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include +#include "backends/ps2/rpckbd.h" +#include "backends/ps2/ps2input.h" +#include "backends/ps2/ps2pad.h" +#include "backends/ps2/systemps2.h" +#include "backends/ps2/sdlkeys.h" +#include "common/system.h" + +Ps2Input::Ps2Input(OSystem_PS2 *system, bool mouseLoaded, bool kbdLoaded) { + _system = system; + _mouseLoaded = mouseLoaded; + _kbdLoaded = kbdLoaded; + _pad = new Ps2Pad(system); + _lastPadCheck = 0; + _posX = _posY = _mButtons = _padLastButtons = 0; + _padAccel = 0; + _minx = _miny = 0; + _maxy = 239; + _maxx = 319; + _keyFlags = 0; + if (_mouseLoaded) { + if (PS2MouseInit() >= 0) { + PS2MouseSetReadMode(PS2MOUSE_READMODE_ABS); + printf("PS2Mouse initialized\n"); + } else { // shouldn't happen if the drivers were correctly loaded + printf("unable to initialize PS2Mouse!\n"); + _mouseLoaded = false; + } + } + if (_kbdLoaded) { + if (PS2KbdInit() >= 0) { + PS2KbdSetReadmode(PS2KBD_READMODE_RAW); + printf("PS2Kbd initialized\n"); + } else { + printf("unable to initialize PS2Kbd!\n"); + _kbdLoaded = false; + } + } +} + +Ps2Input::~Ps2Input(void) { +} + +void Ps2Input::newRange(uint16 minx, uint16 miny, uint16 maxx, uint16 maxy) { + _minx = minx; + _miny = miny; + _maxx = maxx; + _maxy = maxy; + if (_mouseLoaded) + PS2MouseSetBoundary(minx, maxx, miny, maxy); + warpTo(_posX, _posY); +} + +void Ps2Input::warpTo(uint16 x, uint16 y) { + if ((x >= _minx) && (x <= _maxx) && (y >= _miny) && (y <= _maxy)) { + _posX = x; + _posY = y; + } else { + _posX = (x < _minx) ? (_minx) : ((x > _maxx) ? (_maxx) : (x)); + _posY = (y < _miny) ? (_miny) : ((y > _maxy) ? (_maxy) : (y)); + } + if (_mouseLoaded) + PS2MouseSetPosition(_posX, _posY); +} + +#define JOY_THRESHOLD 30 +#define PAD_CHECK_TIME 20 + +int Ps2Input::mapKey(int key, int mod) { // copied from sdl backend + if (key >= SDLK_F1 && key <= SDLK_F9) { + return key - SDLK_F1 + 315; + } else if (key >= SDLK_KP0 && key <= SDLK_KP9) { + return key - SDLK_KP0 + '0'; + } else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) { + return key; + } else if (key >= 'a' && key <= 'z' && mod & OSystem::KBD_SHIFT) { + return key & ~0x20; + } else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) { + return 0; + } + return key; +} + +bool Ps2Input::pollEvent(OSystem::Event *event) { + bool checkPadMouse, checkPadKbd; + checkPadMouse = checkPadKbd = _pad->padAlive(); + + if (_mouseLoaded && (PS2MouseEnum() > 0)) { // usb mouse connected + mouse_data mData; + PS2MouseRead(&mData); + if ((_posX != mData.x) || (_posY != mData.y)) { + event->mouse.x = _posX = mData.x; + event->mouse.y = _posY = mData.y; + event->type = OSystem::EVENT_MOUSEMOVE; + return true; + } + if (mData.buttons != _mButtons) { + uint16 change = _mButtons ^ mData.buttons; + _mButtons = mData.buttons; + if (change & (PS2MOUSE_BTN1 | PS2MOUSE_BTN2)) { + if (change & PS2MOUSE_BTN1) + event->type = (_mButtons & PS2MOUSE_BTN1) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; + else + event->type = (_mButtons & PS2MOUSE_BTN2) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; + event->mouse.x = _posX; + event->mouse.y = _posY; + return true; + } + } + checkPadMouse = false; + } + if (_kbdLoaded) { // there's no way to tell if there's actually a keyboard connected + PS2KbdRawKey key; + if (PS2KbdReadRaw(&key) == 1) { + if (_usbToSdlk[key.key]) { + if ((_usbToSdlk[key.key] == SDLK_LSHIFT) || (_usbToSdlk[key.key] == SDLK_RSHIFT)) { + if (key.state & 1) + _keyFlags |= OSystem::KBD_SHIFT; + else + _keyFlags &= ~OSystem::KBD_SHIFT; + } else if ((_usbToSdlk[key.key] == SDLK_LCTRL) || (_usbToSdlk[key.key] == SDLK_RCTRL)) { + if (key.state & 1) + _keyFlags |= OSystem::KBD_CTRL; + else + _keyFlags &= ~OSystem::KBD_CTRL; + } else if ((_usbToSdlk[key.key] == SDLK_LALT) || (_usbToSdlk[key.key] == SDLK_RALT)) { + if (key.state & 1) + _keyFlags |= OSystem::KBD_ALT; + else + _keyFlags &= ~OSystem::KBD_ALT; + } + if (key.state & 1) // down + event->type = OSystem::EVENT_KEYDOWN; + else + event->type = OSystem::EVENT_KEYUP; + event->kbd.flags = 0; + event->kbd.keycode = _usbToSdlk[key.key]; + event->kbd.ascii = mapKey(_usbToSdlk[key.key], _keyFlags); + return true; + } else + printf("unknown keycode %02X - %02X\n", key.state, key.key); + } + } + if (checkPadMouse || checkPadKbd) { + // no usb mouse, simulate it using the pad + uint16 buttons; + int16 joyh, joyv; + _pad->readPad(&buttons, &joyh, &joyv); + uint16 btnChange = buttons ^ _padLastButtons; + + if (checkPadMouse) { + if (btnChange & (PAD_CROSS | PAD_CIRCLE)) { + if (btnChange & PAD_CROSS) + event->type = (buttons & PAD_CROSS) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; + else + event->type = (buttons & PAD_CIRCLE) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; + event->mouse.x = _posX; + event->mouse.y = _posY; + _padLastButtons = buttons; + return true; + } + uint32 time = _system->getMillis(); + if (time - _lastPadCheck > PAD_CHECK_TIME) { + _lastPadCheck = time; + int16 newX = _posX; + int16 newY = _posY; + if ((ABS(joyh) > JOY_THRESHOLD) || (ABS(joyv) > JOY_THRESHOLD)) { + newX += joyh / 20; + newY += joyv / 20; + } else if (buttons & PAD_DIR_MASK) { + if (_padLastButtons & PAD_DIR_MASK) { + if (_padAccel < 16) + _padAccel++; + } else + _padAccel = 0; + _padLastButtons = buttons; + if (buttons & PAD_LEFT) + newX -= _padAccel >> 2; + if (buttons & PAD_RIGHT) + newX += _padAccel >> 2; + if (buttons & PAD_UP) + newY -= _padAccel >> 2; + if (buttons & PAD_DOWN) + newY += _padAccel >> 2; + } + newX = ((newX < (int16)_minx) ? (_minx) : ((newX > (int16)_maxx) ? (_maxx) : ((int16)newX))); + newY = ((newY < (int16)_miny) ? (_miny) : ((newY > (int16)_maxy) ? (_maxy) : ((int16)newY))); + if ((_posX != newX) || (_posY != newY)) { + event->type = OSystem::EVENT_MOUSEMOVE; + event->mouse.x = _posX = newX; + event->mouse.y = _posY = newY; + return true; + } + } + } + if (checkPadKbd) { + if (getKeyEvent(event, btnChange, (btnChange & buttons) != 0)) { + _padLastButtons = buttons; + return true; + } + } + } + return false; +} + +bool Ps2Input::getKeyEvent(OSystem::Event *event, uint16 buttonCode, bool down) { + // for simulating key presses with the pad + if (buttonCode) { + uint8 entry = 0; + while (!(buttonCode & 1)) { + entry++; + buttonCode >>= 1; + } + if (_padCodes[entry]) { + event->type = (down) ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; + event->kbd.keycode = _padCodes[entry]; + event->kbd.flags = _padFlags[entry]; + event->kbd.ascii = mapKey(_padCodes[entry], _padFlags[entry]); + return true; + } + } + return false; +} + +const int Ps2Input::_usbToSdlk[0x100] = { + /* 00 */ 0, + /* 01 */ 0, + /* 02 */ 0, + /* 03 */ 0, + /* 04 */ SDLK_a, + /* 05 */ SDLK_b, + /* 06 */ SDLK_c, + /* 07 */ SDLK_d, + /* 08 */ SDLK_e, + /* 09 */ SDLK_f, + /* 0A */ SDLK_g, + /* 0B */ SDLK_h, + /* 0C */ SDLK_i, + /* 0D */ SDLK_j, + /* 0E */ SDLK_k, + /* 0F */ SDLK_l, + /* 10 */ SDLK_m, + /* 11 */ SDLK_n, + /* 12 */ SDLK_o, + /* 13 */ SDLK_p, + /* 14 */ SDLK_q, + /* 15 */ SDLK_r, + /* 16 */ SDLK_s, + /* 17 */ SDLK_t, + /* 18 */ SDLK_u, + /* 19 */ SDLK_v, + /* 1A */ SDLK_w, + /* 1B */ SDLK_x, + /* 1C */ SDLK_y, + /* 1D */ SDLK_z, + /* 1E */ SDLK_1, + /* 1F */ SDLK_2, + /* 20 */ SDLK_3, + /* 21 */ SDLK_4, + /* 22 */ SDLK_5, + /* 23 */ SDLK_6, + /* 24 */ SDLK_7, + /* 25 */ SDLK_8, + /* 26 */ SDLK_9, + /* 27 */ SDLK_0, + /* 28 */ SDLK_RETURN, + /* 29 */ SDLK_ESCAPE, + /* 2A */ SDLK_BACKSPACE, + /* 2B */ SDLK_TAB, + /* 2C */ SDLK_SPACE, + /* 2D */ SDLK_MINUS, + /* 2E */ SDLK_EQUALS, + /* 2F */ SDLK_LEFTBRACKET, + /* 30 */ SDLK_RIGHTBRACKET, + /* 31 */ SDLK_BACKSLASH, + /* 32 */ SDLK_HASH, + /* 33 */ SDLK_SEMICOLON, + /* 34 */ SDLK_QUOTE, + /* 35 */ SDLK_BACKQUOTE, + /* 36 */ SDLK_COMMA, + /* 37 */ SDLK_PERIOD, + /* 38 */ SDLK_SLASH, + /* 39 */ SDLK_CAPSLOCK, + /* 3A */ SDLK_F1, + /* 3B */ SDLK_F2, + /* 3C */ SDLK_F3, + /* 3D */ SDLK_F4, + /* 3E */ SDLK_F5, + /* 3F */ SDLK_F6, + /* 40 */ SDLK_F7, + /* 41 */ SDLK_F8, + /* 42 */ SDLK_F9, + /* 43 */ SDLK_F10, + /* 44 */ SDLK_F11, + /* 45 */ SDLK_F12, + /* 46 */ SDLK_PRINT, + /* 47 */ SDLK_SCROLLOCK, + /* 48 */ SDLK_PAUSE, + /* 49 */ SDLK_INSERT, + /* 4A */ SDLK_HOME, + /* 4B */ SDLK_PAGEUP, + /* 4C */ SDLK_DELETE, + /* 4D */ SDLK_END, + /* 4E */ SDLK_PAGEDOWN, + /* 4F */ SDLK_RIGHT, + /* 50 */ SDLK_LEFT, + /* 51 */ SDLK_DOWN, + /* 52 */ SDLK_UP, + /* 53 */ SDLK_NUMLOCK, + /* 54 */ SDLK_KP_DIVIDE, + /* 55 */ SDLK_KP_MULTIPLY, + /* 56 */ SDLK_KP_MINUS, + /* 57 */ SDLK_KP_PLUS, + /* 58 */ SDLK_KP_ENTER, + /* 59 */ SDLK_KP1, + /* 5A */ SDLK_KP2, + /* 5B */ SDLK_KP3, + /* 5C */ SDLK_KP4, + /* 5D */ SDLK_KP5, + /* 5E */ SDLK_KP6, + /* 5F */ SDLK_KP7, + /* 60 */ SDLK_KP8, + /* 61 */ SDLK_KP9, + /* 62 */ SDLK_KP0, + /* 63 */ SDLK_KP_PERIOD, + /* 64 */ 0, + /* 65 */ 0, + /* 66 */ 0, + /* 67 */ SDLK_KP_EQUALS, + /* 68 */ 0, + /* 69 */ 0, + /* 6A */ 0, + /* 6B */ 0, + /* 6C */ 0, + /* 6D */ 0, + /* 6E */ 0, + /* 6F */ 0, + /* 70 */ 0, + /* 71 */ 0, + /* 72 */ 0, + /* 73 */ 0, + /* 74 */ 0, + /* 75 */ 0, + /* 76 */ 0, + /* 77 */ 0, + /* 78 */ 0, + /* 79 */ 0, + /* 7A */ 0, + /* 7B */ 0, + /* 7C */ 0, + /* 7D */ 0, + /* 7E */ 0, + /* 7F */ 0, + /* 80 */ 0, + /* 81 */ 0, + /* 82 */ 0, + /* 83 */ 0, + /* 84 */ 0, + /* 85 */ 0, + /* 86 */ 0, + /* 87 */ 0, + /* 88 */ 0, + /* 89 */ 0, + /* 8A */ 0, + /* 8B */ 0, + /* 8C */ 0, + /* 8D */ 0, + /* 8E */ 0, + /* 8F */ 0, + /* 90 */ 0, + /* 91 */ 0, + /* 92 */ 0, + /* 93 */ 0, + /* 94 */ 0, + /* 95 */ 0, + /* 96 */ 0, + /* 97 */ 0, + /* 98 */ 0, + /* 99 */ 0, + /* 9A */ 0, + /* 9B */ 0, + /* 9C */ 0, + /* 9D */ 0, + /* 9E */ 0, + /* 9F */ 0, + /* A0 */ 0, + /* A1 */ 0, + /* A2 */ 0, + /* A3 */ 0, + /* A4 */ 0, + /* A5 */ 0, + /* A6 */ 0, + /* A7 */ 0, + /* A8 */ 0, + /* A9 */ 0, + /* AA */ 0, + /* AB */ 0, + /* AC */ 0, + /* AD */ 0, + /* AE */ 0, + /* AF */ 0, + /* B0 */ 0, + /* B1 */ 0, + /* B2 */ 0, + /* B3 */ 0, + /* B4 */ 0, + /* B5 */ 0, + /* B6 */ 0, + /* B7 */ 0, + /* B8 */ 0, + /* B9 */ 0, + /* BA */ 0, + /* BB */ 0, + /* BC */ 0, + /* BD */ 0, + /* BE */ 0, + /* BF */ 0, + /* C0 */ 0, + /* C1 */ 0, + /* C2 */ 0, + /* C3 */ 0, + /* C4 */ 0, + /* C5 */ 0, + /* C6 */ 0, + /* C7 */ 0, + /* C8 */ 0, + /* C9 */ 0, + /* CA */ 0, + /* CB */ 0, + /* CC */ 0, + /* CD */ 0, + /* CE */ 0, + /* CF */ 0, + /* D0 */ 0, + /* D1 */ 0, + /* D2 */ 0, + /* D3 */ 0, + /* D4 */ 0, + /* D5 */ 0, + /* D6 */ 0, + /* D7 */ 0, + /* D8 */ 0, + /* D9 */ 0, + /* DA */ 0, + /* DB */ 0, + /* DC */ 0, + /* DD */ 0, + /* DE */ 0, + /* DF */ 0, + /* E0 */ SDLK_LCTRL, + /* E1 */ SDLK_LSHIFT, + /* E2 */ SDLK_LALT, + /* E3 */ 0, + /* E4 */ SDLK_RCTRL, + /* E5 */ SDLK_RSHIFT, + /* E6 */ SDLK_RALT, + /* E7 */ 0, + /* E8 */ 0, + /* E9 */ 0, + /* EA */ 0, + /* EB */ 0, + /* EC */ 0, + /* ED */ 0, + /* EE */ 0, + /* EF */ 0, + /* F0 */ 0, + /* F1 */ 0, + /* F2 */ 0, + /* F3 */ 0, + /* F4 */ 0, + /* F5 */ 0, + /* F6 */ 0, + /* F7 */ 0, + /* F8 */ 0, + /* F9 */ 0, + /* FA */ 0, + /* FB */ 0, + /* FC */ 0, + /* FD */ 0, + /* FE */ 0, + /* FF */ 0 +}; + +const int Ps2Input::_padCodes[16] = { + SDLK_1, // Select + 0, // L3 + 0, // R3 + SDLK_F5, // Start + 0, // Up + 0, // Right + 0, // Down + 0, // Left + SDLK_KP0, // L2 + 0, // R2 + SDLK_n, // L1 + SDLK_y, // R1 + SDLK_ESCAPE, // Triangle + 0, // Circle => Right mouse button + 0, // Cross => Left mouse button + SDLK_RETURN // Square +}; + +const int Ps2Input::_padFlags[16] = { + 0, // Select + 0, // L3 + 0, // R3 + 0, // Start + 0, // Up + 0, // Right + 0, // Down + 0, // Left + 0, // L2 + 0, // R2 + 0, // L1 + 0, // R1 + 0, // Triangle + 0, // Circle + 0, // Cross + 0 // Square +}; + + diff --git a/backends/platform/ps2/ps2input.h b/backends/platform/ps2/ps2input.h new file mode 100644 index 0000000000..c7a29c7bfd --- /dev/null +++ b/backends/platform/ps2/ps2input.h @@ -0,0 +1,59 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __PS2INPUT_H__ +#define __PS2INPUT_H__ + +#include "common/system.h" + +class OSystem_PS2; +class Ps2Pad; + +class Ps2Input { +public: + Ps2Input(OSystem_PS2 *system, bool mouseLoaded, bool kbdLoaded); + ~Ps2Input(void); + void newRange(uint16 minx, uint16 miny, uint16 maxx, uint16 maxy); + bool pollEvent(OSystem::Event *event); + void warpTo(uint16 x, uint16 y); +private: + int mapKey(int key, int mod); + bool getKeyEvent(OSystem::Event *event, uint16 buttonCode, bool down); + OSystem_PS2 *_system; + Ps2Pad *_pad; + + uint16 _minx, _maxx, _miny, _maxy; + + uint16 _posX, _posY; + uint16 _mButtons; + uint16 _padLastButtons; + uint32 _lastPadCheck; + uint16 _padAccel; + + bool _mouseLoaded, _kbdLoaded; + int _keyFlags; + static const int _padCodes[16], _padFlags[16]; + static const int _usbToSdlk[0x100]; +}; + +#endif // __PS2INPUT_H__ + diff --git a/backends/platform/ps2/ps2mutex.cpp b/backends/platform/ps2/ps2mutex.cpp new file mode 100644 index 0000000000..6ae9a3a005 --- /dev/null +++ b/backends/platform/ps2/ps2mutex.cpp @@ -0,0 +1,85 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "backends/ps2/systemps2.h" + +OSystem::MutexRef OSystem_PS2::createMutex(void) { + WaitSema(_mutexSema); + Ps2Mutex *mutex = NULL; + for (int i = 0; i < MAX_MUTEXES; i++) + if (_mutex[i].sema < 0) { + mutex = _mutex + i; + break; + } + if (mutex) { + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + mutex->sema = CreateSema(&newSema); + mutex->owner = mutex->count = 0; + } else + printf("OSystem_PS2::createMutex: ran out of Mutex slots!\n"); + SignalSema(_mutexSema); + return (OSystem::MutexRef)mutex; +} + +void OSystem_PS2::lockMutex(MutexRef mutex) { + WaitSema(_mutexSema); + Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; + int tid = GetThreadId(); + assert(tid != 0); + if (sysMutex->owner && (sysMutex->owner == tid)) + sysMutex->count++; + else { + SignalSema(_mutexSema); + WaitSema(sysMutex->sema); + WaitSema(_mutexSema); + sysMutex->owner = tid; + sysMutex->count = 0; + } + SignalSema(_mutexSema); +} + +void OSystem_PS2::unlockMutex(MutexRef mutex) { + WaitSema(_mutexSema); + Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; + int tid = GetThreadId(); + if (sysMutex->owner && sysMutex->count && (sysMutex->owner == tid)) + sysMutex->count--; + else { + assert(sysMutex->count == 0); + SignalSema(sysMutex->sema); + sysMutex->owner = 0; + } + SignalSema(_mutexSema); +} + +void OSystem_PS2::deleteMutex(MutexRef mutex) { + WaitSema(_mutexSema); + Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; + if (sysMutex->owner || sysMutex->count) + printf("WARNING: Deleting LOCKED mutex!\n"); + DeleteSema(sysMutex->sema); + sysMutex->sema = -1; + SignalSema(_mutexSema); +} + diff --git a/backends/platform/ps2/ps2pad.cpp b/backends/platform/ps2/ps2pad.cpp new file mode 100644 index 0000000000..8394a421db --- /dev/null +++ b/backends/platform/ps2/ps2pad.cpp @@ -0,0 +1,150 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include "backends/ps2/systemps2.h" +#include "backends/ps2/ps2pad.h" + +Ps2Pad::Ps2Pad(OSystem_PS2 *system) { + _system = system; + _padBuf = (uint8*)memalign(64, 256); + _padStatus = STAT_NONE; + + padInit(0); // initialize library + _port = _slot = 0; // first controller, no multitap + initPad(); +} + +void Ps2Pad::initPad(void) { + int modes = 0; + if (_padStatus == STAT_NONE) { + if (padPortOpen(_port, _slot, _padBuf) == 1) { + _padStatus = STAT_OPEN; + _padInitTime = _system->getMillis(); + } else { + padPortClose(_port, _slot); + printf("Unable to open port (%d/%d)!\n", _port, _slot); + } + } else { + if (checkPadReady(_port, _slot)) { + switch (_padStatus) { + case STAT_OPEN: + _padStatus = STAT_DETECT; + break; + case STAT_DETECT: + _isDualShock = false; + modes = padInfoMode(_port, _slot, PAD_MODETABLE, -1); + + // Verify that the controller has a DUAL SHOCK mode + for (int cnt = 0; cnt < modes; cnt++) + if (padInfoMode(_port, _slot, PAD_MODETABLE, cnt) == PAD_TYPE_DUALSHOCK) + _isDualShock = true; + + // If ExId != 0x0 => This controller has actuator engines + // This check should always pass if the Dual Shock test above passed + if (_isDualShock) + if (padInfoMode(_port, _slot, PAD_MODECUREXID, 0) == 0) + _isDualShock = false; + + if (_isDualShock) { + // When using MMODE_LOCK, user cant change mode with Select button + padSetMainMode(_port, _slot, PAD_MMODE_DUALSHOCK, PAD_MMODE_LOCK); + _padStatus = STAT_INIT_DSHOCK; + } else + _padStatus = STAT_WAIT_READY; + break; + case STAT_INIT_DSHOCK: + padEnterPressMode(_port, _slot); + _padStatus = STAT_CHECK_ACT; + break; + case STAT_CHECK_ACT: + _actuators = padInfoAct(_port, _slot, -1, 0); + if (_actuators != 0) + _padStatus = STAT_INIT_ACT; + else { + _isDualShock = false; + _padStatus = STAT_WAIT_READY; + } + break; + case STAT_INIT_ACT: + char actAlign[6]; + actAlign[0] = 0; + actAlign[1] = 1; + actAlign[2] = actAlign[3] = actAlign[4] = actAlign[5] = 0xff; + padSetActAlign(_port, _slot, actAlign); + _padStatus = STAT_WAIT_READY; + break; + case STAT_WAIT_READY: + _padStatus = STAT_OKAY; + break; + case STAT_OKAY: + // pad is already initialized + break; + } + } else { + // check for timeout... + if (_system->getMillis() - _padInitTime > 5000) { + // still no pad, give up. + if (padPortClose(_port, _slot) != 1) + printf("WARNING: can't close port: %d/%d\n", _port, _slot); + printf("looking for pad, gave up and closed port\n"); + _padStatus = STAT_NONE; + } + } + } +} + +bool Ps2Pad::checkPadReady(int port, int slot) { + int state = padGetState(port, slot); + return (state == PAD_STATE_STABLE) || (state == PAD_STATE_FINDCTP1); +} + +bool Ps2Pad::padAlive(void) { + if ((_padStatus == STAT_OKAY) && checkPadReady(_port, _slot)) + return true; + initPad(); + return false; +} + +bool Ps2Pad::isDualShock(void) { + return _isDualShock; +} + +void Ps2Pad::readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv) { + if (padAlive()) { + struct padButtonStatus buttons; + padRead(_port, _slot, &buttons); + *pbuttons = ~buttons.btns; + if (_isDualShock) { + *joyh = (int16)buttons.ljoy_h - 128; + *joyv = (int16)buttons.ljoy_v - 128; + } else + *joyh = *joyv = 0; + } else { + *joyh = *joyv = 0; + *pbuttons = 0; + } +} + + diff --git a/backends/platform/ps2/ps2pad.h b/backends/platform/ps2/ps2pad.h new file mode 100644 index 0000000000..0e2994aafe --- /dev/null +++ b/backends/platform/ps2/ps2pad.h @@ -0,0 +1,66 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __PS2PAD_H__ +#define __PS2PAD_H__ + +enum PadStatus { + STAT_NONE, + STAT_OPEN, + STAT_DETECT, + STAT_INIT_DSHOCK, + STAT_CHECK_ACT, + STAT_INIT_ACT, + STAT_WAIT_READY, + STAT_OKAY +}; + +#include "common/system.h" +#include + +#define PAD_DIR_MASK (PAD_LEFT | PAD_DOWN | PAD_RIGHT | PAD_UP) +#define PAD_BUTTON_MASK (PAD_START | PAD_SELECT | PAD_SQUARE | PAD_CROSS | PAD_CIRCLE | PAD_TRIANGLE) + +class OSystem_PS2; + +class Ps2Pad { +public: + Ps2Pad(OSystem_PS2 *system); + bool padAlive(void); + bool isDualShock(void); + void readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv); +private: + void initPad(void); + bool checkPadReady(int port, int slot); + + OSystem_PS2 *_system; + int _port, _slot; + + uint32 _padInitTime; + PadStatus _padStatus; + bool _isDualShock; + uint8 *_padBuf; + char _actuators; +}; + +#endif //__PS2PAD_H__ + diff --git a/backends/platform/ps2/ps2time.cpp b/backends/platform/ps2/ps2time.cpp new file mode 100644 index 0000000000..bfccfe1300 --- /dev/null +++ b/backends/platform/ps2/ps2time.cpp @@ -0,0 +1,126 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "backends/ps2/systemps2.h" +#include "eecodyvdfs.h" +#include +#define FROM_BCD(a) ((a >> 4) * 10 + (a & 0xF)) + +static int g_timeSecs; +static int g_day, g_month, g_year; +static int g_lastTimeCheck; +extern volatile uint32 msecCount; + +void buildNewDate(int dayDiff) { + static int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + if (((g_year % 4) == 0) && (((g_year % 100) != 0) || ((g_year % 1000) == 0))) + daysPerMonth[1] = 29; + else + daysPerMonth[1] = 28; + + if (dayDiff == -1) { + g_day--; + if (g_day == 0) { + g_month--; + if (g_month == 0) { + g_year--; + g_month = 12; + } + g_day = daysPerMonth[g_month - 1]; + } + } else if (dayDiff == 1) { + g_day++; + if (g_day > daysPerMonth[g_month - 1]) { + g_day = 1; + g_month++; + if (g_month > 12) { + g_month = 1; + g_year++; + } + } + } +} + +#define SECONDS_PER_DAY (24 * 60 * 60) + +void OSystem_PS2::readRtcTime(void) { + struct CdClock cdClock; + readRTC(&cdClock); + + g_lastTimeCheck = getMillis(); + + if (cdClock.stat) { + msgPrintf(5000, "Unable to read RTC time, EC: %d\n", cdClock.stat); + g_day = g_month = 1; + g_year = 0; + g_timeSecs = 0; + } else { + int gmtOfs = configGetTimezone(); + if (configIsDaylightSavingEnabled()) + gmtOfs += 60; + + int timeSecs = (FROM_BCD(cdClock.hour) * 60 + FROM_BCD(cdClock.minute)) * 60 + FROM_BCD(cdClock.second); + timeSecs -= 9 * 60 * 60; // minus 9 hours, JST -> GMT conversion + timeSecs += gmtOfs * 60; // GMT -> timezone the user selected + + g_day = FROM_BCD(cdClock.day); + g_month = FROM_BCD(cdClock.month); + g_year = FROM_BCD(cdClock.year); + + if (timeSecs < 0) { + buildNewDate(-1); + timeSecs += SECONDS_PER_DAY; + } else if (timeSecs >= SECONDS_PER_DAY) { + buildNewDate(+1); + timeSecs -= SECONDS_PER_DAY; + } + g_timeSecs = (uint32)timeSecs; + } + + sioprintf("Time: %d:%02d:%02d - %d.%d.%4d", g_timeSecs / (60 * 60), (g_timeSecs / 60) % 60, g_timeSecs % 60, + g_day, g_month, g_year + 2000); +} + +extern "C" time_t time(time_t *p) { + return (time_t)g_timeSecs; +} + +extern "C" struct tm *localtime(const time_t *p) { + uint32 currentSecs = g_timeSecs + (msecCount - g_lastTimeCheck) / 1000; + if (currentSecs >= SECONDS_PER_DAY) { + buildNewDate(+1); + g_lastTimeCheck += SECONDS_PER_DAY * 1000; + currentSecs = g_timeSecs + (msecCount - g_lastTimeCheck) / 1000; + } + + static struct tm retStruct; + memset(&retStruct, 0, sizeof(retStruct)); + + retStruct.tm_hour = currentSecs / (60 * 60); + retStruct.tm_min = (currentSecs / 60) % 60; + retStruct.tm_sec = currentSecs % 60; + retStruct.tm_year = g_year + 100; + retStruct.tm_mday = g_day; + retStruct.tm_mon = g_month - 1; + // tm_wday, tm_yday and tm_isdst are zero for now + return &retStruct; +} diff --git a/backends/platform/ps2/savefile.cpp b/backends/platform/ps2/savefile.cpp new file mode 100644 index 0000000000..495fc556b3 --- /dev/null +++ b/backends/platform/ps2/savefile.cpp @@ -0,0 +1,801 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "backends/ps2/savefile.h" +#include "backends/ps2/Gs2dScreen.h" +#include "backends/ps2/systemps2.h" +#include "common/scummsys.h" + +extern void *_gp; + +#define UCL_MAGIC 0x314C4355 + +#define PORT 0 +#define SLOT 0 +// port 0, slot 0: memory card in first slot. + +void sioprintf(const char *zFormat, ...); + +class McAccess { +public: + McAccess(int port, int slot); + ~McAccess(void); + int open(const char *name, int mode); + int close(int fd); + int size(int fd); + int read(int fd, void *buf, int size); + int write(int fd, const void *buf, int size); + int mkDir(const char *name); + int getDir(const char *name, unsigned int mode, int max, void *dest); + int getInfo(int *type, int *free, int *format); + int remove(const char *name); +private: + int _sema; + int _port, _slot; +}; + +McAccess::McAccess(int port, int slot) { + _port = port; + _slot = slot; + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + _sema = CreateSema(&newSema); + + assert(mcInit(MC_TYPE_MC) >= 0); +} + +McAccess::~McAccess(void) { + DeleteSema(_sema); +} + +int McAccess::open(const char *name, int mode) { + int res; + WaitSema(_sema); + mcOpen(_port, _slot, name, mode); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::close(int fd) { + int res; + WaitSema(_sema); + mcClose(fd); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::size(int fd) { + int res, size; + WaitSema(_sema); + mcSeek(fd, 0, SEEK_END); + mcSync(0, NULL, &size); + mcSeek(fd, 0, SEEK_SET); + mcSync(0, NULL, &res); + SignalSema(_sema); + assert(res == 0); + return size; +} + +int McAccess::read(int fd, void *buf, int size) { + int res; + WaitSema(_sema); + mcRead(fd, buf, size); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::write(int fd, const void *buf, int size) { + int res; + WaitSema(_sema); + mcWrite(fd, buf, size); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::mkDir(const char *name) { + int res; + WaitSema(_sema); + mcMkDir(_port, _slot, name); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::remove(const char *name) { + int res; + WaitSema(_sema); + mcDelete(_port, _slot, name); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::getDir(const char *name, unsigned int mode, int max, void *dest) { + int res; + WaitSema(_sema); + mcGetDir(_port, _slot, name, mode, max, (mcTable*)dest); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +int McAccess::getInfo(int *type, int *free, int *format) { + int res; + WaitSema(_sema); + mcGetInfo(_port, _slot, type, free, format); + mcSync(0, NULL, &res); + SignalSema(_sema); + return res; +} + +class UclOutSaveFile : public Common::OutSaveFile { +public: + UclOutSaveFile(const char *filename, OSystem_PS2 *system, Gs2dScreen *screen, McAccess *mc); + virtual ~UclOutSaveFile(void); + virtual uint32 write(const void *ptr, uint32 size); + virtual void flush(void); + virtual bool ioFailed(void) const; + virtual void clearIOFailed(void); +private: + OSystem_PS2 *_system; + Gs2dScreen *_screen; + McAccess *_mc; + int _fd; + uint8 *_buf; + uint32 _bufSize, _bufPos; + bool _ioFailed, _wasFlushed; + char _fileName[128]; +}; + +class UclInSaveFile : public Common::InSaveFile { +public: + UclInSaveFile(const char *filename, Gs2dScreen *screen, McAccess *mc); + virtual ~UclInSaveFile(void); + virtual bool eos(void) const; + virtual uint32 read(void *ptr, uint32 size); + virtual bool ioFailed(void) const; + virtual void clearIOFailed(void); + virtual void skip(uint32 offset); + + virtual uint32 pos(void) const; + virtual uint32 size(void) const; + virtual void seek(int pos, int whence = SEEK_SET); +private: + Gs2dScreen *_screen; + McAccess *_mc; + uint8 *_buf; + uint32 _bufSize, _bufPos; + bool _ioFailed; +}; + +class AutoSaveFile : public Common::OutSaveFile { +public: + AutoSaveFile(Ps2SaveFileManager *saveMan, const char *filename); + ~AutoSaveFile(void); + virtual uint32 write(const void *ptr, uint32 size); + virtual void flush(void) { }; + virtual bool ioFailed(void) { return false; }; + virtual void clearIOFailed(void) {}; +private: + Ps2SaveFileManager *_saveMan; + char _fileName[256]; + uint8 *_buf; + uint32 _bufSize, _bufPos; +}; + +AutoSaveFile::AutoSaveFile(Ps2SaveFileManager *saveMan, const char *filename) { + strcpy(_fileName, filename); + _saveMan = saveMan; + _bufSize = 65536; + _buf = (uint8*)memalign(64, _bufSize); + _bufPos = 0; +} + +AutoSaveFile::~AutoSaveFile(void) { + _saveMan->writeSaveNonblocking(_fileName, _buf, _bufPos); + free(_buf); +} + +uint32 AutoSaveFile::write(const void *ptr, uint32 size) { + uint32 bytesFree = _bufSize - _bufPos; + if (bytesFree < size) { + uint32 allocBytes = (size > 32 * 1024) ? size : 32 * 1024; + _bufSize += allocBytes; + _buf = (uint8*)realloc(_buf, _bufSize); + bytesFree = _bufSize - _bufPos; + } + memcpy(_buf + _bufPos, ptr, size); + _bufPos += size; + return size; +} + +#define MAX_MC_ENTRIES 16 + +void runSaveThread(Ps2SaveFileManager *param); + +Ps2SaveFileManager::Ps2SaveFileManager(OSystem_PS2 *system, Gs2dScreen *screen) { + _system = system; + _screen = screen; + _mc = new McAccess(0, 0); + + _mcDirList = (mcTable*)memalign(64, MAX_MC_ENTRIES * sizeof(mcTable)); + _mcDirName[0] = '\0'; + _mcCheckTime = 0; + _mcNeedsUpdate = true; + + for (int mcCheckCount = 0; mcCheckCount < 3; mcCheckCount++) { + /* retry mcGetInfo 3 times. It slows down startup without mc considerably, + but cheap 3rd party memory cards apparently fail to get detected once in a while */ + + int mcType, mcFree, mcFormat; + int res = _mc->getInfo(&mcType, &mcFree, &mcFormat); + + if ((res == 0) || (res == -1)) { // mc okay + _mcPresent = true; + printf("MC okay, result = %d. Type %d, Free %d, Format %d\n", res, mcType, mcFree, mcFormat); + checkMainDirectory(); + break; + } else { + _mcPresent = false; + printf("MC failed, not present or not formatted, code %d\n", res); + } + } + + // create save thread + ee_sema_t newSema; + newSema.init_count = 0; + newSema.max_count = 1; + _autoSaveSignal = CreateSema(&newSema); + _autoSaveBuf = NULL; + _autoSaveSize = 0; + _systemQuit = false; + + ee_thread_t saveThread, thisThread; + ReferThreadStatus(GetThreadId(), &thisThread); + + saveThread.initial_priority = thisThread.current_priority + 1; + saveThread.stack_size = 8 * 1024; + _autoSaveStack = malloc(saveThread.stack_size); + saveThread.stack = _autoSaveStack; + saveThread.func = (void *)runSaveThread; + saveThread.gp_reg = &_gp; + + _autoSaveTid = CreateThread(&saveThread); + assert(_autoSaveTid >= 0); + StartThread(_autoSaveTid, this); +} + +Ps2SaveFileManager::~Ps2SaveFileManager(void) { +} + +void Ps2SaveFileManager::checkMainDirectory(void) { + // verify that the main directory (scummvm config + icon) exists + int ret, fd; + _mcNeedsUpdate = true; + ret = _mc->getDir("/ScummVM/*", 0, MAX_MC_ENTRIES, _mcDirList); + printf("/ScummVM/* res = %d\n", ret); + if (ret <= 0) { // assume directory doesn't exist + printf("Dir doesn't exist\n"); + ret = _mc->mkDir("/ScummVM"); + if (ret >= 0) { + fd = _mc->open("/ScummVM/scummvm.icn", O_WRONLY | O_CREAT); + if (fd >= 0) { + uint16 icoSize; + uint16 *icoBuf = decompressIconData(&icoSize); + ret = _mc->write(fd, icoBuf, icoSize * 2); + _mc->close(fd); + free(icoBuf); + + printf(".icn written\n"); + setupIcon("/ScummVM/icon.sys", "scummvm.icn", "ScummVM", "Configuration"); + } else + printf("Can't create icon file: %d\n", fd); + } else + printf("can't create scummvm directory: %d\n", ret); + } +} + +void Ps2SaveFileManager::splitPath(const char *fileName, char *dir, char *name) { + strcpy(dir, fileName); + char *ext = strchr(dir, '.'); + if (ext) { + *ext = '\0'; + ext++; + } + if (ext && *ext) + sprintf(name, "%s.ucl", ext); + else + strcpy(name, "save.ucl"); +} + +bool Ps2SaveFileManager::mcReadyForDir(const char *dir) { + if (_mcNeedsUpdate || ((_system->getMillis() - _mcCheckTime) > 2000) || !_mcPresent) { + // check if memory card was exchanged/removed in the meantime + int mcType, mcFree, mcFormat, mcResult; + mcResult = _mc->getInfo(&mcType, &mcFree, &mcFormat); + if (mcResult != 0) { // memory card was exchanged + _mcNeedsUpdate = true; + if (mcResult == -1) { // yes, it was exchanged + checkMainDirectory(); // make sure ScummVM dir and icon are there + } else { // no memorycard in slot or not formatted or something like that + _mcPresent = false; + printf("MC not found, error code %d\n", mcResult); + return false; + } + } + _mcPresent = true; + _mcCheckTime = _system->getMillis(); + } + if (_mcNeedsUpdate || strcmp(_mcDirName, dir)) { + strcpy(_mcDirName, dir); + char dirStr[256]; + sprintf(dirStr, "/ScummVM-%s/*", dir); + _mcEntries = _mc->getDir(dirStr, 0, MAX_MC_ENTRIES, _mcDirList); + _mcNeedsUpdate = false; + } + return (_mcEntries >= 0); +} + +Common::InSaveFile *Ps2SaveFileManager::openForLoading(const char *filename) { + _screen->wantAnim(true); + + char dir[256], name[256]; + splitPath(filename, dir, name); + if (mcReadyForDir(dir)) { + bool fileExists = false; + for (int i = 0; i < _mcEntries; i++) + if (strcmp(name, (char*)_mcDirList[i].name) == 0) + fileExists = true; + if (fileExists) { + char fullName[256]; + sprintf(fullName, "/ScummVM-%s/%s", dir, name); + UclInSaveFile *file = new UclInSaveFile(fullName, _screen, _mc); + if (file) { + if (!file->ioFailed()) + return file; + else + delete file; + } + } else + printf("file %s (%s) doesn't exist\n", filename, name); + } + _screen->wantAnim(false); + return NULL; +} + +Common::OutSaveFile *Ps2SaveFileManager::openForSaving(const char *filename) { + int res; + char dir[256], name[256]; + + _screen->wantAnim(true); + splitPath(filename, dir, name); + + if (!mcReadyForDir(dir)) { + if (_mcPresent) { // directory doesn't seem to exist yet + char fullPath[256]; + sprintf(fullPath, "/ScummVM-%s", dir); + res = _mc->mkDir(fullPath); + + char icoSysDest[256], saveDesc[256]; + sprintf(icoSysDest, "%s/icon.sys", fullPath); + strcpy(saveDesc, dir); + if ((saveDesc[0] >= 'a') && (saveDesc[0] <= 'z')) + saveDesc[0] += 'A' - 'a'; + setupIcon(icoSysDest, "../ScummVM/scummvm.icn", saveDesc, "Savegames"); + } + } + + if (_mcPresent) { + char fullPath[256]; + sprintf(fullPath, "/ScummVM-%s/%s", dir, name); + if (strstr(filename, ".s00") || strstr(filename, ".ASD") || strstr(filename, ".asd")) { + // this is an autosave + AutoSaveFile *file = new AutoSaveFile(this, fullPath); + return file; + } else { + UclOutSaveFile *file = new UclOutSaveFile(fullPath, _system, _screen, _mc); + if (!file->ioFailed()) { + // we're creating a file, mc will have to be updated next time + _mcNeedsUpdate = true; + return file; + } else + delete file; + } + } + + _screen->wantAnim(false); + return NULL; +} + +void Ps2SaveFileManager::listSavefiles(const char *prefix, bool *marks, int num) { + _screen->wantAnim(true); + + int mcType, mcFree, mcFormat, mcResult; + mcResult = _mc->getInfo(&mcType, &mcFree, &mcFormat); + + memset(marks, false, num * sizeof(bool)); + + if ((mcResult == 0) || (mcResult == -1)) { + // there's a memory card in the slot. + if (mcResult == -1) + _mcNeedsUpdate = true; + + mcTable *mcEntries = (mcTable*)memalign(64, sizeof(mcTable) * MAX_MC_ENTRIES); + + char dirStr[256], ext[256], mcSearchStr[256]; + strcpy(dirStr, prefix); + char *pos = strchr(dirStr, '.'); + if (pos) { + strcpy(ext, pos + 1); + *pos = '\0'; + } else + ext[0] = '\0'; + sprintf(mcSearchStr, "/ScummVM-%s/%s*", dirStr, ext); + + int numEntries = _mc->getDir(mcSearchStr, 0, MAX_MC_ENTRIES, mcEntries); + + int searchLen = strlen(ext); + for (int i = 0; i < numEntries; i++) + if ((((char*)mcEntries[i].name)[0] != '.') && stricmp((char*)mcEntries[i].name, "icon.sys")) { + char *stopCh; + int destNum = (int)strtoul((char*)mcEntries[i].name + searchLen, &stopCh, 10); + if ((!stopCh) || strcmp(stopCh, ".ucl")) + printf("unexpected end %s in name %s, search %s\n", stopCh, (char*)mcEntries[i].name, prefix); + if (destNum < num) + marks[destNum] = true; + } + free(mcEntries); + } + _screen->wantAnim(false); +} + +const char *Ps2SaveFileManager::getSavePath(void) const { + return "mc0:"; +} + +bool Ps2SaveFileManager::setupIcon(const char *dest, const char *ico, const char *descr1, const char *descr2) { + mcIcon icon_sys; + memset(&icon_sys, 0, sizeof(mcIcon)); + memcpy(icon_sys.head, "PS2D", 4); + char title[256]; + if (!stricmp("SAVEGAME", descr1)) { // these are broken sword 1 savegames + sprintf(title, "BSword1\n%s", descr2); + icon_sys.nlOffset = 8; + } else { + sprintf(title, "%s\n%s", descr1, descr2); + icon_sys.nlOffset = strlen(descr1) + 1; + } + strcpy_sjis((short*)&(icon_sys.title), title); + icon_sys.trans = 0x10; + memcpy(icon_sys.bgCol, _bgcolor, sizeof(_bgcolor)); + memcpy(icon_sys.lightDir, _lightdir, sizeof(_lightdir)); + memcpy(icon_sys.lightCol, _lightcol, sizeof(_lightcol)); + memcpy(icon_sys.lightAmbient, _ambient, sizeof(_ambient)); + strcpy((char*)icon_sys.view, ico); + strcpy((char*)icon_sys.copy, ico); + strcpy((char*)icon_sys.del, ico); + + int fd, res; + fd = _mc->open(dest, O_WRONLY | O_CREAT); + if (fd >= 0) { + res = _mc->write(fd, &icon_sys, sizeof(icon_sys)); + _mc->close(fd); + return (res == sizeof(icon_sys)); + } else + return false; +} + +uint16 *Ps2SaveFileManager::decompressIconData(uint16 *size) { + uint16 inPos = 1; + uint16 *rleData = (uint16*)_rleIcoData; + uint16 resSize = rleData[0]; + uint16 *resData = (uint16*)malloc(resSize * sizeof(uint16)); + uint16 outPos = 0; + while (outPos < resSize) { + uint16 len = rleData[inPos++]; + while (len--) + resData[outPos++] = 0x7FFF; + len = rleData[inPos++]; + while (len--) + resData[outPos++] = rleData[inPos++]; + } + *size = resSize; + assert(outPos == resSize); + return resData; +} + +void runSaveThread(Ps2SaveFileManager *param) { + param->saveThread(); +} + +void Ps2SaveFileManager::writeSaveNonblocking(char *name, void *buf, uint32 size) { + if (buf && size && !_systemQuit) { + strcpy(_autoSaveName, name); + assert(!_autoSaveBuf); + _autoSaveBuf = (uint8*)malloc(size); + memcpy(_autoSaveBuf, buf, size); + _autoSaveSize = size; + SignalSema(_autoSaveSignal); + } +} + +void Ps2SaveFileManager::saveThread(void) { + while (!_systemQuit) { + WaitSema(_autoSaveSignal); + if (_autoSaveBuf && _autoSaveSize) { + UclOutSaveFile *outSave = new UclOutSaveFile(_autoSaveName, _system, _screen, _mc); + if (!outSave->ioFailed()) { + outSave->write(_autoSaveBuf, _autoSaveSize); + outSave->flush(); + } + if (outSave->ioFailed()) + _system->msgPrintf(5000, "Writing autosave to %s failed", _autoSaveName); + delete outSave; + free(_autoSaveBuf); + _autoSaveBuf = NULL; + _autoSaveSize = 0; + _mcNeedsUpdate = true; // we've created a file, mc will have to be updated + _screen->wantAnim(false); + } + } + ExitThread(); +} + +void Ps2SaveFileManager::quit(void) { + _systemQuit = true; + ee_thread_t statSave, statThis; + ReferThreadStatus(GetThreadId(), &statThis); + ChangeThreadPriority(_autoSaveTid, statThis.current_priority - 1); + + do { // wait until thread called ExitThread() + SignalSema(_autoSaveSignal); + ReferThreadStatus(_autoSaveTid, &statSave); + } while (statSave.status != 0x10); + + DeleteThread(_autoSaveTid); + free(_autoSaveStack); +} + +UclInSaveFile::UclInSaveFile(const char *filename, Gs2dScreen *screen, McAccess *mc) { + _screen = screen; + _mc = mc; + int fd = _mc->open(filename, O_RDONLY); + _buf = NULL; + _bufSize = _bufPos = 0; + _ioFailed = false; + + if (fd >= 0) { + int srcSize = _mc->size(fd); + if (srcSize > 8) { + int res; + uint8 *tmpBuf = (uint8*)memalign(64, srcSize); + res = _mc->read(fd, tmpBuf, srcSize); + if ((res == srcSize) && (*(uint32*)tmpBuf == UCL_MAGIC)) { + uint32 resLen = _bufSize = *(uint32*)(tmpBuf + 4); + _buf = (uint8*)malloc(_bufSize + 2048); + res = ucl_nrv2e_decompress_8(tmpBuf + 8, srcSize - 8, _buf, &resLen, NULL); + if ((res < 0) || (resLen != _bufSize)) { + printf("Unable to decompress file %s (%d -> %d) error code %d\n", filename, srcSize, _bufSize, res); + free(_buf); + _buf = NULL; + _bufSize = 0; + } + } + free(tmpBuf); + } + _mc->close(fd); + } + if (!_buf) { + printf("Invalid savegame %s\n", filename); + _ioFailed = true; + } +} + +UclInSaveFile::~UclInSaveFile(void) { + if (_buf) + free(_buf); + _screen->wantAnim(false); +} + +bool UclInSaveFile::ioFailed(void) const { + return _ioFailed; +} + +void UclInSaveFile::clearIOFailed(void) { + _ioFailed = false; +} + +bool UclInSaveFile::eos(void) const { + return _bufPos == _bufSize; +} + +uint32 UclInSaveFile::pos(void) const { + return _bufPos; +} + +uint32 UclInSaveFile::size(void) const { + return _bufSize; +} + +void UclInSaveFile::seek(int pos, int whence) { + int destPos; + switch (whence) { + case SEEK_SET: + destPos = pos; + break; + case SEEK_CUR: + destPos = _bufPos + pos; + break; + case SEEK_END: + destPos = _bufSize + pos; + break; + default: + return; + } + if ((destPos >= 0) && (destPos <= (int)_bufSize)) + _bufPos = (uint32)destPos; +} + +uint32 UclInSaveFile::read(void *ptr, uint32 size) { + if (_buf) { + uint32 bytesRemain = _bufSize - _bufPos; + if (size > bytesRemain) { + size = bytesRemain; + _ioFailed = true; + } + memcpy(ptr, _buf + _bufPos, size); + _bufPos += size; + return size; + } else { + _ioFailed = true; + return 0; + } +} + +void UclInSaveFile::skip(uint32 offset) { + if (_buf) { + if (_bufPos + offset <= _bufSize) + _bufPos += offset; + else + _bufPos = _bufSize; + } +} + +UclOutSaveFile::UclOutSaveFile(const char *filename, OSystem_PS2 *system, Gs2dScreen *screen, McAccess *mc) { + _screen = screen; + _system = system; + _mc = mc; + _bufPos = 0; + _fd = _mc->open(filename, O_WRONLY | O_CREAT); + if (_fd >= 0) { + _bufSize = 65536; + _buf = (uint8*)malloc(_bufSize); + _ioFailed = false; + strcpy(_fileName, filename); + } else { + _ioFailed = true; + _bufSize = 0; + _buf = NULL; + } + _wasFlushed = false; +} + +UclOutSaveFile::~UclOutSaveFile(void) { + if (_buf) { + if (_bufPos) { + printf("Engine didn't call SaveFile::flush()\n"); + flush(); + if (ioFailed()) { + // unable to save to memory card and it's too late to return an error code to the engine + _system->msgPrintf(5000, "!WARNING!\nCan't write to memory card.\nGame was NOT saved."); + printf("~UclOutSaveFile: Flush failed!\n"); + } + } + free(_buf); + } + if (_fd >= 0) + _mc->close(_fd); + _screen->wantAnim(false); +} + +bool UclOutSaveFile::ioFailed(void) const { + return _ioFailed; +} + +void UclOutSaveFile::clearIOFailed(void) { + _ioFailed = false; +} + +void UclOutSaveFile::flush(void) { + int res; + + if (_bufPos) { + if (_wasFlushed) { + // the engine flushed this file and afterwards wrote more data. + // this is unsupported because it results in savefiles that consist + // of two or more compressed segments. + printf("Error: 2nd call to UclOutSaveFile::flush!\n"); + res = -1; + } else { + uint32 compSize = _bufPos * 2; + uint8 *compBuf = (uint8*)memalign(64, compSize + 8); + *(uint32*)(compBuf + 0) = UCL_MAGIC; + *(uint32*)(compBuf + 4) = _bufPos; // uncompressed size + res = ucl_nrv2e_99_compress(_buf, _bufPos, compBuf + 8, &compSize, NULL, 10, NULL, NULL); + if (res >= 0) { + res = _mc->write(_fd, compBuf, compSize + 8); + if (res != (int)compSize + 8) { + printf("flush: write failed, %d != %d\n", res, compSize + 8); + res = -1; + } + } else + printf("Unable to compress %d bytes of savedata, errorcode %d\n", _bufPos, res); + free(compBuf); + _bufPos = 0; + } + + if (res < 0) { + _ioFailed = true; + printf("UclOutSaveFile::flush failed!\n"); + if (_fd >= 0) { + // the file is broken; delete it + _mc->close(_fd); + res = _mc->remove(_fileName); + if (res == 0) + printf("File %s: remove ok\n", _fileName); + else + printf("File %s: remove error %d\n", _fileName, res); + _fd = -1; + } + } + } +} + +uint32 UclOutSaveFile::write(const void *ptr, uint32 size) { + assert(_bufPos <= _bufSize); + uint32 bytesFree = _bufSize - _bufPos; + if (bytesFree < size) { + uint32 allocBytes = (size > 32 * 1024) ? size : 32 * 1024; + _bufSize += allocBytes; + _buf = (uint8*)realloc(_buf, _bufSize); + bytesFree = _bufSize - _bufPos; + } + assert(bytesFree >= size); + memcpy(_buf + _bufPos, ptr, size); + _bufPos += size; + return size; +} + + diff --git a/backends/platform/ps2/savefile.h b/backends/platform/ps2/savefile.h new file mode 100644 index 0000000000..aafb124ad0 --- /dev/null +++ b/backends/platform/ps2/savefile.h @@ -0,0 +1,80 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __PS2_SAVEFILE__ +#define __PS2_SAVEFILE__ + +#include +#include "common/savefile.h" + +class Gs2dScreen; +class OSystem_PS2; +class McAccess; + +class Ps2SaveFileManager : public Common::SaveFileManager { +public: + Ps2SaveFileManager(OSystem_PS2 *system, Gs2dScreen *screen); + virtual ~Ps2SaveFileManager(); + + virtual Common::InSaveFile *openForLoading(const char *filename); + virtual Common::OutSaveFile *openForSaving(const char *filename); + virtual void listSavefiles(const char *prefix, bool *marks, int num); + + /** Get the path to the save game directory. */ + virtual const char *getSavePath() const; + + void writeSaveNonblocking(char *name, void *buf, uint32 size); + void saveThread(void); + void quit(void); +private: + bool setupIcon(const char *dest, const char *ico, const char *descr1, const char *descr2); + + bool mcReadyForDir(const char *dir); + + void checkMainDirectory(void); + void splitPath(const char *fileName, char *dir, char *name); + uint16 *decompressIconData(uint16 *size); + + Gs2dScreen *_screen; + OSystem_PS2 *_system; + McAccess *_mc; + + int _autoSaveTid; + int _autoSaveSignal; + void *_autoSaveStack; + volatile bool _systemQuit; + uint8 *_autoSaveBuf; + uint32 _autoSaveSize; + char _autoSaveName[256]; + + mcTable *_mcDirList; + int _mcEntries; + char _mcDirName[256]; + bool _mcNeedsUpdate, _mcPresent; + uint32 _mcCheckTime; + + static const uint8 _rleIcoData[14018]; + static const iconIVECTOR _bgcolor[4]; + static const iconFVECTOR _lightdir[3], _lightcol[3], _ambient; +}; + +#endif // __PS2_SAVEFILE__ diff --git a/backends/platform/ps2/sdlkeys.h b/backends/platform/ps2/sdlkeys.h new file mode 100644 index 0000000000..b2f783cedd --- /dev/null +++ b/backends/platform/ps2/sdlkeys.h @@ -0,0 +1,264 @@ +/* copied from SDK_keysym.h */ + +#ifndef __SDLKEYS_H__ +#define __SDLKEYS_H__ + +enum SdlKeyCodes { + SDLK_UNKNOWN = 0, + SDLK_FIRST = 0, + SDLK_BACKSPACE = 8, + SDLK_TAB = 9, + SDLK_CLEAR = 12, + SDLK_RETURN = 13, + SDLK_PAUSE = 19, + SDLK_ESCAPE = 27, + SDLK_SPACE = 32, + SDLK_EXCLAIM = 33, + SDLK_QUOTEDBL = 34, + SDLK_HASH = 35, + SDLK_DOLLAR = 36, + SDLK_AMPERSAND = 38, + SDLK_QUOTE = 39, + SDLK_LEFTPAREN = 40, + SDLK_RIGHTPAREN = 41, + SDLK_ASTERISK = 42, + SDLK_PLUS = 43, + SDLK_COMMA = 44, + SDLK_MINUS = 45, + SDLK_PERIOD = 46, + SDLK_SLASH = 47, + SDLK_0 = 48, + SDLK_1 = 49, + SDLK_2 = 50, + SDLK_3 = 51, + SDLK_4 = 52, + SDLK_5 = 53, + SDLK_6 = 54, + SDLK_7 = 55, + SDLK_8 = 56, + SDLK_9 = 57, + SDLK_COLON = 58, + SDLK_SEMICOLON = 59, + SDLK_LESS = 60, + SDLK_EQUALS = 61, + SDLK_GREATER = 62, + SDLK_QUESTION = 63, + SDLK_AT = 64, + /* + Skip uppercase letters + */ + SDLK_LEFTBRACKET = 91, + SDLK_BACKSLASH = 92, + SDLK_RIGHTBRACKET = 93, + SDLK_CARET = 94, + SDLK_UNDERSCORE = 95, + SDLK_BACKQUOTE = 96, + SDLK_a = 97, + SDLK_b = 98, + SDLK_c = 99, + SDLK_d = 100, + SDLK_e = 101, + SDLK_f = 102, + SDLK_g = 103, + SDLK_h = 104, + SDLK_i = 105, + SDLK_j = 106, + SDLK_k = 107, + SDLK_l = 108, + SDLK_m = 109, + SDLK_n = 110, + SDLK_o = 111, + SDLK_p = 112, + SDLK_q = 113, + SDLK_r = 114, + SDLK_s = 115, + SDLK_t = 116, + SDLK_u = 117, + SDLK_v = 118, + SDLK_w = 119, + SDLK_x = 120, + SDLK_y = 121, + SDLK_z = 122, + SDLK_DELETE = 127, + /* End of ASCII mapped keysyms */ + + /* International keyboard syms */ + SDLK_WORLD_0 = 160, /* 0xA0 */ + SDLK_WORLD_1 = 161, + SDLK_WORLD_2 = 162, + SDLK_WORLD_3 = 163, + SDLK_WORLD_4 = 164, + SDLK_WORLD_5 = 165, + SDLK_WORLD_6 = 166, + SDLK_WORLD_7 = 167, + SDLK_WORLD_8 = 168, + SDLK_WORLD_9 = 169, + SDLK_WORLD_10 = 170, + SDLK_WORLD_11 = 171, + SDLK_WORLD_12 = 172, + SDLK_WORLD_13 = 173, + SDLK_WORLD_14 = 174, + SDLK_WORLD_15 = 175, + SDLK_WORLD_16 = 176, + SDLK_WORLD_17 = 177, + SDLK_WORLD_18 = 178, + SDLK_WORLD_19 = 179, + SDLK_WORLD_20 = 180, + SDLK_WORLD_21 = 181, + SDLK_WORLD_22 = 182, + SDLK_WORLD_23 = 183, + SDLK_WORLD_24 = 184, + SDLK_WORLD_25 = 185, + SDLK_WORLD_26 = 186, + SDLK_WORLD_27 = 187, + SDLK_WORLD_28 = 188, + SDLK_WORLD_29 = 189, + SDLK_WORLD_30 = 190, + SDLK_WORLD_31 = 191, + SDLK_WORLD_32 = 192, + SDLK_WORLD_33 = 193, + SDLK_WORLD_34 = 194, + SDLK_WORLD_35 = 195, + SDLK_WORLD_36 = 196, + SDLK_WORLD_37 = 197, + SDLK_WORLD_38 = 198, + SDLK_WORLD_39 = 199, + SDLK_WORLD_40 = 200, + SDLK_WORLD_41 = 201, + SDLK_WORLD_42 = 202, + SDLK_WORLD_43 = 203, + SDLK_WORLD_44 = 204, + SDLK_WORLD_45 = 205, + SDLK_WORLD_46 = 206, + SDLK_WORLD_47 = 207, + SDLK_WORLD_48 = 208, + SDLK_WORLD_49 = 209, + SDLK_WORLD_50 = 210, + SDLK_WORLD_51 = 211, + SDLK_WORLD_52 = 212, + SDLK_WORLD_53 = 213, + SDLK_WORLD_54 = 214, + SDLK_WORLD_55 = 215, + SDLK_WORLD_56 = 216, + SDLK_WORLD_57 = 217, + SDLK_WORLD_58 = 218, + SDLK_WORLD_59 = 219, + SDLK_WORLD_60 = 220, + SDLK_WORLD_61 = 221, + SDLK_WORLD_62 = 222, + SDLK_WORLD_63 = 223, + SDLK_WORLD_64 = 224, + SDLK_WORLD_65 = 225, + SDLK_WORLD_66 = 226, + SDLK_WORLD_67 = 227, + SDLK_WORLD_68 = 228, + SDLK_WORLD_69 = 229, + SDLK_WORLD_70 = 230, + SDLK_WORLD_71 = 231, + SDLK_WORLD_72 = 232, + SDLK_WORLD_73 = 233, + SDLK_WORLD_74 = 234, + SDLK_WORLD_75 = 235, + SDLK_WORLD_76 = 236, + SDLK_WORLD_77 = 237, + SDLK_WORLD_78 = 238, + SDLK_WORLD_79 = 239, + SDLK_WORLD_80 = 240, + SDLK_WORLD_81 = 241, + SDLK_WORLD_82 = 242, + SDLK_WORLD_83 = 243, + SDLK_WORLD_84 = 244, + SDLK_WORLD_85 = 245, + SDLK_WORLD_86 = 246, + SDLK_WORLD_87 = 247, + SDLK_WORLD_88 = 248, + SDLK_WORLD_89 = 249, + SDLK_WORLD_90 = 250, + SDLK_WORLD_91 = 251, + SDLK_WORLD_92 = 252, + SDLK_WORLD_93 = 253, + SDLK_WORLD_94 = 254, + SDLK_WORLD_95 = 255, /* 0xFF */ + + /* Numeric keypad */ + SDLK_KP0 = 256, + SDLK_KP1 = 257, + SDLK_KP2 = 258, + SDLK_KP3 = 259, + SDLK_KP4 = 260, + SDLK_KP5 = 261, + SDLK_KP6 = 262, + SDLK_KP7 = 263, + SDLK_KP8 = 264, + SDLK_KP9 = 265, + SDLK_KP_PERIOD = 266, + SDLK_KP_DIVIDE = 267, + SDLK_KP_MULTIPLY = 268, + SDLK_KP_MINUS = 269, + SDLK_KP_PLUS = 270, + SDLK_KP_ENTER = 271, + SDLK_KP_EQUALS = 272, + + /* Arrows + Home/End pad */ + SDLK_UP = 273, + SDLK_DOWN = 274, + SDLK_RIGHT = 275, + SDLK_LEFT = 276, + SDLK_INSERT = 277, + SDLK_HOME = 278, + SDLK_END = 279, + SDLK_PAGEUP = 280, + SDLK_PAGEDOWN = 281, + + /* Function keys */ + SDLK_F1 = 282, + SDLK_F2 = 283, + SDLK_F3 = 284, + SDLK_F4 = 285, + SDLK_F5 = 286, + SDLK_F6 = 287, + SDLK_F7 = 288, + SDLK_F8 = 289, + SDLK_F9 = 290, + SDLK_F10 = 291, + SDLK_F11 = 292, + SDLK_F12 = 293, + SDLK_F13 = 294, + SDLK_F14 = 295, + SDLK_F15 = 296, + + /* Key state modifier keys */ + SDLK_NUMLOCK = 300, + SDLK_CAPSLOCK = 301, + SDLK_SCROLLOCK = 302, + SDLK_RSHIFT = 303, + SDLK_LSHIFT = 304, + SDLK_RCTRL = 305, + SDLK_LCTRL = 306, + SDLK_RALT = 307, + SDLK_LALT = 308, + SDLK_RMETA = 309, + SDLK_LMETA = 310, + SDLK_LSUPER = 311, /* Left "Windows" key */ + SDLK_RSUPER = 312, /* Right "Windows" key */ + SDLK_MODE = 313, /* "Alt Gr" key */ + SDLK_COMPOSE = 314, /* Multi-key compose key */ + + /* Miscellaneous function keys */ + SDLK_HELP = 315, + SDLK_PRINT = 316, + SDLK_SYSREQ = 317, + SDLK_BREAK = 318, + SDLK_MENU = 319, + SDLK_POWER = 320, /* Power Macintosh power key */ + SDLK_EURO = 321, /* Some european keyboards */ + SDLK_UNDO = 322, /* Atari keyboard has Undo */ + + /* Add any other keys here */ + + SDLK_LAST +}; + +#endif + + diff --git a/backends/platform/ps2/sysdefs.h b/backends/platform/ps2/sysdefs.h new file mode 100644 index 0000000000..086c75162c --- /dev/null +++ b/backends/platform/ps2/sysdefs.h @@ -0,0 +1,72 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef __SYSDEFS_H__ +#define __SYSDEFS_H__ + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long uint64; +typedef signed char int8; +typedef signed short int16; +typedef signed int int32; +typedef signed long int64; + +enum Interrupts { + INT_GS = 0, + INT_VBLANK_START = 2, + INT_VBLANK_END = 3, + INT_TIMER0 = 9 +}; + +// dma 2 registers +#define D2_CHCR (*(volatile uint32*)0x1000A000) +#define D2_QWC (*(volatile uint32*)0x1000A020) +#define D2_TADR (*(volatile uint32*)0x1000A030) +#define D2_MADR (*(volatile uint32*)0x1000A010) +#define D2_ASR1 (*(volatile uint32*)0x1000A050) +#define D2_ASR0 (*(volatile uint32*)0x1000A040) + +#define D_CTRL (*(volatile uint32*)0x1000E000) +#define D_STAT (*(volatile uint32*)0x1000E010) +#define D_PCR (*(volatile uint32*)0x1000E020) +#define D_SQWC (*(volatile uint32*)0x1000E030) +#define D_RBSR (*(volatile uint32*)0x1000E040) +#define D_RBOR (*(volatile uint32*)0x1000E050) +#define D_STADR (*(volatile uint32*)0x1000E060) + +#define CIM2 (1 << 18) +#define CIS2 (1 << 2) + + +// timer 0 registers +#define T0_COUNT (*(volatile uint32*)0x10000000) +#define T0_MODE (*(volatile uint32*)0x10000010) +#define T0_COMP (*(volatile uint32*)0x10000020) +#define T0_HOLD (*(volatile uint32*)0x10000030) + +#define TIMER_MODE(clks, gate, gates, gatem, zeroret, cue, cmpe, ovfe, equf, ovff) \ + ((clks) | ((gate) << 2) | ((gates) << 3) | ((gatem) << 4) | ((zeroret) << 6) | \ + ((cue) << 7) | ((cmpe) << 8) | ((ovfe) << 9) | ((equf) << 10) | ((ovff) << 11)) + +#endif // __SYSDEFS_H__ diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp new file mode 100644 index 0000000000..df16990032 --- /dev/null +++ b/backends/platform/ps2/systemps2.cpp @@ -0,0 +1,798 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "common/scummsys.h" +#include "../intern.h" +#include "base/engine.h" +#include "backends/ps2/systemps2.h" +#include "backends/ps2/Gs2dScreen.h" +#include "backends/ps2/ps2input.h" +#include "backends/ps2/irxboot.h" +#include +#include +#include "backends/ps2/savefile.h" +#include "common/file.h" +#include "backends/ps2/sysdefs.h" +#include +#include +#include "backends/ps2/cd.h" +#include +#include +#include "backends/ps2/asyncfio.h" +#include "eecodyvdfs.h" +#include "graphics/surface.h" +#include "graphics/font.h" + +// asm("mfc0 %0, $9\n" : "=r"(tickStart)); + +extern void *_gp; + +#define TIMER_STACK_SIZE (1024 * 32) +#define SOUND_STACK_SIZE (1024 * 32) +#define SMP_PER_BLOCK 800 +#define BUS_CLOCK 147456000 // bus clock, a little less than 150 mhz +#define CLK_DIVIS 5760 // the timer IRQ handler gets called (BUS_CLOCK / 256) / CLK_DIVIS times per second (100 times) + +static int g_TimerThreadSema = -1, g_SoundThreadSema = -1; +static int g_MainWaitSema = -1, g_TimerWaitSema = -1; +static volatile int32 g_MainWakeUp = 0, g_TimerWakeUp = 0; +volatile uint32 msecCount = 0; + +OSystem_PS2 *g_systemPs2; + +int gBitFormat = 555; + +#define FOREVER 2147483647 + +namespace Graphics { + extern const NewFont g_sysfont; +}; + +extern AsyncFio fio; + +void sioprintf(const char *zFormat, ...) { + va_list ap; + char resStr[2048]; + + va_start(ap,zFormat); + vsnprintf(resStr, 2048, zFormat, ap); + va_end(ap); + + sio_puts(resStr); +} + +extern "C" int scummvm_main(int argc, char *argv[]); + +extern "C" int main(int argc, char *argv[]) { + SifInitRpc(0); + + ee_thread_t thisThread; + int tid = GetThreadId(); + ReferThreadStatus(tid, &thisThread); + + sioprintf("Thread Start Priority = %d\n", thisThread.current_priority); + if ((thisThread.current_priority < 5) || (thisThread.current_priority > 80)) { + /* Depending on the way ScummVM is run, we may get here with different + thread priorities. + The PS2 BIOS executes it with priority = 0, ps2link uses priority 64. + Don't know about NapLink, etc. + The priority doesn't matter too much, but we need to be at least at prio 3, + so we can have the timer thread run at prio 2 and the sound thread at prio 1 */ + sioprintf("Changing thread priority"); + int res = ChangeThreadPriority(tid, 20); + sioprintf("Result = %d", res); + } + + sioprintf("Creating system"); + g_system = g_systemPs2 = new OSystem_PS2(argv[0]); + + sioprintf("init done. starting ScummVM."); + return scummvm_main(argc, argv); +} + +s32 timerInterruptHandler(s32 cause) { + T0_MODE = 0xDC2; // same value as in initialization. + msecCount += 10; + + iSignalSema(g_SoundThreadSema); + iSignalSema(g_TimerThreadSema); + + if (g_MainWakeUp) { + g_MainWakeUp -= 10; + if (g_MainWakeUp <= 0) { + iSignalSema(g_MainWaitSema); + g_MainWakeUp = 0; + } + } + if (g_TimerWakeUp) { + g_TimerWakeUp -= 10; + if (g_TimerWakeUp <= 0) { + iSignalSema(g_TimerWaitSema); + g_TimerWakeUp = 0; + } + } + return 0; +} + +void systemTimerThread(OSystem_PS2 *system) { + system->timerThread(); +} + +void systemSoundThread(OSystem_PS2 *system) { + system->soundThread(); +} + +void gluePowerOffCallback(void *system) { + ((OSystem_PS2*)system)->powerOffCallback(); +} + +void mass_connect_cb(void *pkt, void *system) { + ((OSystem_PS2*)system)->setUsbMassConnected(true); +} + +void mass_disconnect_cb(void *pkt, void *system) { + ((OSystem_PS2*)system)->setUsbMassConnected(false); +} + +void OSystem_PS2::startIrxModules(int numModules, IrxReference *modules) { + + _usbMassLoaded = _useMouse = _useKbd = _useHdd = false; + + int res = 0, rv = 0; + for (int i = 0; i < numModules; i++) { + if (modules[i].loc == IRX_FILE) { + res = SifLoadModule(modules[i].path, modules[i].argSize, modules[i].args); + sioprintf("Module \"%s\": %d", modules[i].path, res); + if (res < 0) { + msgPrintf(FOREVER, "\"%s\"\nnot found: %d", modules[i].path, res); + delayMillis(5000); + quit(); + } + } else if (modules[i].loc == IRX_BUFFER) { + if (modules[i].errorCode == 0) { + res = SifExecModuleBuffer(modules[i].buffer, modules[i].size, modules[i].argSize, modules[i].args, &rv); + sioprintf("Module \"%s\": EE=%d, IOP=%d", modules[i].path, res, rv); + if ((res >= 0) && (rv >= 0)) { + switch (modules[i].fileRef->purpose) { + case MASS_DRIVER: + _usbMassLoaded = true; + break; + case MOUSE_DRIVER: + _useMouse = true; + break; + case KBD_DRIVER: + _useKbd = true; + break; + case HDD_DRIVER: + _useHdd = true; + break; + default: + break; + } + } + } else + sioprintf("Module \"%s\" wasn't found: %d", modules[i].path, modules[i].errorCode); + + if ((modules[i].errorCode < 0) || (res < 0) || (rv < 0)) { + if (!(modules[i].fileRef->flags & OPTIONAL)) { + if (modules[i].errorCode < 0) + msgPrintf(FOREVER, "\"%s\"\nnot found: %d", modules[i].path, modules[i].errorCode); + else + msgPrintf(FOREVER, "Couldn't start\n\"%s\"\nEE=%d IOP=%d", modules[i].path, res, rv); + delayMillis(5000); + quit(); + } + } + + if (modules[i].buffer); + free(modules[i].buffer); + } else { + sioprintf("module %d of %d damaged, loc %d, path %s", i, numModules, modules[i].loc, modules[i].path); + } + free(modules[i].path); + } + free(modules); + sioprintf("done"); + sioprintf("UsbMass: %sloaded", _usbMassLoaded ? "" : "not "); + sioprintf("Mouse: %sloaded", _useMouse ? "" : "not "); + sioprintf("Kbd: %sloaded", _useKbd ? "" : "not "); + sioprintf("Hdd: %sloaded", _useHdd ? "" : "not "); +} + +OSystem_PS2::OSystem_PS2(const char *elfPath) { + _soundStack = _timerStack = NULL; + _scummTimerProc = NULL; + _scummSoundProc = NULL; + _scummSoundParam = NULL; + _printY = 0; + _msgClearTime = 0; + _systemQuit = false; + _usbMassConnected = false; + + _screen = new Gs2dScreen(320, 200, TV_DONT_CARE); + + sioprintf("Initializing system..."); + initTimer(); + + _screen->wantAnim(true); + + char irxPath[256]; + _bootDevice = detectBootPath(elfPath, irxPath); + + IrxReference *modules; + int numModules = loadIrxModules(_bootDevice, irxPath, &modules); + + if (_bootDevice != HOST) { + sio_puts("Resetting IOP."); + cdvdInit(CDVD_EXIT); + cdvdExit(); + SifExitIopHeap(); + SifLoadFileExit(); + SifExitRpc(); + SifIopReset("rom0:UDNL rom0:EELOADCNF", 0); + while (!SifIopSync()) + ; + sio_puts("IOP synced."); + SifInitRpc(0); + SifLoadFileInit(); + cdvdInit(CDVD_INIT_WAIT); + } + startIrxModules(numModules, modules); + + int res; + if ((res = fileXioInit()) < 0) { + msgPrintf(FOREVER, "FXIO Init failed: %d", res); + quit(); + } + + if ((res = initCdvdFs()) < 0) { + msgPrintf(FOREVER, "CoDyVDfs bind failed: %d", res); + quit(); + } + + if ((res = SjPCM_Init(0)) < 0) { + msgPrintf(FOREVER, "SjPCM Bind failed: %d\n", res); + quit(); + } + + if (_useHdd) { + if ((hddCheckPresent() < 0) || (hddCheckFormatted() < 0)) + _useHdd = false; + + hddPreparePoweroff(); + hddSetUserPoweroffCallback(gluePowerOffCallback, this); + } + + fileXioSetBlockMode(FXIO_NOWAIT); + + _mouseVisible = false; + + sioprintf("reading RTC"); + readRtcTime(); + + if (_useHdd) { + if (fio.mount("pfs0:", "hdd0:+ScummVM", 0) >= 0) + printf("Successfully mounted!\n"); + else + _useHdd = false; + } + + sioprintf("Starting SavefileManager"); + _saveManager = new Ps2SaveFileManager(this, _screen); + + sioprintf("Initializing ps2Input"); + _input = new Ps2Input(this, _useMouse, _useKbd); + + ee_sema_t newSema; + newSema.init_count = 1; + newSema.max_count = 1; + _mutexSema = CreateSema(&newSema); + for (int i = 0; i < MAX_MUTEXES; i++) { + _mutex[i].sema = -1; + _mutex[i].count = _mutex[i].owner = 0; + } + + _screen->wantAnim(false); + _screen->clearScreen(); +} + +OSystem_PS2::~OSystem_PS2(void) { +} + +void OSystem_PS2::initTimer(void) { + // first setup the two threads that get activated by the timer: + // the timerthread and the soundthread + ee_sema_t threadSema; + threadSema.init_count = 0; + threadSema.max_count = 255; + g_TimerThreadSema = CreateSema(&threadSema); + g_SoundThreadSema = CreateSema(&threadSema); + assert((g_TimerThreadSema >= 0) && (g_SoundThreadSema >= 0)); + + ee_thread_t timerThread, soundThread, thisThread; + ReferThreadStatus(GetThreadId(), &thisThread); + + _timerStack = (uint8*)malloc(TIMER_STACK_SIZE); + _soundStack = (uint8*)malloc(SOUND_STACK_SIZE); + + // give timer thread a higher priority than main thread + timerThread.initial_priority = thisThread.current_priority - 1; + timerThread.stack = _timerStack; + timerThread.stack_size = TIMER_STACK_SIZE; + timerThread.func = (void *)systemTimerThread; + timerThread.gp_reg = &_gp; + + // soundthread's priority is higher than main- and timerthread + soundThread.initial_priority = thisThread.current_priority - 2; + soundThread.stack = _soundStack; + soundThread.stack_size = SOUND_STACK_SIZE; + soundThread.func = (void *)systemSoundThread; + soundThread.gp_reg = &_gp; + + _timerTid = CreateThread(&timerThread); + _soundTid = CreateThread(&soundThread); + + assert((_timerTid >= 0) && (_soundTid >= 0)); + + StartThread(_timerTid, this); + StartThread(_soundTid, this); + + // these semaphores are used for OSystem::delayMillis() + threadSema.init_count = 0; + threadSema.max_count = 1; + g_MainWaitSema = CreateSema(&threadSema); + g_TimerWaitSema = CreateSema(&threadSema); + assert((g_MainWaitSema >= 0) && (g_TimerWaitSema >= 0)); + + // threads done, start the interrupt handler + _intrId = AddIntcHandler( INT_TIMER0, timerInterruptHandler, 0); // 0=first handler + assert(_intrId >= 0); + EnableIntc(INT_TIMER0); + T0_HOLD = 0; + T0_COUNT = 0; + T0_COMP = CLK_DIVIS; // (BUS_CLOCK / 256) / CLK_DIVIS = 100 + T0_MODE = TIMER_MODE( 2, 0, 0, 0, 1, 1, 1, 0, 1, 1); + + DI(); + SifAddCmdHandler(0x12, mass_connect_cb, this); + SifAddCmdHandler(0x13, mass_disconnect_cb, this); + EI(); +} + +void OSystem_PS2::timerThread(void) { + while (!_systemQuit) { + WaitSema(g_TimerThreadSema); + if (_scummTimerProc) + _scummTimerProc(0); + } + ExitThread(); +} + +void OSystem_PS2::soundThread(void) { + ee_sema_t soundSema; + soundSema.init_count = 1; + soundSema.max_count = 1; + _soundSema = CreateSema(&soundSema); + assert(_soundSema >= 0); + int16 *soundBufL = (int16*)memalign(64, SMP_PER_BLOCK * sizeof(int16) * 2); + int16 *soundBufR = soundBufL + SMP_PER_BLOCK; + + int bufferedSamples = 0; + int cycles = 0; + + while (!_systemQuit) { + WaitSema(g_SoundThreadSema); + + if (!(cycles & 31)) + bufferedSamples = SjPCM_Buffered(); + else + bufferedSamples -= 480; + cycles++; + + WaitSema(_soundSema); + if (_scummSoundProc) { + if (bufferedSamples <= 8 * SMP_PER_BLOCK) { + // we have to produce more samples, call sound mixer + // the scratchpad at 0x70000000 is used as temporary soundbuffer + _scummSoundProc(_scummSoundParam, (uint8*)0x70000000, SMP_PER_BLOCK * 2 * sizeof(int16)); + + // demux data into 2 buffers, L and R + __asm__ ( + "move $t2, %1\n\t" // dest buffer right + "move $t3, %0\n\t" // dest buffer left + "lui $t8, 0x7000\n\t" // muxed buffer, fixed at 0x70000000 + "addiu $t9, $0, 100\n\t" // number of loops + "mtsab $0, 2\n\t" // set qword shift = 2 byte + + "loop:\n\t" + " lq $t4, 0($t8)\n\t" // load 8 muxed samples + " lq $t5, 16($t8)\n\t" // load 8 more muxed samples + + " qfsrv $t6, $0, $t4\n\t" // shift right for second + " qfsrv $t7, $0, $t5\n\t" // packing step (right channel) + + " ppach $t4, $t5, $t4\n\t" // combine left channel data + " ppach $t6, $t7, $t6\n\t" // right channel data + + " sq $t4, 0($t3)\n\t" // write back + " sq $t6, 0($t2)\n\t" // + + " addiu $t9, -1\n\t" // decrement loop counter + " addiu $t2, 16\n\t" // increment pointers + " addiu $t3, 16\n\t" + " addiu $t8, 32\n\t" + " bnez $t9, loop\n\t" // loop + : // outputs + : "r"(soundBufL), "r"(soundBufR) // inputs + // : "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "$t9" // destroyed + : "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25" // destroyed + ); + // and feed it into the SPU + // non-blocking call, the function will return before the buffer's content + // was transferred. + SjPCM_Enqueue((short int*)soundBufL, (short int*)soundBufR, SMP_PER_BLOCK, 0); + bufferedSamples += SMP_PER_BLOCK; + } + } + SignalSema(_soundSema); + } + free(soundBufL); + DeleteSema(_soundSema); + ExitThread(); +} + +bool OSystem_PS2::hddPresent(void) { + return _useHdd; +} + +void OSystem_PS2::setUsbMassConnected(bool stat) { + _usbMassConnected = stat; +} + +bool OSystem_PS2::usbMassPresent(void) { + return _usbMassConnected; +} + +void OSystem_PS2::initSize(uint width, uint height) { + printf("initializing new size: (%d/%d)...", width, height); + _screen->newScreenSize(width, height); + _screen->setMouseXy(width / 2, height / 2); + _input->newRange(0, 0, width - 1, height - 1); + _input->warpTo(width / 2, height / 2); + + _oldMouseX = width / 2; + _oldMouseY = height / 2; + printf("done\n"); +} + +void OSystem_PS2::setPalette(const byte *colors, uint start, uint num) { + _screen->setPalette((const uint32*)colors, (uint8)start, (uint16)num); +} + +void OSystem_PS2::grabPalette(byte *colors, uint start, uint num) { + _screen->grabPalette((uint32*)colors, (uint8)start, (uint16)num); +} + +void OSystem_PS2::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { + _screen->copyScreenRect((const uint8*)buf, pitch, x, y, w, h); +} + +bool OSystem_PS2::grabRawScreen(Graphics::Surface *surf) { + _screen->grabScreen(surf); + return true; +} + +void OSystem_PS2::updateScreen(void) { + if (_msgClearTime && (_msgClearTime < getMillis())) { + _screen->clearPrintfOverlay(); + _msgClearTime = 0; + } + _screen->updateScreen(); +} + +uint32 OSystem_PS2::getMillis(void) { + return msecCount; +} + +void OSystem_PS2::delayMillis(uint msecs) { + if (msecs == 0) + return; + + int tid = GetThreadId(); + if (tid == _soundTid) { + sioprintf("ERROR: delayMillis() from sound thread!"); + return; + } + + if (tid == _timerTid) { + g_TimerWakeUp = (int32)msecs; + WaitSema(g_TimerWaitSema); + } else { + g_MainWakeUp = (int32)msecs; + WaitSema(g_MainWaitSema); + } +} + +void OSystem_PS2::setTimerCallback(OSystem::TimerProc callback, int interval) { + if (callback && (interval != 10)) + sioprintf("unhandled timer interval: %d\n", interval); + _scummTimerProc = callback; +} + +int OSystem_PS2::getOutputSampleRate(void) const { + return 48000; +} + +bool OSystem_PS2::setSoundCallback(SoundProc proc, void *param) { + assert(proc != NULL); + + WaitSema(_soundSema); + _scummSoundProc = proc; + _scummSoundParam = param; + SignalSema(_soundSema); + return true; +} + +void OSystem_PS2::clearSoundCallback(void) { + WaitSema(_soundSema); + _scummSoundProc = NULL; + _scummSoundParam = NULL; + SignalSema(_soundSema); +} + +Common::SaveFileManager *OSystem_PS2::getSavefileManager(void) { + return _saveManager; +} + +void OSystem_PS2::setShakePos(int shakeOffset) { + _screen->setShakePos(shakeOffset); +} + +bool OSystem_PS2::showMouse(bool visible) { + bool retVal = _mouseVisible; + _screen->showMouse(visible); + _mouseVisible = visible; + return retVal; +} + +void OSystem_PS2::warpMouse(int x, int y) { + _input->warpTo((uint16)x, (uint16)y); + _screen->setMouseXy(x, y); +} + +void OSystem_PS2::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale) { + _screen->setMouseOverlay(buf, w, h, hotspot_x, hotspot_y, keycolor); +} + +bool OSystem_PS2::openCD(int drive) { + return false; +} + +bool OSystem_PS2::pollCD(void) { + return false; +} + +void OSystem_PS2::playCD(int track, int num_loops, int start_frame, int duration) { +} + +void OSystem_PS2::stopCD(void) { +} + +void OSystem_PS2::updateCD(void) { +} + +void OSystem_PS2::showOverlay(void) { + _screen->showOverlay(); +} + +void OSystem_PS2::hideOverlay(void) { + _screen->hideOverlay(); +} + +void OSystem_PS2::clearOverlay(void) { + _screen->clearOverlay(); +} + +void OSystem_PS2::grabOverlay(OverlayColor *buf, int pitch) { + _screen->grabOverlay((uint16*)buf, (uint16)pitch); +} + +void OSystem_PS2::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { + _screen->copyOverlayRect((uint16*)buf, (uint16)pitch, (uint16)x, (uint16)y, (uint16)w, (uint16)h); +} + +const OSystem::GraphicsMode OSystem_PS2::_graphicsMode = { NULL, NULL, 0 }; + +const OSystem::GraphicsMode *OSystem_PS2::getSupportedGraphicsModes(void) const { + return &_graphicsMode; +} + +bool OSystem_PS2::setGraphicsMode(int mode) { + return (mode == 0); +} + +int OSystem_PS2::getGraphicsMode(void) const { + return 0; +} + +int OSystem_PS2::getDefaultGraphicsMode(void) const { + return 0; +} + +bool OSystem_PS2::pollEvent(Event &event) { + bool res = _input->pollEvent(&event); + if (res && (event.type == EVENT_MOUSEMOVE)) + _screen->setMouseXy(event.mouse.x, event.mouse.y); + return res; +} + +OverlayColor OSystem_PS2::RGBToColor(uint8 r, uint8 g, uint8 b) { + return (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10); +} + +void OSystem_PS2::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { + r = (color & 0x1F) << 3; + g = ((color >> 5) & 0x1F) << 3; + b = ((color >> 10) & 0x1F) << 3; +} + +int16 OSystem_PS2::getHeight(void) { + return _screen->getHeight(); +} + +int16 OSystem_PS2::getWidth(void) { + return _screen->getWidth(); +} + +void OSystem_PS2::msgPrintf(int millis, char *format, ...) { + va_list ap; + char resStr[1024]; + memset(resStr, 0, 1024); + + va_start(ap, format); + vsnprintf(resStr, 1023, format, ap); + va_end(ap); + + uint16 posY = 2; + int maxWidth = 0; + + Graphics::Surface surf; + surf.create(300, 200, 1); + + char *lnSta = resStr; + while (*lnSta && (posY < 180)) { + char *lnEnd = lnSta; + while ((*lnEnd) && (*lnEnd != '\n')) + lnEnd++; + *lnEnd = '\0'; + + Common::String str(lnSta); + int width = Graphics::g_sysfont.getStringWidth(str); + if (width > maxWidth) + maxWidth = width; + int posX = (300 - width) / 2; + Graphics::g_sysfont.drawString(&surf, str, posX, posY, 300 - posX, 1); + posY += 14; + + lnSta = lnEnd + 1; + } + + uint8 *scrBuf = (uint8*)memalign(64, 320 * 200); + memset(scrBuf, 4, 320 * 200); + + uint8 *dstPos = scrBuf + ((200 - posY) >> 1) * 320 + (320 - maxWidth) / 2; + for (int y = 0; y < posY; y++) { + uint8 *srcPos = (uint8*)surf.getBasePtr((300 - maxWidth) / 2, y); + for (int x = 0; x < maxWidth; x++) + dstPos[x] = srcPos[x] + 5; + dstPos += 320; + } + surf.free(); + _screen->copyPrintfOverlay(scrBuf); + free(scrBuf); + _msgClearTime = millis + getMillis(); +} + +void OSystem_PS2::powerOffCallback(void) { + sioprintf("powerOffCallback"); + _saveManager->quit(); + if (_useHdd) { + sioprintf("umount"); + fio.umount("pfs0:"); + } + sioprintf("fxio"); + // enable blocking FXIO so libhdd will correctly close drive, etc. + fileXioSetBlockMode(FXIO_WAIT); + sioprintf("done"); +} + +void OSystem_PS2::quit(void) { + if (_bootDevice == HOST) { + printf("OSystem_PS2::quit\n"); + SleepThread(); + } else { + sioprintf("OSystem_PS2::quit"); + if (_useHdd) { + driveStandby(); + fio.umount("pfs0:"); + } + clearSoundCallback(); + setTimerCallback(NULL, 0); + _screen->wantAnim(false); + _systemQuit = true; + ee_thread_t statSound, statTimer; + do { // wait until both threads called ExitThread() + ReferThreadStatus(_timerTid, &statTimer); + ReferThreadStatus(_soundTid, &statSound); + } while ((statSound.status != 0x10) || (statTimer.status != 0x10)); + DeleteThread(_timerTid); + DeleteThread(_soundTid); + free(_timerStack); + free(_soundStack); + DisableIntc(INT_TIMER0); + RemoveIntcHandler(INT_TIMER0, _intrId); + + _saveManager->quit(); + _screen->quit(); + + padEnd(); // stop pad library + cdvdInit(CDVD_EXIT); + sioprintf("resetting iop"); + SifIopReset(NULL, 0); + SifExitRpc(); + while (!SifIopSync()); + SifInitRpc(0); + cdvdExit(); + SifExitRpc(); + FlushCache(0); + SifLoadFileExit(); + sioprintf("Restarting ScummVM"); + LoadExecPS2("cdrom0:\\SCUMMVM.ELF", 0, NULL); // resets the console and executes the ELF + } +} + +void OSystem_PS2::makeConfigPath(char *dest) { + FILE *handle; + strcpy(dest, "cdfs:/ScummVM.ini"); + handle = ps2_fopen(dest, "r"); + if (_usbMassConnected && !handle) { + strcpy(dest, "mass:/ScummVM.ini"); + handle = ps2_fopen(dest, "r"); + } + if (handle) + ps2_fclose(handle); + else + strcpy(dest, "mc0:ScummVM/scummvm.ini"); +} + + diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h new file mode 100644 index 0000000000..4c51e78c66 --- /dev/null +++ b/backends/platform/ps2/systemps2.h @@ -0,0 +1,148 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef SYSTEMPS2_H +#define SYSTEMPS2_H + +#include "common/stdafx.h" +#include "common/system.h" + +class Gs2dScreen; +class Ps2Input; +class Ps2SaveFileManager; +struct IrxReference; + +extern void sioprintf(const char *zFormat, ...); + +#define MAX_MUTEXES 16 + +struct Ps2Mutex { + int sema; + int owner; + int count; +}; + +class OSystem_PS2 : public OSystem { +public: + OSystem_PS2(const char *elfPath); + virtual ~OSystem_PS2(void); + virtual void initSize(uint width, uint height); + + virtual int16 getHeight(void); + virtual int16 getWidth(void); + virtual void setPalette(const byte *colors, uint start, uint num); + virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); + virtual void setShakePos(int shakeOffset); + virtual void grabPalette(byte *colors, uint start, uint num); + virtual bool grabRawScreen(Graphics::Surface *surf); + virtual void updateScreen(); + + virtual void showOverlay(); + virtual void hideOverlay(); + virtual void clearOverlay(); + virtual void grabOverlay(OverlayColor *buf, int pitch); + virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); + + virtual bool showMouse(bool visible); + + virtual void warpMouse(int x, int y); + virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale = 1); + + virtual uint32 getMillis(); + virtual void delayMillis(uint msecs); + virtual void setTimerCallback(TimerProc callback, int interval); + virtual bool pollEvent(Event &event); + + virtual bool setSoundCallback(SoundProc proc, void *param); + virtual void clearSoundCallback(); + virtual int getOutputSampleRate(void) const; + + virtual bool openCD(int drive); + virtual bool pollCD(); + virtual void playCD(int track, int num_loops, int start_frame, int duration); + virtual void stopCD(); + virtual void updateCD(); + + virtual MutexRef createMutex(void); + virtual void lockMutex(MutexRef mutex); + virtual void unlockMutex(MutexRef mutex); + virtual void deleteMutex(MutexRef mutex); + + virtual const GraphicsMode *getSupportedGraphicsModes() const; + virtual int getDefaultGraphicsMode() const; + virtual bool setGraphicsMode(int mode); + virtual int getGraphicsMode() const; + + virtual void quit(); + + virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); + + virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); + + virtual Common::SaveFileManager *getSavefileManager(); + + void timerThread(void); + void soundThread(void); + void msgPrintf(int millis, char *format, ...); + void makeConfigPath(char *dest); + + void powerOffCallback(void); + bool hddPresent(void); + bool usbMassPresent(void); + void setUsbMassConnected(bool stat); + +private: + void startIrxModules(int numModules, IrxReference *modules); + + volatile OSystem::TimerProc _scummTimerProc; + volatile OSystem::SoundProc _scummSoundProc; + void *_scummSoundParam; + int _soundSema; + + void initTimer(void); + void readRtcTime(void); + + bool _mouseVisible; + bool _useMouse, _useKbd, _useHdd, _usbMassLoaded, _usbMassConnected; + + Ps2SaveFileManager *_saveManager; + + Gs2dScreen *_screen; + Ps2Input *_input; + uint16 _oldMouseX, _oldMouseY; + uint32 _msgClearTime; + uint16 _printY; + + int _mutexSema; + Ps2Mutex _mutex[MAX_MUTEXES]; + + uint8 *_timerStack, *_soundStack; + int _timerTid, _soundTid; + int _intrId; + volatile bool _systemQuit; + static const GraphicsMode _graphicsMode; + + int _bootDevice; +}; + +#endif // SYSTEMPS2_H + diff --git a/backends/platform/symbian/.placeholder b/backends/platform/symbian/.placeholder new file mode 100644 index 0000000000..dcf4d34a62 --- /dev/null +++ b/backends/platform/symbian/.placeholder @@ -0,0 +1 @@ +>> SumthinWicked *grins* << \ No newline at end of file diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl new file mode 100644 index 0000000000..48b100b2ee --- /dev/null +++ b/backends/platform/symbian/AdaptAllMMPs.pl @@ -0,0 +1,382 @@ + +use Cwd; + +$buildDir = getcwd(); +chdir("../../"); + +# list of project files to process +@mmp_files = ( + "mmp/scummvm_scumm.mmp", + "mmp/scummvm_queen.mmp", + "mmp/scummvm_simon.mmp", + "mmp/scummvm_sky.mmp", + "mmp/scummvm_gob.mmp", + "mmp/scummvm_saga.mmp", + "mmp/scummvm_kyra.mmp", + "mmp/scummvm_sword1.mmp", + "mmp/scummvm_sword2.mmp", + "mmp/scummvm_lure.mmp", + "mmp/scummvm_cine.mmp", + "mmp/scummvm_agi.mmp", + "S60/ScummVM_S60.mmp", + "S60v3/ScummVM_S60v3.mmp", + "S80/ScummVM_S80.mmp", + "S90/ScummVM_S90.mmp", + "UIQ2/ScummVM_UIQ2.mmp", + "UIQ3/ScummVM_UIQ3.mmp" +); + +# do this first to set all *.mmp & *.inf files to *.*.in states +ResetProjectFiles(); + +print " +======================================================================================= +Updating slave MACRO settings in MMP files from master 'scummvm_base.mmp' +======================================================================================= + +"; + +# do this first so we have @DisableDefines for correct inclusion of SOURCE files later +UpdateSlaveMacros(); + +print " +======================================================================================= +Preparing to update all the Symbian MMP project files with objects from module.mk files +======================================================================================= + +"; + +my @section_empty = (""); # section standard: no #ifdef's in module.mk files +my @sections_scumm = ("", "DISABLE_SCUMM_7_8", "DISABLE_HE"); # special sections for engine SCUMM + +# files excluded from build, case insensitive, will be matched in filename string only +my @excludes_snd = ( + "mt32", + "fluidsynth", + "i386", + "part.cpp", + "partial.cpp", + "partialmanager.cpp", + "synth.cpp", + "tables.cpp", + "freeverb.cpp" +); +my @excludes_gui = ( +); + +#arseModule(mmpStr, dirStr, ifdefArray, [exclusionsArray]) +ParseModule("_base", "base", \@section_empty); # now in ./TRG/ScummVM_TRG.mmp, these never change anyways... +ParseModule("_base", "common", \@section_empty); +ParseModule("_base", "gui", \@section_empty, \@excludes_gui); +ParseModule("_base", "graphics", \@section_empty); +ParseModule("_base", "sound", \@section_empty, \@excludes_snd); + +chdir("engines/"); +ParseModule("_scumm", "scumm", \@sections_scumm); +ParseModule("_queen", "queen", \@section_empty); +ParseModule("_simon", "simon", \@section_empty); +ParseModule("_sky", "sky", \@section_empty); +ParseModule("_gob", "gob", \@section_empty); +ParseModule("_saga", "saga", \@section_empty); + +ParseModule("_kyra", "kyra", \@section_empty); +ParseModule("_sword1", "sword1", \@section_empty); +ParseModule("_sword2", "sword2", \@section_empty); +ParseModule("_lure", "lure", \@section_empty); +ParseModule("_cine", "cine", \@section_empty); +ParseModule("_agi", "agi", \@section_empty); +print " +======================================================================================= +Done. Enjoy :P +======================================================================================= +"; + +################################################################################################################## +################################################################################################################## + +# parses multiple sections per mmp/module +sub ParseModule +{ + my ($mmp,$module,$sections,$exclusions) = @_; + my @sections = @{$sections}; + my @exclusions = @{$exclusions}; + + foreach $section (@sections) + { + CheckForModuleMK($module, $section, @exclusions); + UpdateProjectFile($mmp, $module, $section); + } +} + +################################################################################################################## + +# parses all module.mk files in a dir and its subdirs +sub CheckForModuleMK +{ + my ($item,$section,@exclusions) = @_; + + # if dir: check subdirs too + if (-d $item) + { + #print "$item\n"; + + opendir DIR, $item; + #my @Files = readdir DIR; + my @Files = grep s/^([^\.].*)$/$1/, readdir DIR; + closedir DIR; + + foreach $entry (@Files) + { + CheckForModuleMK("$item/$entry", $section, @exclusions); + } + } + + # if this is a module.mk file + if (-f $item and $item =~ /.*\/module.mk$/) + { + my $sec = ""; + my $ObjectsSelected = 0; + my $ObjectsTotal = 0; + + print "$item for section '$section' ... "; + + open FILE, $item; + my @lines = ; + close FILE; + + my $count = @lines; + print "$count lines"; + + A: foreach $line (@lines) + { + # found a section? reset + if ($line =~ /^ifndef (.*)/) + { + $sec = $1; + } + # found an object? Not uncommented! + if (!($line =~ /^#/) && $line =~ s/\.o/.cpp/) + { + # handle this section? + if ($sec eq $section) + { + $ObjectsTotal++; + + $line =~ s/^\s*//g; # remove possible leading whitespace + $line =~ s/ \\//; # remove possible trailing ' \' + $line =~ s/\//\\/g; # replace / with \ + chop($line); # remove \n + + # do we need to skip this file? According to our own @exclusions array + foreach $exclusion (@exclusions) + { + if ($line =~ /$exclusion/i) + { + print "\n ! $line (excluded, \@exclusions[$exclusion])"; + next A; + } + } + + # do we need to skip this file? According to MACROs in .MMPs + foreach $DisableDefine (@DisableDefines) + { + if ($DisableDefine eq $section && $section ne '') + { + print "\n !$line (excluded, MACRO $DisableDefine)"; + next A; + } + } + + $ObjectsSelected++; + #print "\n $line"; + $output .= "SOURCE $line\n"; + } + } + } + print " -- $ObjectsSelected/$ObjectsTotal objects selected\n"; + } +} + +################################################################################################################## + +# update an MMP project file with the new objects +sub UpdateProjectFile +{ + my ($mmp,$module,$section) = @_; + my $n = "AUTO_OBJECTS_".uc($module)."_$section"; + my $a = "\/\/START_$n\/\/"; + my $b = "\/\/STOP_$n\/\/"; + my $updated = " Updated @ ".localtime(); + my $name; + my @mmp_files_plus_one = @mmp_files; + unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp"; + + foreach $name (@mmp_files_plus_one) + { + my $file = "$buildDir/$name"; + + open FILE, "$file"; + my @lines = ; + close FILE; + + my $onestr = join("",@lines); + + if ($onestr =~ /$n/) + { + + print " - $name @ $n updating ... "; + + $onestr =~ s/$a.*$b/$a$updated\n$output$b/s; + open FILE, ">$file"; + print FILE $onestr; + close FILE; + + print "done.\n"; + } + } + + $output = ""; +} + +################################################################################################################## + +sub UpdateSlaveMacros +{ + my $updated = " Updated @ ".localtime(); + + my $name = "mmp/scummvm_base.mmp"; + my $file = "$buildDir/$name"; + print "Reading master MACROS from backends/symbian/$name ... "; + + open FILE, "$file"; + my @lines = ; + close FILE; + my $onestr = join("",@lines); + + my $n = "AUTO_MACROS_MASTER"; + my $a = "\/\/START_$n\/\/"; + my $b = "\/\/STOP_$n\/\/"; + $onestr =~ /$a(.*)$b/s; + my $macros = $1; + + my $libs_first = "\n// automagically enabled static libs from macros above\n"; + my $libs_second = "STATICLIBRARY scummvm_base.lib // must be above USE_* .libs\n"; + my $macro_counter = 0; + my $macros2 = "\n"; # output for in *.mmp MACROS section + my $projects = "\n..\\mmp\\scummvm_base.mmp\n"; # output for in BLD.INF projects section + + foreach $line (split("\n", $macros)) + { + # do we need to add a static .lib? + if ($line =~ /^.*MACRO\s*([0-9A-Z_]*)\s*\/\/\s*LIB\:(.*)$/) + { + my $macro = $1; my $lib = $2; + + # this macro enabled? then also add the .lib + if ($line =~ /^\s*MACRO\s*$macro/m) + { + # these are the USE_ libs + $libs_second .= "STATICLIBRARY $lib\n" if ($macro =~ /^USE_/); + } + else + { + # these are the non DISABLED_ libs + $libs_first .= "STATICLIBRARY $lib\n" if ($macro =~ /^DISABLE_/); + + # add projects for BLD.INF's + my $projectname = substr("$lib",0,-4); + $projects .= "..\\mmp\\$projectname.mmp\n" if ($macro =~ /^DISABLE_/); + } + $macro_counter++; + } + # not commented out? then add the macro to output string + if ($line =~ /^\s*MACRO\s*([0-9A-Z_]*)\s*/) + { + my $macro = $1; + $macros2 .= "$line\n"; + push @DisableDefines, $macro; # used in CheckForModuleMK()!! + } + } + + print "$macro_counter macro lines.\n"; + + $n = "AUTO_MACROS_SLAVE"; + $a = "\/\/START_$n\/\/"; + $b = "\/\/STOP_$n\/\/"; + + $m = "AUTO_PROJECTS"; + $p = "\/\/START_$m\/\/"; + $q = "\/\/STOP_$m\/\/"; + + foreach $name (@mmp_files) + { + $file = "$buildDir/$name"; + $fileBLDINF = $buildDir .'/'. substr($name, 0, rindex($name, "/")) . "/BLD.INF"; + print "Updating macros in $file ... "; + #print "Updating macros in backends/symbian/$name ... "; + + open FILE, "$file"; @lines = ; close FILE; + $onestr = join("",@lines); + + my $extralibs = ""; # output + # slash in name means it's a phone specific build file: add LIBs + $extralibs .= "$libs_first$libs_second" if (-e $fileBLDINF); + + $onestr =~ s/$a.*$b/$a$updated$macros2$extralibs$b/s; + + open FILE, ">$file"; print FILE $onestr; close FILE; + + my $count = @lines; + print "wrote $count lines.\n"; + + if (-e $fileBLDINF) + { + # slash in name means it's a phone specific build file: + # this also means we need to update a BLD.INF file here! + print "Updating projects in $fileBLDINF ... \n"; + + open FILE, "$fileBLDINF"; @lines = ; close FILE; + $onestr = join("",@lines); + + $onestr =~ s/$p.*$q/$p$updated$projects$q/s; + + open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE; + } + } +} + +################################################################################################################## + +sub ResetProjectFiles() +{ + my $onestr, @lines; + my @mmp_files_plus_one = @mmp_files; +# unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp"; + + print "Resetting project files: "; + + # we don't need to do mmp/scummvm_base.mmp", it was done in BuildPackageUpload.pl before the call to this script + foreach $name (@mmp_files_plus_one) + { + my $file = "$buildDir/$name"; + + print "$name "; + open FILE, "$file.in"; @lines = ; close FILE; + $onestr = join("",@lines); + open FILE, ">$file"; print FILE $onestr; close FILE; + + # also do BLD.INF if it is there... + my $fileBLDINF = $buildDir .'/'. substr($name, 0, rindex($name, "/")) . "/BLD.INF"; + if (-e "$fileBLDINF.in") + { + print substr($name, 0, rindex($name, "/")) . "/BLD.INF "; + open FILE, "$fileBLDINF.in"; @lines = ; close FILE; + $onestr = join("",@lines); + open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE; + } + } + + print "... done.\n"; +} + +################################################################################################################## diff --git a/backends/platform/symbian/BuildPackageUpload_AllVersions.pl b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl new file mode 100644 index 0000000000..7a4d6e21e2 --- /dev/null +++ b/backends/platform/symbian/BuildPackageUpload_AllVersions.pl @@ -0,0 +1,637 @@ + +use Cwd; +use Switch; + +system("cls"); +require "BuildPackageUpload_LocalSettings.pl"; + +################################################################################################################## +# prep some vars + +$SDK_BuildDirs{'UIQ2'} = "UIQ2"; +$SDK_BuildDirs{'UIQ3'} = "UIQ3"; +$SDK_BuildDirs{'S60v1'} = "S60"; +$SDK_BuildDirs{'S60v2'} = "S60"; +$SDK_BuildDirs{'S60v3'} = "S60v3"; +$SDK_BuildDirs{'S80'} = "S80"; +$SDK_BuildDirs{'S90'} = "S90"; + +$SDK_TargetName{'UIQ2'} = "armi"; +$SDK_TargetName{'UIQ3'} = "gcce"; +$SDK_TargetName{'S60v1'}= "armi"; +$SDK_TargetName{'S60v2'}= "armi"; +$SDK_TargetName{'S60v3'}= "gcce"; +$SDK_TargetName{'S80'} = "armi"; +$SDK_TargetName{'S90'} = "armi"; + +$SDK_TargetDir{'UIQ2'} = "armi"; +$SDK_TargetDir{'UIQ3'} = "armv5"; +$SDK_TargetDir{'S60v1'} = "armi"; +$SDK_TargetDir{'S60v2'} = "armi"; +$SDK_TargetDir{'S60v3'} = "armv5"; +$SDK_TargetDir{'S80'} = "armi"; +$SDK_TargetDir{'S90'} = "armi"; + +$build_dir = getcwd(); +$output_dir = "$build_dir/Packages"; +chdir("../../"); +$base_dir = getcwd(); +chdir($build_dir); +$build_log_out = "$build_dir/Build.out.log"; +$build_log_err = "$build_dir/Build.err.log"; + +$initial_path = $ENV{'PATH'}; # so we can start with a fresh PATH for each Build + +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); +$date = sprintf("%02d%02d%02d", $year-100, $mon+=1, $mday); +$file_tpl_pkg = "scummvm-CVS-Symbian%s.pkg"; +$file_tpl_sis = "scummvm-%s-Symbian%s%s.sis"; +$version_tpl_sis = "$date"; # "CVS$date" + +$PackagesQueued = 0; +$PackagesCreated = 0; +$PackagesUploaded = 0; +@ErrorMessages = (); +$ftp_url = "FTP://$FTP_User\@$FTP_Host/$FTP_Dir/"; + +$ExtraMacros = "MACRO NONSTANDARD_PORT\n"; +$ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n"; + +# prep nice list of SDKs +#while( ($SDK, $RootDir) = each(%SDK_RootDirs) ) +foreach $SDK (sort keys(%SDK_RootDirs)) +{ + $SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\n\t\t\t"; +} + +# prep nice list of Libraries +while( ($SDK, $Value) = each(%SDK_LibraryDirs) ) +{ + while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) ) + { + $PresentLibs{$Library} = $Path; + } +} +foreach $Library (sort keys(%PresentLibs)) +{ + $LIBs .= "$Library\t$PresentLibs{$Library}\n\t\t\t"; +} + +# prep nice list of Variations +while( ($SDK, $Value) = each(%SDK_Variations) ) +{ + while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) ) + { + $Extra = ($Variation ne '' ? "_$Variation" : ""); + if ($SDK eq "ALL") + { + while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) + { + if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently) + { + push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK2, $Extra); + $PackagesQueued++; + } + } + } + else + { + if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently) + { + push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra); + $PackagesQueued++; + } + } + } +} +foreach $Package (sort @Packages) +{ + $PackagesStr .= "$Package\n\t\t\t"; +} + +print " +======================================================================================= +Preparing to Build, Package & Upload $PackagesQueued SymbianOS ScummVM variations +======================================================================================= + + Producer \t$Producer (RedirE:$RedirectSTDERR HaltE:$HaltOnError Skip:$SkipExistingPackages Quiet:$ReallyQuiet) + + SDKs inst'd \t$SDKs ".( %SDK_LibraryDirs ? " + LIBs inst'd \t$LIBs " : "" )." + $PackagesQueued Variations \t$PackagesStr + DIR base \t$base_dir + build \t$build_dir + output \t$output_dir +".( $FTP_Host ne '' ? " + FTP host \t$FTP_Host + user \t$FTP_User + pass \t"."*" x length($FTP_Pass)." + dir \t$FTP_Dir +" : "" )." +======================================================================================= +Press Ctrl-C to abort or enter to continue Build, Package & Upload $PackagesQueued Variations... +======================================================================================= +"; + +$line = ; + +# make sure the output dir exists! +mkdir($output_dir, 0755) if (! -d $output_dir); + +unlink($build_log_out); +unlink($build_log_err); + +# init _base.mmp now, so we can start changing it without affecting the CVS version _base.mmp.in! +my $name = "mmp/scummvm_base.mmp"; +my $file = "$build_dir/$name"; +open FILE, "$file.in"; @lines = ; close FILE; +my $onestr = join("",@lines); +open FILE, ">$file"; print FILE $onestr; close FILE; + +################################################################################################################## +# do the actual deeds for all present libs + +while( ($SDK, $Value) = each(%SDK_LibraryDirs) ) +{ + while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) ) + { + if ($SDK eq "ALL") + { + while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) + { + if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently) + { + $LibrariesQueued++; + DoLibrary($SDK2, $Library, $Path); + } + } + } + else + { + if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently) + { + $LibrariesQueued++; + DoLibrary($SDK, $Library, $Path); + } + } + } +} + +#system('pause'); + +################################################################################################################## +# do the actual deeds for all configured variations + +while( ($SDK, $VariationsHash) = each(%SDK_Variations) ) +{ + while( ($Variation, $MacroBlock) = each(%{$SDK_Variations{$SDK}}) ) + { + if ($SDK eq "ALL") + { + while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) + { + if ($SDK_RootDirs{$SDK2} ne '') + { + DoVariation($SDK2, $Variation, $MacroBlock); + } + } + } + else + { + if ($SDK_RootDirs{$SDK} ne '') + { + DoVariation($SDK, $Variation, $MacroBlock); + } + } + } +} + +################################################################################################################## +# give report + +chdir($build_dir); + +print " +=======================================================================================".( %SDK_LibraryDirs ? " +Libraries selected: \t$LibrariesQueued + built: \t$LibrariesSucceeded " : "" )." +Packages selected: \t$PackagesQueued $base_dir ".( $PackagesExisted ? " + existed: \t$PackagesExisted $output_dir " : "" )." + created: \t$PackagesCreated $output_dir ".( $FTP_Host ne '' ? " + uploaded: \t$PackagesUploaded $ftp_url " : "" )." +======================================================================================= +"; + +my $count = @ErrorMessages; +if ($count) +{ + print "Hmm, unfortunately some ERRORs have occurred during the process:\n"; + foreach $Error (@ErrorMessages) + { + print "> $Error\n"; + } + print "=======================================================================================\n"; + print "\007\007"; +} + +# first clean up 'initial path' by removing possible old entries (in case of aborted builds) +#$initial_path_system_cleaned = CleanupPath($initial_path_system); + +# show them we cleaned up? +#if ($initial_path_system_cleaned ne $initial_path_system) +#{ +# PrintMessage("PATH cleaned up from:\n$initial_path_system\n\nto:\n$initial_path_system_cleaned"); +#} + +print " SumthinWicked wishes you a ridiculously good and optimally happy day :P\n======================================================================================="; + +################################################################################################################## +################################################################################################################## + +# Build, Package & Upload a single Variation +sub DoLibrary +{ + my ($SDK, $Library, $Path) = @_; + my $TargetName = $SDK_TargetName{$SDK}; + my $TargetDir = $SDK_TargetDir{$SDK}; + my $Target = "$SDK - $Library"; + my $TargetFilePath = $SDK_RootDirs{$SDK}."\\epoc32\\release\\$TargetDir\\urel\\$Library"; + #my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\".substr($Path, 3)); + # does this remove too much? + my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\"); + +my $header = " +======================================================================================= +======================================================================================= +======================================================================================= + Preparing to build library $Target +======================================================================================= +======================================================================================= +======================================================================================= +"; + print $header if (!$ReallyQuiet); + open FILE, ">>$build_log_out"; print FILE $header; close FILE; + open FILE, ">>$build_log_err"; print FILE $header; close FILE; + + # easy for error-handling: + $CurrentTarget = $Target; + my $OK = 1; + + PrepSdkPaths($SDK); + + chdir($Path) or $OK=0; + PrintErrorMessage("Changing to $Path failed!") if (!$OK); + return 0 if (!$OK); + + PrintMessage("Cleaning for $Target") if (!$ReallyQuiet); + system("bldmake bldfiles > NUL 2> NUL"); + PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8); + system("abld clean $TargetName urel > NUL 2> NUL"); + PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); + # remove file so we are sure that after .lib generation we have a fresh copy! + if (-e $TargetFilePath) { unlink($TargetFilePath) or PrintErrorMessage("Removing $TargetFilePath"); } + + my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen"); + my $Message = "Building $Target ($Redirection)"; + PrintMessage($Message) if (!$ReallyQuiet); + print(" $Message\n") if ($ReallyQuiet); + + my $OldSize = (-s $build_log_err); + $Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : ""); + system("abld build $TargetName urel $Redirection >> $build_log_out"); + $OK = 0 if ($? >> 8); +# print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err)); + PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); + return 0 if (!$OK); # ABLD always returns ok :( grr + PrintMessage("Done.") if (!$ReallyQuiet); + + # did it work? :) + if (-e $TargetFilePath) + { + $LibrariesSucceeded++; + + if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path! + { + system("del /S /Q $TargetIntermediatePath > NUL"); + } + return 1; + } + else + { + PrintErrorMessage("'abld build $TargetName urel' apparently failed."); + if ($HaltOnError) + { + PrintErrorMessage("Halting on error as requested!"); + exit 1; + } + return 0; + } +} + +################################################################################################################## + +# Build, Package & Upload a single Variation +sub DoVariation +{ + my ($SDK, $Variation, $MacroBlock) = @_; + my $Extra = ($Variation ne '' ? "_$Variation" : ""); + my $Package = sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra); + + if ($SkipExistingPackages && -f "$output_dir/$Package") + { + PrintMessage("Skipping $Package (already exists!)"); + $PackagesExisted++; + return; + } + +my $header = " +======================================================================================= +======================================================================================= +======================================================================================= + Preparing to build $Package +======================================================================================= +======================================================================================= +======================================================================================= +"; + print $header if (!$ReallyQuiet); + open FILE, ">>$build_log_out"; print FILE $header; close FILE; + open FILE, ">>$build_log_err"; print FILE $header; close FILE; + + # easy for error-handling: + $CurrentTarget = $Package; + my $OK; + + $OK = PrepVariation($SDK, $Variation, $Package, $MacroBlock); + + if ($OK) + { + $OK = BuildVariation($SDK, $Variation, $Package, $MacroBlock); + + if ($OK && $FTP_Host ne '') + { + UploadVariation($SDK, $Variation, $Package); + } + } +} + +################################################################################################################## + +sub PrepVariation() +{ + my ($SDK, $Variation, $Package, $MacroBlock) = @_; + my $OK = 1; + + PrepSdkPaths($SDK); + + chdir($build_dir) or $OK=0; + PrintErrorMessage("Changing to $build_dir failed!") if (!$OK); + return 0 if (!$OK); + + # insert $MacroBlock into AUTO_MACRO_MASTER in scummvm_base.mmp + PrintMessage("Setting new AUTO_MACROS_MASTER in scummvm_base.mmp for '$Variation'") if (!$ReallyQuiet); + my $n = "AUTO_MACROS_MASTER"; + my $a = "\/\/START_$n\/\/"; + my $b = "\/\/STOP_$n\/\/"; + my $name = "scummvm_base.mmp"; + my $file = "$build_dir/mmp/$name"; + my $updated = " Updated @ ".localtime(); + + open FILE, "$file" or $OK=0; + PrintErrorMessage("Reading file '$file'") if (!$OK); + return 0 if (!$OK); + my @lines = ; + close FILE; + + my $onestr = join("",@lines); + $MacroBlock =~ s/^\s*//gm; + $onestr =~ s/$a(.*)$b/$a$updated\n$ExtraMacros$MacroBlock$b/s; + + open FILE, ">$file" or $OK=0; + PrintErrorMessage("Writing file '$file'") if (!$OK); + return 0 if (!$OK); + print FILE $onestr; + close FILE; + + # running AdaptAllMMPs.pl to propagate changes + PrintMessage("Running AdaptAllMMPs.pl to propagate MACRO changes") if (!$ReallyQuiet); + system("perl AdaptAllMMPs.pl > NUL"); + $OK = 0 if ($? >> 8); + PrintErrorMessage("'AdaptAllMMPs.pl' exited with value " . ($? >> 8)) if ($? >> 8); + return 0 if (!$OK); + + # we are here: so all is ok :) + return 1; +} + +################################################################################################################## + +sub BuildVariation() +{ + my ($SDK, $Variation, $Package, $MacroBlock) = @_; + my $TargetName = $SDK_TargetName{$SDK}; + my $TargetDir = $SDK_TargetDir{$SDK}; + my $OK = 1; + + my $dir = $build_dir."/".$SDK_BuildDirs{$SDK}; + $dir =~ s#/#\\#g; + chdir($dir); + + #my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\".substr($dir, 3)); + # does this remove too much? + my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\"); + + PrintMessage("Cleaning for $Package") if (!$ReallyQuiet); + + # remove some files so we are sure that after .sis package generation we have a fresh copy! + my $UnlinkFile = "$output_dir/$Package"; + if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } + $UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.app"; + if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } + $UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.exe"; + if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } + + system("bldmake bldfiles 2> NUL > NUL"); + PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8); + + system("abld clean $TargetName urel 2> NUL > NUL"); + PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); + + my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen"); + my $Message = "Building $Package ($Redirection)"; + PrintMessage($Message) if (!$ReallyQuiet); + print(" $Message\n") if ($ReallyQuiet); + + my $OldSize = (-s $build_log_err); + $Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : ""); + system("abld build $TargetName urel $Redirection >> $build_log_out"); + $OK = 0 if ($? >> 8); + print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err) && !$ReallyQuiet); + PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); + return 0 if (!$OK); # ABLD always returns ok :( grr + PrintMessage("Done.") if (!$ReallyQuiet); + + # do we have an override suffix for the package name? + $MacroBlock =~ /^\s*\/\/\s*PKG_SUFFIX:\s*(\w+)\s*/gm; # using '@' as delimiter here instead of '/' for clarity + my $PkgSuffix = $1; # can be "" + my $PkgFile = sprintf($file_tpl_pkg, $SDK.$PkgSuffix); + + PrintMessage("Creating package $Package") if (!$ReallyQuiet); +## fix if (!$ReallyQuiet) for next: + system("makesis -d\"".$SDK_RootDirs{$SDK}."\" $PkgFile \"$output_dir/$Package\" $Redirection >> $build_log_out"); + $OK = 0 if ($? >> 8); + PrintErrorMessage("'makesis' $PkgFile exited with value " . ($? >> 8)) if (!$OK); + if ($HaltOnError && !$OK) + { + PrintErrorMessage("Halting on error as requested!"); + exit 1; + } + return 0 if (!$OK); + + # did it work? :) + if (-e "$output_dir/$Package") + { + $PackagesCreated++; + + if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path! + { + #PrintMessage("Cleaning $TargetIntermediatePath"); + system("del /S /Q $TargetIntermediatePath > NUL"); + } + return 1; + } + else + { + PrintErrorMessage("'makesis' apparently failed. (?)"); + return 0; + } +} + +################################################################################################################## + +sub UploadVariation() +{ + my ($SDK, $Variation, $Package) = @_; + + use Net::FTP; + my $newerr; + + PrintMessage("Connecting to FTP $FTP_Host") if (!$ReallyQuiet); + + $ftp = Net::FTP->new($FTP_Host,Timeout=>240) or $newerr=1; + PrintErrorMessage("Connecting to FTP $FTP_Host! Aborting!") if $newerr; + if (!$newerr) + { + $ftp->login($FTP_User, $FTP_Pass) or $newerr=1; + PrintErrorMessage("Logging in with $FTP_User to $FTP_Host! Aborting!") if $newerr; + if (!$newerr) + { + if ($FTP_Dir ne '') # do we need to change dir? + { + PrintMessage("Changing to dir $FTP_Dir"); + $ftp->cwd($FTP_Dir) or $newerr=1; + + if ($newerr) + { + PrintErrorMessage("Changing to dir $FTP_Dir! Aborting!"); + $ftp->quit; + return; + } + } + +# leave this for possible auto-deletion of old files? +# @files = $ftp->dir or $newerr=1; +# push @ERRORS, "Can't get file list $!\n" if $newerr; +# print "Got file list\n"; +# foreach(@files) { +# print "$_\n"; +# } + + PrintMessage("Uploading $Package (".(-s "$output_dir/$Package")." bytes)"); + + $ftp->binary; + $ftp->put("$output_dir/$Package") or $newerr=1; + PrintErrorMessage("Uploading package! Aborting!") if $newerr; + $PackagesUploaded++ if (!$newerr); + } + + $ftp->quit; + } +} + +################################################################################################################## + +sub PrepSdkPaths() +{ + my ($SDK) = @_; + my $EPOCROOT = $SDK_RootDirs{$SDK}; + my $EPOC32RT = "$EPOCROOT\\epoc32"; + my $AdditionalPathEntries = ""; + my $OK = 1; + + # do the directories exist? + if (! -d $EPOCROOT) { PrintErrorMessage("$SDK Directory does not exist: '$EPOCROOT'"); return 0; } + if (! -d $EPOC32RT) { PrintErrorMessage("$SDK Directory does not exist: '$EPOC32RT'"); return 0; } + + # set env stuff + PrintMessage("Prepending $SDK specific paths to %PATH%") if (!$ReallyQuiet); + $AdditionalPathEntries .= "$ECompXL_BinDir;" if ($ECompXL_BinDir ne '' && $SDK eq 'UIQ2'); + $AdditionalPathEntries .= "$EPOC32RT\\include;"; + $AdditionalPathEntries .= "$EPOC32RT\\tools;"; + $AdditionalPathEntries .= "$EPOC32RT\\gcc\\bin;"; + $ENV{'EPOCROOT'} = substr($EPOCROOT,2)."\\"; # strips drive letter, needs to end with backslash! + $ENV{'PATH'} = "$AdditionalPathEntries$initial_path"; + + return 1; +} + +################################################################################################################## + +sub CleanupPath() +{ + my ($path) = @_; + + if ($ECompXL_BinDir ne '') + { + $path =~ s/\"\Q$ECompXL_BinDir\E\";//g; + } + + while( ($SDK, $RootDir) = each(%SDK_RootDirs) ) + { + if ($SDK_RootDirs{$SDK} ne '') + { + my $path_component = "\"".$SDK_RootDirs{$SDK}."\\epoc32\\"; + $path =~ s/\Q$path_component\E.*?\";//g; + } + } + + return $path; +} + +################################################################################################################## + +sub PrintErrorMessage() +{ + my ($msg) = @_; + + # add to array, so we can print it @ the end! + push @ErrorMessages, "$CurrentTarget: $msg"; + + print "+--------------------------------------------------------------------------------------\n"; + PrintMessage("ERROR: $CurrentTarget: $msg"); + print "\007" if (!$HaltOnError); + print "\007\007" if ($HaltOnError); # make more noise if halt-on-error +} + +sub PrintMessage() +{ + my ($msg) = @_; + + print "| $msg\n"; + print "+--------------------------------------------------------------------------------------\n"; +#$line = ; + + #print "\e[1,31m> $msg\e[0m\n"; +} + +################################################################################################################## + \ No newline at end of file diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl new file mode 100644 index 0000000000..a357b836db --- /dev/null +++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl @@ -0,0 +1,292 @@ + +################################################################################################################## + + # you can use these below for speed & clarity or override with custom settings + $DefaultTopMacros = " + MACRO USE_ZLIB // LIB:zlib.lib + MACRO USE_MAD // LIB:libmad.lib + //MACRO USE_TREMOR // LIB:libtremor.lib + "; + + $DefaultBottomMacros = " + MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib + MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib + MACRO DISABLE_LURE // LIB:scummvm_lure.lib + MACRO DISABLE_CINE // LIB:scummvm_cine.lib + "; + + ## + ## General system information: + ## + + # this way you can use the same LocalSettings.pl file on multiple machines! + if ($ENV{'COMPUTERNAME'} eq "MYCOMPUTER") + { + # might use this string for file/dir naming in the future :) + $Producer = "BUILDERNAME"; + $RedirectSTDERR = 0; + $HaltOnError = 1; + $SkipExistingPackages = 0; + $ReallyQuiet = 0; + + # specify an optional FTP server to upload to after each Build+Package (can leave empty) + #$FTP_Host = "ftp.myftp.net"; + #$FTP_User = "user"; + #$FTP_Pass = "pass"; + #$FTP_Dir = "directory"; + + # possible SDKs: ("UIQ2", UIQ3", "S60v1", "S60v2", "S60v3", "S80", "S90") + # Note1: the \epoc32 directory needs to be in these rootdirs + # Note2: these paths do NOT end in a backslash! + $SDK_RootDirs{'UIQ2'} = "C:\\S\\UIQ_21"; + $SDK_RootDirs{'S60v1'} = "C:\\S\\S60v1"; + $SDK_RootDirs{'S60v2'} = "C:\\S\\S60v2"; + $SDK_RootDirs{'S80'} = "C:\\S\\S80"; + $SDK_RootDirs{'S90'} = "C:\\S\\S90"; + $ECompXL_BinDir = "C:\\S\\ECompXL\\bin"; # only needed for UIQ + # you need to specify each of the SDKs used in the blocks below! + + # these supporting libraries get built first, then all the Variations + # Note: the string {'xxx.lib'} is used in checking in build success: so needs to be accurate! + if (0) # so we can turn them on/off easily + { + #$SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc"; + #$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group"; + #$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\S\\tremor\\epoc"; + $SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\UIQ"; + #$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S60"; + #$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S80"; + #$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90"; + #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; + } + + # backup :P + #Path=C:\Progra~1\Active\Python24\.;C:\Program Files\Active\Tcl\bin;C:\Progra~1\Active\Perl\bin\;C:\WINDOWS\system32;C:\W + #INDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\GNU\cvsnt;C:\Progra + #m Files\WinSCP3\;"C:\Program Files\Common Files\Microsoft Shared\VSA\8.0\VsaEnv\";"c:\Program Files\Microsoft Visual Stu + #dio 8\VC\bin";"C:\Program Files\UltraEdit-32" + } + elsif ($ENV{'COMPUTERNAME'} eq "OTHERCOMPUTER") + { +#see previous section + # now you can add $SDK_Variations only built on this PC here :) + } + else + { + print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!"; + exit 1; + } + + ## + ## Variation defines: + ## + + # second hash index = literal string used in .sis file created. + # empty string also removes the trailing '_'. Some 051101 examples: + + # $SDK_Variations{'UIQ2'}{''} would produce: + # scummvm-051101-SymbianUIQ2.sis + + # $SDK_Variations{'S60v2'}{'simon'} would produce: + # scummvm-051101-SymbianS60v2_simon.sis + + # $SDK_Variations{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce: + # scummvm-051101-SymbianUIQ2_queen.sis + # scummvm-051101-SymbianUIQ3_queen.sis + # scummvm-051101-SymbianS60v1_queen.sis + # scummvm-051101-SymbianS60v2_queen.sis + # scummvm-051101-SymbianS60v3_queen.sis + # scummvm-051101-SymbianS80_queen.sis + # scummvm-051101-SymbianS90_queen.sis + + $SDK_Variations{'UIQ2'}{'test'} = "$DefaultTopMacro + MACRO USE_TREMOR // LIB:libtremor.lib + //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + //MACRO DISABLE_SKY // LIB:scummvm_sky.lib + //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + //MACRO DISABLE_GOB // LIB:scummvm_gob.lib + //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; +# $SDK_Variations{'S60v1'}{'test'} = $SDK_Variations{'UIQ2'}{'test'}; + +if (0) # all regular combo's +{ + # the first one includes all SDKs & engines + + $SDK_Variations{'ALL'}{'all'} = "$DefaultTopMacros + //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + //MACRO DISABLE_SKY // LIB:scummvm_sky.lib + //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + //MACRO DISABLE_GOB // LIB:scummvm_gob.lib + //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + # now one for each ready-for-release engine + + $SDK_Variations{'ALL'}{'scumm'} = "$DefaultTopMacros + //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'simon'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'sky'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + //MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'queen'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'gob'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + //MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'saga'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'kyra'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + $DefaultBottomMacros"; + + # below here you could specify weird & experimental combinations, non-ready engines + + $SDK_Variations{'ALL'}{'test_lure'} = "$DefaultTopMacros + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib + MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib + //MACRO DISABLE_LURE // LIB:scummvm_lure.lib + MACRO DISABLE_CINE + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'saga_mini'} = " + //MACRO USE_ZLIB // LIB:zlib.lib + //MACRO USE_MAD // LIB:libmad.lib + //MACRO USE_TREMOR // LIB:libtremor.lib + MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + MACRO DISABLE_CINE + $DefaultBottomMacros"; + + $SDK_Variations{'ALL'}{'scumm_no78he'} = " + MACRO USE_ZLIB // LIB:zlib.lib + MACRO USE_MAD // LIB:libmad.lib + //MACRO USE_TREMOR // LIB:libtremor.lib + //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + MACRO DISABLE_SKY // LIB:scummvm_sky.lib + MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + MACRO DISABLE_GOB // LIB:scummvm_gob.lib + MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + MACRO DISABLE_SCUMM_7_8 + MACRO DISABLE_SCUMM_HE + MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + MACRO DISABLE_CINE + $DefaultBottomMacros"; + +# $SDK_Variations{'ALL'}{'all_vorbis'} = " +# MACRO USE_ZLIB // LIB:zlib.lib +# MACRO USE_MAD // LIB:libmad.lib +# MACRO USE_TREMOR // LIB:libtremor.lib +# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib +# //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib +# //MACRO DISABLE_SKY // LIB:scummvm_sky.lib +# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib +# //MACRO DISABLE_GOB // LIB:scummvm_gob.lib +# //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib +# $DefaultBottomMacros"; +} + +# +# $SDK_Variations{'S60v2'}{'test_sword'} = "$DefaultTopMacros +# MACRO USE_MPEG2 // LIB:libmpeg2.lib +# MACRO USE_TREMOR // LIB:libtremor.lib +# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib +# MACRO DISABLE_SIMON // LIB:scummvm_simon.lib +# MACRO DISABLE_SKY // LIB:scummvm_sky.lib +# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib +# MACRO DISABLE_GOB // LIB:scummvm_gob.lib +# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib +# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib +# //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib +# //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib +# "; +# $SDK_Variations{'UIQ2'}{'test_sword'} = $SDK_Variations{'S60v2'}{'test_sword'} +# + +# for mega-fast-testing only plz! +# $SDK_Variations{'UIQ2'}{'(fast_empty)'} = " +# //MACRO USE_ZLIB // LIB:zlib.lib +# //MACRO USE_MAD // LIB:libmad.lib +# //MACRO USE_TREMOR // LIB:libtremor.lib +# MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib +# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib +# MACRO DISABLE_SIMON // LIB:scummvm_simon.lib +# MACRO DISABLE_SKY // LIB:scummvm_sky.lib +# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib +# MACRO DISABLE_GOB // LIB:scummvm_gob.lib +# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib +# $DefaultBottomMacros"; + +################################################################################################################## + +1; \ No newline at end of file diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README new file mode 100644 index 0000000000..3a4b6142ad --- /dev/null +++ b/backends/platform/symbian/README @@ -0,0 +1,135 @@ + + ScummVM - ScummVM ported to EPOC/SymbianOS + + Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson + Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson + Copyright (C) 2005 Jurgen 'SumthinWicked' Braam + Copyright (C) 2005 ScummVM Team + + $Id$ + + +About ScummVM +-------------- + The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson. + The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam. + Jurgen and Lars are currently working together to finalize the transfer to CVS. + + +Nescessary components +--------------------- + Building ScummVM yourself using the UIQ 2.1/Nokia S60 SDK/Nokia S80 SDK/Nokia S90 SDK framework is not an easy task! + Lets just say the framework needs quite some time to set up and takes a while + to get used to. If you choose to continue you will need the following items: + + - UIQ 2.1 SDK (To build for UIQ devices); + http://www.symbian.com/developer/sdks_uiq.asp + + - Nokia S60 1st, 2nd edition (3rd edition has not been tested) SDK (To build for S60 devices) + + - Nokia S80 SDK (To build for S80 devices) + + - Nokia 7710 SDK (To build for the 7710/S90 device) + + - ECompXL, an EPOC application compression library + http://www.yipton.demon.co.uk/ecompxl/latest/readme.html (To build for UIQ devices) + + - libsdl, Simple Directmedia Layer, a cross-platform multimedia library + http://www.libsdl.org/ (see note about ESDL below) + + - libmad, a high-quality MPEG audio decoder + http://www.underbit.com/products/mad/ + + - zlib, a massively spiffy yet delicately unobtrusive compression library + http://www.zlib.net/ + + These are probably too heavy-duty for your phone: + + - libogg, the free media file container format + http://www.xiph.org/ogg/ + + - libvorbis, the free audio codec + http://www.vorbis.com/ + + - flac, the Free Lossless Audio Codec + http://flac.sourceforge.net/ + + - libmpeg2, a free MPEG-2 video stream decoder + http://libmpeg2.sourceforge.net/ + + +Building ScummVM +----------------- + ECompXL: this is a tool that will compress your executable with GZIP and glue + it to a predefined loader app. The app will uncompress your application at + runtime and run it without you even knowing it. A really interesting byproduct + of this method is that the general restriction of not having any writeable + static data (WSD) for Symbian APP executables no longer applies. This makes + the life of an EPOC porter a lot easier! To install this tool you need to add + its \bin path to your PATH above the sybmian epocs32\tools path, so that ECompXL's + PETRAN.EXE will be the executable that is started. + + SDL: the latest varsion of SDL at this point in time is 1.2.8. This version + works great for compiling on other platforms, but for EPOC it lacks some + features. There are two distributions that have the nescessary goods: The one + made for SuperWaba (http://www.newlc.com/article.php3?id_article=574 and + http://www.superwaba.com/) and ESDL, the one that Sprawl made for the P800/P900. I've + used Sprawl's version uptil now. If Sprawl feels ESDL is in such a state that + it can be released, he will post a source download on his site and I will + make it know through the scummvm.org site. In /sdl/epoc/ go: + > bldmake bldfiles + > abld build + + zlib: the zlib-x.x.x.tar.gz does not come with UIQ .mpp build files, that's why + I added them for you in epoc-zlib.zip. Extract in /zlib/ which will + create the epoc dir. In /zlib/epoc/ go: + > bldmake bldfiles + > abld build + + libmad: the libmad-x.x.x.tar.gz does not come with UIQ .mpp build files, that's + why I added them for you in epoc-libmad.zip. Extract in /libmad/ which + will create the epoc dir. In /libmad/epoc/ go: + > bldmake bldfiles + > abld build + + ScummVM: make sure the SYSTEMINCLUDE dirs in ScumVM.mmp are correct. For the + 'wins' platform also check the LIBRARY entries for the correct path to your MSVC + installation. Please note that you can only specify relative paths here, so every- + thing needs to be on the same physical drive! Another weird demand of the UIQ + platform... In /scummvm/backends/epoc/ go: + + > run 'unzip mmp\initial_mmps.zip' + > edit the scummvm_base.mmp to fit your needs (for supported target games and features, check the MACRO statements) + > run 'perl AdaptAllMMPs.pl' from the commandline, this will update all mmp and bld.inf files + > change to the directory for your designated target (uiq2 for UIQ 2.X, S60 for S60 v1 & V2 etc) + > 'bldmake bldfiles' to update and create the symbian build structure + > 'abld build armi urel' to build the target binaries + > makesis -d\sdkpath ScummVM_xxx.pkg to build the sis file for your target. + + Now you should have yourself a nice ScummVM_xxx.sis installer package for use + on your phone. Please note that for development it will be a lot faster if you + transfer the SCUMMVM.APP/Scummvm.EXE file directly to your !:\system\apps\ScummVM\ dir! + + Platforms can be one of: ARMi, ARM4, THUMB, WINS. The SE P900 uses the ARMi platform, + which is a combined ARM4/THUMB programming mode. Configurations can be one of: + UREL or UDEB. + + +Greetz & such +------------- + Kudos fly out to: + - Sprawl for having the nerve to start & carry this puppy for so long + - AnotherGuest for having the nerve to start & carry this puppy for so long + - Fingolfin for taking the time to go through 1000 patch versions with me + - Myself (SumthinWicked), for writing this entire README and adopting all sources together with Fingolfin :) + - the entire ScummVM Dev team for making a kicka$$ program + - the folks in #scummvm @ irc.freenode.net for their help, confort and support + - everybody else who wants to give me 'the look' for not including them here :P + + + it's been swell, + gotta go now, + + greetz, + SumthinWicked & Anotherguest + diff --git a/backends/platform/symbian/S60/BLD.INF.in b/backends/platform/symbian/S60/BLD.INF.in new file mode 100644 index 0000000000..b6cf8bbda6 --- /dev/null +++ b/backends/platform/symbian/S60/BLD.INF.in @@ -0,0 +1,12 @@ +PRJ_PLATFORMS +WINS ARMI // ARM4 THUMB + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_S60.mmp +.\ScummVM_S60_App.mmp diff --git a/backends/platform/symbian/S60/ScummVM_S60.mmp.in b/backends/platform/symbian/S60/ScummVM_S60.mmp.in new file mode 100644 index 0000000000..3421cb306d --- /dev/null +++ b/backends/platform/symbian/S60/ScummVM_S60.mmp.in @@ -0,0 +1,104 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC S60 MMP makefile project for ScummVM +// + +// *** Definitions + +#if defined(WINS) + TARGET ScummVM.dll +#else + TARGET ScummVM.exe +#endif +TARGETPATH system\apps\ScummVM +TARGETTYPE EXEDLL + +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +#if !defined(WINS) +EPOCSTACKSIZE 0x00008000 +EPOCHEAPSIZE 2048000 8192000 +#endif + +MACRO S60 + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +#if !defined(WINS) +STATICLIBRARY egcc.lib // for __fixunsdfsi +#endif + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\.. + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries + +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib +LIBRARY gdi.lib hal.lib bitgdi.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib +library avkon.lib bafl.lib diff --git a/backends/platform/symbian/S60/ScummVM_S60_App.mmp b/backends/platform/symbian/S60/ScummVM_S60_App.mmp new file mode 100644 index 0000000000..6caf91009b --- /dev/null +++ b/backends/platform/symbian/S60/ScummVM_S60_App.mmp @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// MAKEFILE.MMP S60 ScummVM Launcher +// + +TARGET ScummVM.app +TARGETPATH system\apps\ScummVM +TARGETTYPE app + +UID 0x100039ce 0x101f9b57 +sourcepath ..\res +RESOURCE SCUMMVM.rss + +USERINCLUDE ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc + +// app source +sourcepath ..\src +SOURCE ScummVMApp.cpp + +sourcepath .. +AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp + +// libraries +LIBRARY cone.lib EIKCORE.lib +LIBRARY euser.lib apparc.lib +LIBRARY efsrv.lib apgrfx.lib +LIBRARY avkon.lib diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg new file mode 100644 index 0000000000..d95ea72456 --- /dev/null +++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg @@ -0,0 +1,27 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM S60v1"},(0x101f9b57),0,80,0 + +; Platform type +(0x101F6F88), 0, 0, 0, {"Series60ProductID"} + +; Launcher, Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" +"\epoc32\release\armi\urel\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\release\armi\urel\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg new file mode 100644 index 0000000000..b2eb086488 --- /dev/null +++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg @@ -0,0 +1,27 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM S60v2"},(0x101f9b57),0,80,3 + +; Platform type +(0x101F6F88), 0, 0, 0, {"Series60ProductID"} + +; Launcher, Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/S60v3/BLD.INF.in b/backends/platform/symbian/S60v3/BLD.INF.in new file mode 100644 index 0000000000..f7b7090adf --- /dev/null +++ b/backends/platform/symbian/S60v3/BLD.INF.in @@ -0,0 +1,11 @@ +PRJ_PLATFORMS +GCCE WINSCW + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_S60v3.mmp diff --git a/backends/platform/symbian/S60v3/ScummVM_Loc.rss b/backends/platform/symbian/S60v3/ScummVM_Loc.rss new file mode 100644 index 0000000000..83a8cfcc4c --- /dev/null +++ b/backends/platform/symbian/S60v3/ScummVM_Loc.rss @@ -0,0 +1,22 @@ +#include + +// This file localise the applications icons and caption +RESOURCE LOCALISABLE_APP_INFO + { + caption_and_icon = + { + CAPTION_AND_ICON_INFO + { + // The caption text is defined in the rls file + caption = "ScummVM"; + // Icons are used to represent applications in the + // application launcher and application title bar. + // The number_of_icons value identifies how many icons + // that exist in the icon_file. + number_of_icons = 3; + // Using the application icons. + icon_file = "\\Resource\\Apps\\ScummVM.mbm"; + } + }; + } + diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in new file mode 100644 index 0000000000..545eade06e --- /dev/null +++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in @@ -0,0 +1,123 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC S60 MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET ScummVM.exe +TARGETPATH sys\bin +TARGETTYPE EXE + +UID 0x100039ce 0xA0000657 + +START RESOURCE ScummVM_reg.rss +TARGETPATH \private\10003a3f\apps +END + +START RESOURCE ScummVM_loc.rss +TARGETPATH \Resource\Apps +LANG SC +END + +SOURCEPATH ..\res +START RESOURCE ScummVM.rss +HEADER +TARGETPATH \Resource\Apps +LANG SC +END + +START BITMAP ScummVM.mbm +TARGETPATH \Resource\Apps +SOURCEPATH ..\res +// Source Color-depth Source-bitmap-list +// c denotes whether the bitmap is a colour bitmap and the digits represent the +// colour-depth of the bitmap and the bitmap mask respectively +SOURCE c24 ScummSmall.bmp +SOURCE 8 ScummSmallMask.bmp +SOURCE c24 ScummLarge.bmp +SOURCE 8 ScummLargeMask.bmp +SOURCE c24 ScummxLarge.bmp +SOURCE 8 ScummxLargeMask.bmp +END + +EPOCSTACKSIZE 0x0000F000 +EPOCHEAPSIZE 2048000 16192000 + +MACRO S60 +MACRO S60V3 +MACRO EPOC_AS_APP +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\.. + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib +LIBRARY gdi.lib hal.lib bitgdi.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib +library avkon.lib bafl.lib diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg new file mode 100644 index 0000000000..d6a1e94c1f --- /dev/null +++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg @@ -0,0 +1,33 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; +;Language - standard language definitions +&EN + +; List of localised vendor names - one per language. At least one must be provided (English [EN]). +; List must correspond to list of languages specified elsewhere in the .pkg +%{"ScummVM"} +; The non-localised, globally unique vendor name (mandatory) +:"ScummVM" + +; UID is the app's UID +#{"ScummVM S60v3"},(0xA0000657),0,90,0 + +;Supports Series 60 v 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +; Launcher, Application, AIF & Resource file +"\s60v3\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" +"\s60v3\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" +"\s60v3\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" +"\s60v3\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" +"\s60v3\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"c:\private\A0000657\scummvm.ini",FILENULL +""-"c:\private\A0000657\scummvm.stdout.txt",FILENULL +""-"c:\private\A0000657\scummvm.stderr.txt",FILENULL +""-"c:\private\A0000657\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/S60v3/scummvm_reg.rss b/backends/platform/symbian/S60v3/scummvm_reg.rss new file mode 100644 index 0000000000..df99094b2e --- /dev/null +++ b/backends/platform/symbian/S60v3/scummvm_reg.rss @@ -0,0 +1,18 @@ +// All registration files need to #include appinfo.rh. +#include + +// All registration files must define UID2, which is always +// KUidAppRegistrationResourceFile, and UID3, which is the application's UID. +UID2 KUidAppRegistrationResourceFile +UID3 0xA0000657 // application UID + +// Registration file need to containo an APP_REGISTRATION_INFO resource that +// minimally needs to provide the name of the application binary (using the +// app_file statement). +RESOURCE APP_REGISTRATION_INFO + { + app_file = "ScummVM"; // filename of application binary (minus extension) + // Specify the location of the localisable icon/caption definition file + localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc"; + } + diff --git a/backends/platform/symbian/S80/BLD.INF.in b/backends/platform/symbian/S80/BLD.INF.in new file mode 100644 index 0000000000..75ef20be12 --- /dev/null +++ b/backends/platform/symbian/S80/BLD.INF.in @@ -0,0 +1,12 @@ +PRJ_PLATFORMS +WINS ARMI // ARM4 THUMB + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_S80.mmp +.\ScummVM_S80_App.mmp diff --git a/backends/platform/symbian/S80/ScummVM_S80.mmp.in b/backends/platform/symbian/S80/ScummVM_S80.mmp.in new file mode 100644 index 0000000000..6074439552 --- /dev/null +++ b/backends/platform/symbian/S80/ScummVM_S80.mmp.in @@ -0,0 +1,102 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC S80 MMP makefile project for ScummVM +// + +// *** Definitions + +#if defined(WINS) + TARGET ScummVM.dll +#else + TARGET ScummVM.exe +#endif +TARGETPATH system\apps\ScummVM +TARGETTYPE EXEDLL + +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +EPOCSTACKSIZE 0x00008000 +EPOCHEAPSIZE 1024 8192000 + +MACRO S80 + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +#if !defined(WINS) +STATICLIBRARY egcc.lib // for __fixunsdfsi +#endif + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\.. + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries + +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib apgrfx.lib +LIBRARY gdi.lib hal.lib bitgdi.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib bafl.lib + diff --git a/backends/platform/symbian/S80/ScummVM_S80_App.mmp b/backends/platform/symbian/S80/ScummVM_S80_App.mmp new file mode 100644 index 0000000000..09fa822bc7 --- /dev/null +++ b/backends/platform/symbian/S80/ScummVM_S80_App.mmp @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// MAKEFILE.MMP S80 ScummVM Launcher +// + +TARGET ScummVM.app +TARGETPATH system\apps\ScummVM +TARGETTYPE app + +UID 0x100039ce 0x101f9b57 +sourcepath ..\res +RESOURCE SCUMMVM.rss + +SOURCEPATH . +USERINCLUDE ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc + +// app source +sourcepath ..\src +SOURCE ScummVMApp.cpp + +sourcepath .. +AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp + +// libraries +LIBRARY cone.lib EIKCORE.lib +LIBRARY euser.lib apparc.lib +LIBRARY efsrv.lib apgrfx.lib diff --git a/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg new file mode 100644 index 0000000000..e48d37b08e --- /dev/null +++ b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg @@ -0,0 +1,27 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM S80"},(0x101f9b57),0,80,3 + +; Platform type -- disabled: seems to be causing trouble +;(0x101F8ED2), 0, 0, 0, {"Series80ProductID"} + +; Launcher, Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/S90/BLD.INF.in b/backends/platform/symbian/S90/BLD.INF.in new file mode 100644 index 0000000000..d6e1ece012 --- /dev/null +++ b/backends/platform/symbian/S90/BLD.INF.in @@ -0,0 +1,12 @@ +PRJ_PLATFORMS +WINS ARMI // ARM4 THUMB + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_S90.mmp +.\ScummVM_S90_App.mmp diff --git a/backends/platform/symbian/S90/Scummvm_S90.mmp.in b/backends/platform/symbian/S90/Scummvm_S90.mmp.in new file mode 100644 index 0000000000..2655a553a4 --- /dev/null +++ b/backends/platform/symbian/S90/Scummvm_S90.mmp.in @@ -0,0 +1,102 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC S90 MMP makefile project for ScummVM +// + +// *** Definitions + +#if defined(WINS) + TARGET ScummVM.dll +#else + TARGET ScummVM.exe +#endif +TARGETPATH system\apps\ScummVM +TARGETTYPE EXEDLL + +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +EPOCSTACKSIZE 0x00008000 +EPOCHEAPSIZE 1024 8192000 + +MACRO S90 + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +#if !defined(WINS) +STATICLIBRARY egcc.lib // for __fixunsdfsi +#endif + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\.. + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries + +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib apgrfx.lib +LIBRARY gdi.lib hal.lib bitgdi.lib bafl.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib + diff --git a/backends/platform/symbian/S90/Scummvm_S90_App.mmp b/backends/platform/symbian/S90/Scummvm_S90_App.mmp new file mode 100644 index 0000000000..62a045e146 --- /dev/null +++ b/backends/platform/symbian/S90/Scummvm_S90_App.mmp @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// MAKEFILE.MMP S90 ScummVM Launcher +// + +TARGET ScummVM.app +TARGETPATH system\apps\ScummVM +TARGETTYPE app + +UID 0x100039ce 0x101f9b57 +sourcepath ..\res +RESOURCE SCUMMVM.rss + +SOURCEPATH . +USERINCLUDE . +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc + +// app source +sourcepath ..\src +SOURCE ScummVMApp.cpp + +sourcepath .. +AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp + +// libraries +LIBRARY cone.lib EIKCORE.lib +LIBRARY euser.lib apparc.lib +LIBRARY efsrv.lib apgrfx.lib \ No newline at end of file diff --git a/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg new file mode 100644 index 0000000000..a913bd15ec --- /dev/null +++ b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg @@ -0,0 +1,27 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM S90"},(0x101f9b57),0,80,3 + +; Platform type -- disabled: seems to be causing trouble +;(0x101FBE04), 0, 0, 0, {"Series90ProductID"} + +; Launcher, Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/UIQ2/BLD.INF.in b/backends/platform/symbian/UIQ2/BLD.INF.in new file mode 100644 index 0000000000..b607446a64 --- /dev/null +++ b/backends/platform/symbian/UIQ2/BLD.INF.in @@ -0,0 +1,11 @@ +PRJ_PLATFORMS +WINS ARMI // ARM4 THUMB + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_UIQ2.mmp diff --git a/backends/platform/symbian/UIQ2/ScummVM.rss b/backends/platform/symbian/UIQ2/ScummVM.rss new file mode 100644 index 0000000000..a55fabfc51 --- /dev/null +++ b/backends/platform/symbian/UIQ2/ScummVM.rss @@ -0,0 +1,46 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +// ScummVM.RSS + +NAME SCUM + +// Include definitions of resource STRUCTS used by this +// resource script +#include +#include "..\src\Scummvm.hrh" +// Include the standard Eikon resource ids +#include + + +RESOURCE RSS_SIGNATURE + { + } + +RESOURCE TBUF16 { buf=""; } + +RESOURCE EIK_APP_INFO + { + } + diff --git a/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in new file mode 100644 index 0000000000..9b2e432b19 --- /dev/null +++ b/backends/platform/symbian/UIQ2/ScummVM_UIQ2.mmp.in @@ -0,0 +1,106 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC UIQ MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET SCUMMVM.APP +TARGETPATH system\apps\ScummVM +TARGETTYPE app + +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +RESOURCE ScummVM.rss +EPOCSTACKSIZE 0x80008000 // this enables ECompXL app compression +AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp +UID 0x100039ce 0x101f9b57 + +MACRO UIQ +MACRO EPOC_AS_APP + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +#if !defined(WINS) +STATICLIBRARY egcc.lib // for __fixunsdfsi +#endif + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\..\ + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries + +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib apgrfx.lib +LIBRARY gdi.lib hal.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib +LIBRARY qikctl.lib bafl.lib + +START WINS +WIN32_LIBRARY lldiv.obj llmul.obj llshl.obj +END + diff --git a/backends/platform/symbian/UIQ2/Vibration.sis b/backends/platform/symbian/UIQ2/Vibration.sis new file mode 100644 index 0000000000..7cd9d33f15 Binary files /dev/null and b/backends/platform/symbian/UIQ2/Vibration.sis differ diff --git a/backends/platform/symbian/UIQ2/chkstk.obj b/backends/platform/symbian/UIQ2/chkstk.obj new file mode 100644 index 0000000000..1df42b21c3 Binary files /dev/null and b/backends/platform/symbian/UIQ2/chkstk.obj differ diff --git a/backends/platform/symbian/UIQ2/lldiv.obj b/backends/platform/symbian/UIQ2/lldiv.obj new file mode 100644 index 0000000000..60d7c98660 Binary files /dev/null and b/backends/platform/symbian/UIQ2/lldiv.obj differ diff --git a/backends/platform/symbian/UIQ2/llmul.obj b/backends/platform/symbian/UIQ2/llmul.obj new file mode 100644 index 0000000000..c6416030a3 Binary files /dev/null and b/backends/platform/symbian/UIQ2/llmul.obj differ diff --git a/backends/platform/symbian/UIQ2/llshl.obj b/backends/platform/symbian/UIQ2/llshl.obj new file mode 100644 index 0000000000..30c5749d83 Binary files /dev/null and b/backends/platform/symbian/UIQ2/llshl.obj differ diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg new file mode 100644 index 0000000000..2ebf7580f9 --- /dev/null +++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg @@ -0,0 +1,26 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM UIQ2"},(0x101f9b57),0,80,3 + +; Platform type +(0x101F617B), 2, 0, 0, {"UIQ20ProductID"} + +; Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg new file mode 100644 index 0000000000..a07149b702 --- /dev/null +++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg @@ -0,0 +1,31 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + +; Languages +;&EN + +; UID is the app's UID +#{"ScummVM SE"},(0x101f9b57),0,80,3 + +; Platform type +(0x101F617B), 2, 0, 0, {"UIQ20ProductID"} + +; Application, AIF & Resource file +"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" +"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL +""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL +""-"!:\system\apps\ScummVM\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. + +; add extra Vibration lib for P800, will be ignored during all other installs +IF MachineUID = 0x101F408B +@"Vibration.sis", (0x101F94A3) +ENDIF \ No newline at end of file diff --git a/backends/platform/symbian/UIQ3/BLD.INF.in b/backends/platform/symbian/UIQ3/BLD.INF.in new file mode 100644 index 0000000000..9782901d6a --- /dev/null +++ b/backends/platform/symbian/UIQ3/BLD.INF.in @@ -0,0 +1,11 @@ +PRJ_PLATFORMS +WINS ARMI GCCE WINSCW THUMB + +PRJ_MMPFILES +//START_AUTO_PROJECTS// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_PROJECTS// + +.\ScummVM_UIQ3.mmp diff --git a/backends/platform/symbian/UIQ3/ScummVM.rss b/backends/platform/symbian/UIQ3/ScummVM.rss new file mode 100644 index 0000000000..9430f4a2ba --- /dev/null +++ b/backends/platform/symbian/UIQ3/ScummVM.rss @@ -0,0 +1,49 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id: ScummVM.rss,v 1.1 2006/06/01 19:00:29 anotherguest Exp $ + */ + +// ScummVM.RSS + +NAME SCUM + +// Include definitions of resource STRUCTS used by this +// resource script +#include +#include +#include "..\src\Scummvm.hrh" +// Include the standard Eikon resource ids +#include + + +RESOURCE RSS_SIGNATURE + { + } + +RESOURCE TBUF16 { buf=""; } + +RESOURCE EIK_APP_INFO + { + } + +#include + diff --git a/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in new file mode 100644 index 0000000000..170140848f --- /dev/null +++ b/backends/platform/symbian/UIQ3/ScummVM_UIQ3.mmp.in @@ -0,0 +1,125 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +// +// EPOC UIQ MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET SCUMMVM.exe +//TARGETPATH sys\bin +TARGETTYPE exe + +START RESOURCE ScummVM_reg.rss +TARGETPATH \private\10003a3f\apps +END + +START RESOURCE ScummVM_loc.rss +TARGETPATH \Resource\Apps +LANG SC +END + +SOURCEPATH . +START RESOURCE ScummVM.rss +HEADER +TARGETPATH \Resource\Apps +LANG SC +END + +EPOCSTACKSIZE 0x0000FFFF +EPOCHEAPSIZE 0xFA000 0xfA0000 + +START BITMAP ScummVM.mbm +TARGETPATH \Resource\Apps +SOURCEPATH ..\res +// Source Color-depth Source-bitmap-list +// c denotes whether the bitmap is a colour bitmap and the digits represent the +// colour-depth of the bitmap and the bitmap mask respectively +SOURCE c24 ScummSmall.bmp +SOURCE 8 ScummSmallMask.bmp +SOURCE c24 ScummLarge.bmp +SOURCE 8 ScummLargeMask.bmp +SOURCE c24 ScummxLarge.bmp +SOURCE 8 ScummxLargeMask.bmp +END +UID 0x100039ce 0xA0000657 + +MACRO UIQ +MACRO UIQ3 +MACRO EPOC_AS_APP + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** Static Libraries + +STATICLIBRARY esdl.lib + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\base + +//START_AUTO_OBJECTS_BASE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_BASE_// + +SOURCEPATH ..\..\..\ + +// backend EPOC/SDL/ESDL specific includes +SOURCE backends\sdl\events.cpp +SOURCE backends\sdl\graphics.cpp +SOURCE backends\sdl\sdl.cpp +SOURCE backends\fs\symbian\symbian-fs.cpp +SOURCE backends\symbian\src\SymbianOS.cpp +SOURCE backends\symbian\src\SymbianActions.cpp +SOURCE backends\symbian\src\ScummApp.cpp + +SOURCE gui\Key.cpp +SOURCE gui\KeysDialog.cpp +SOURCE gui\Actions.cpp + +// *** Dynamic Libraries + +LIBRARY cone.lib eikcore.lib +LIBRARY euser.lib apparc.lib fbscli.lib +LIBRARY estlib.lib apgrfx.lib +LIBRARY gdi.lib hal.lib bitgdi.lib +LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib +LIBRARY qikctl.lib +library qikcore.lib bafl.lib eikcoctl.lib \ No newline at end of file diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg new file mode 100644 index 0000000000..3a47591b0a --- /dev/null +++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg @@ -0,0 +1,33 @@ +;;; +;;; ScummVM .PKG file for .SIS gegeration +;;; + + +; List of localised vendor names - one per language. At least one must be provided (English [EN]). +; List must correspond to list of languages specified elsewhere in the .pkg +%{"ScummVM"} +; The non-localised, globally unique vendor name (mandatory) +:"ScummVM" + +; UID is the app's UID +#{"ScummVM UIQ3"},(0xA0000657),0,90,0 + +; ProductID for UIQ 3.0 +; Product/platform version UID, Major, Minor, Build, Product ID +(0x101F6300), 3, 0, 0, {"UIQ30ProductID"} + +; Application, AIF & Resource file +"\uiq3\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" +"\uiq3\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" +"\uiq3\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" +"\uiq3\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" +"\uiq3\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" + +; Config/log files: 'empty' will automagically be removed on uninstall +""-"c:\private\A0000657\scummvm.ini",FILENULL +""-"c:\private\A0000657\scummvm.stdout.txt",FILENULL +""-"c:\private\A0000657\scummvm.stderr.txt",FILENULL +""-"c:\private\A0000657\sdl.ini",FILENULL + +; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. +; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/platform/symbian/UIQ3/scummvm_loc.rss b/backends/platform/symbian/UIQ3/scummvm_loc.rss new file mode 100644 index 0000000000..1b068a1c2c --- /dev/null +++ b/backends/platform/symbian/UIQ3/scummvm_loc.rss @@ -0,0 +1,59 @@ +#include +#include + +// This file localise the applications icons and caption +RESOURCE LOCALISABLE_APP_INFO + { + caption_and_icon = + { + CAPTION_AND_ICON_INFO + { + // The caption text is defined in the rls file + caption = "ScummVM"; + // Icons are used to represent applications in the + // application launcher and application title bar. + // The number_of_icons value identifies how many icons + // that exist in the icon_file. + number_of_icons = 3; + // Using the application icons. + icon_file = "\\Resource\\Apps\\ScummVM.mbm"; + } + }; + + view_list = + { + VIEW_DATA + { + uid = 0x10000001; + screen_mode = 0; + caption_and_icon = CAPTION_AND_ICON_INFO + { + }; + }, + VIEW_DATA + { + uid = 0x10000001; + screen_mode = EQikScreenModeLandscape; + caption_and_icon = CAPTION_AND_ICON_INFO + { + }; + }, + VIEW_DATA + { + uid = 0x10000001; + screen_mode = EQikScreenModeSmallPortrait; + caption_and_icon = CAPTION_AND_ICON_INFO + { + }; + }, + VIEW_DATA + { + uid = 0x10000001; + screen_mode = EQikScreenModeSmallLandscape; + caption_and_icon = CAPTION_AND_ICON_INFO + { + }; + } + }; + } + diff --git a/backends/platform/symbian/UIQ3/scummvm_reg.rss b/backends/platform/symbian/UIQ3/scummvm_reg.rss new file mode 100644 index 0000000000..df99094b2e --- /dev/null +++ b/backends/platform/symbian/UIQ3/scummvm_reg.rss @@ -0,0 +1,18 @@ +// All registration files need to #include appinfo.rh. +#include + +// All registration files must define UID2, which is always +// KUidAppRegistrationResourceFile, and UID3, which is the application's UID. +UID2 KUidAppRegistrationResourceFile +UID3 0xA0000657 // application UID + +// Registration file need to containo an APP_REGISTRATION_INFO resource that +// minimally needs to provide the name of the application binary (using the +// app_file statement). +RESOURCE APP_REGISTRATION_INFO + { + app_file = "ScummVM"; // filename of application binary (minus extension) + // Specify the location of the localisable icon/caption definition file + localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc"; + } + diff --git a/backends/platform/symbian/mmp/scummvm_agi.mmp.in b/backends/platform/symbian/mmp/scummvm_agi.mmp.in new file mode 100644 index 0000000000..8dcc52f05d --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_agi.mmp.in @@ -0,0 +1,55 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_agi.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\agi + +//START_AUTO_OBJECTS_AGI_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_AGI_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in new file mode 100644 index 0000000000..3535621934 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -0,0 +1,111 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_base.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them! +//START_AUTO_MACROS_MASTER// + + // empty base file, will be updated by Perl build scripts + + // list of possible MACROs: (will be replaced when generating scummvm_base.mmp) + //MACRO USE_ZLIB // LIB:zlib.lib + //MACRO USE_MAD // LIB:libmad.lib + //MACRO USE_TREMOR // LIB:libtremor.lib + //MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib + //MACRO DISABLE_SCUMM_7_8 + //MACRO DISABLE_SCUMM_HE + //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib + //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib + //MACRO DISABLE_SKY // LIB:scummvm_sky.lib + //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib + //MACRO DISABLE_GOB // LIB:scummvm_gob.lib + //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib + //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib + //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib + //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib + //MACRO DISABLE_LURE // LIB:scummvm_lure.lib + //MACRO DISABLE_CINE // LIB:scummvm_cine.lib + //MACRO DISABLE_AGI // LIB:scummvm_cine.lib + +//STOP_AUTO_MACROS_MASTER// + +// *** Include paths + +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound +USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl + +SYSTEMINCLUDE \epoc32\include\ESDL +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include\tremor +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h + +// *** SOURCE files + +SOURCEPATH ..\..\..\common +//START_AUTO_OBJECTS_COMMON_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_COMMON_// + +SOURCEPATH ..\..\..\graphics +//START_AUTO_OBJECTS_GRAPHICS_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_GRAPHICS_// + +SOURCEPATH ..\..\..\gui +//START_AUTO_OBJECTS_GUI_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_GUI_// +// these next three will go into gui\modules.mk and will end up in START_AUTO_OBJECTS_GUI +// for now they are in the phone platform specific MMP files because of library dependency probs during linking +//SOURCE Key.cpp +//SOURCE KeysDialog.cpp +//SOURCE Actions.cpp + +SOURCEPATH ..\..\..\sound +//START_AUTO_OBJECTS_SOUND_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SOUND_// + +sourcepath ..\..\.. +// backend specific includes +SOURCE backends\fs\fs.cpp +// backend specific includes diff --git a/backends/platform/symbian/mmp/scummvm_cine.mmp.in b/backends/platform/symbian/mmp/scummvm_cine.mmp.in new file mode 100644 index 0000000000..8385d93a5a --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_cine.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM CINE +// + +// *** Definitions + +TARGET scummvm_CINE.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\cine + +//START_AUTO_OBJECTS_CINE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_CINE_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_gob.mmp.in b/backends/platform/symbian/mmp/scummvm_gob.mmp.in new file mode 100644 index 0000000000..a99d900da0 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_gob.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_gob.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\gob + +//START_AUTO_OBJECTS_GOB_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_GOB_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_kyra.mmp.in b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in new file mode 100644 index 0000000000..60703336ca --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_kyra.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM Kyra +// + +// *** Definitions + +TARGET scummvm_kyra.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\kyra + +//START_AUTO_OBJECTS_KYRA_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_KYRA_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_lure.mmp.in b/backends/platform/symbian/mmp/scummvm_lure.mmp.in new file mode 100644 index 0000000000..55445358bb --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_lure.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_lure.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\lure + +//START_AUTO_OBJECTS_LURE_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_LURE_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_queen.mmp.in b/backends/platform/symbian/mmp/scummvm_queen.mmp.in new file mode 100644 index 0000000000..c1b3c03a45 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_queen.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_queen.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\queen + +//START_AUTO_OBJECTS_QUEEN_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_QUEEN_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_saga.mmp.in b/backends/platform/symbian/mmp/scummvm_saga.mmp.in new file mode 100644 index 0000000000..8ee0afd197 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_saga.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM Saga +// + +// *** Definitions + +TARGET scummvm_saga.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\saga + +//START_AUTO_OBJECTS_SAGA_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SAGA_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_scumm.mmp.in b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in new file mode 100644 index 0000000000..fd9f6ccb6d --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_scumm.mmp.in @@ -0,0 +1,70 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_scumm.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\scumm + +//START_AUTO_OBJECTS_SCUMM_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SCUMM_// + +//START_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8// + +//START_AUTO_OBJECTS_SCUMM_DISABLE_HE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SCUMM_DISABLE_HE// + +// *** Include paths + +USERINCLUDE ..\..\..\engines ..\..\..\engines\scumm\smush ..\..\..\engines\scumm\insane +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src + +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include\libc +SYSTEMINCLUDE \epoc32\include +SYSTEMINCLUDE ..\src // for portdefs.h diff --git a/backends/platform/symbian/mmp/scummvm_simon.mmp.in b/backends/platform/symbian/mmp/scummvm_simon.mmp.in new file mode 100644 index 0000000000..4587392b20 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_simon.mmp.in @@ -0,0 +1,55 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_simon.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\simon + +//START_AUTO_OBJECTS_SIMON_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SIMON_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sky.mmp.in b/backends/platform/symbian/mmp/scummvm_sky.mmp.in new file mode 100644 index 0000000000..46097372a3 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_sky.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_sky.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\sky + +//START_AUTO_OBJECTS_SKY_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SKY_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines ..\..\..\engines\sky\music +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sword1.mmp.in b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in new file mode 100644 index 0000000000..3d6cf3f501 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_sword1.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_sword1.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\sword1 + +//START_AUTO_OBJECTS_SWORD1_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SWORD1_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/mmp/scummvm_sword2.mmp.in b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in new file mode 100644 index 0000000000..dbb0bce879 --- /dev/null +++ b/backends/platform/symbian/mmp/scummvm_sword2.mmp.in @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +// +// EPOC MMP makefile project for ScummVM +// + +// *** Definitions + +TARGET scummvm_sword2.lib +TARGETTYPE lib +OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp +OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings + +//START_AUTO_MACROS_SLAVE// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_MACROS_SLAVE// + +// *** SOURCE files + +SOURCEPATH ..\..\..\engines\sword2 + +//START_AUTO_OBJECTS_SWORD2_// + + // empty base file, will be updated by Perl build scripts + +//STOP_AUTO_OBJECTS_SWORD2_// + +// *** Include paths + +USERINCLUDE ..\..\..\engines +USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src +SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/platform/symbian/res/ScummS.bmp b/backends/platform/symbian/res/ScummS.bmp new file mode 100644 index 0000000000..065b0ce74e Binary files /dev/null and b/backends/platform/symbian/res/ScummS.bmp differ diff --git a/backends/platform/symbian/res/ScummSmall.bmp b/backends/platform/symbian/res/ScummSmall.bmp new file mode 100644 index 0000000000..ce8013ad2d Binary files /dev/null and b/backends/platform/symbian/res/ScummSmall.bmp differ diff --git a/backends/platform/symbian/res/ScummVmAif.rss b/backends/platform/symbian/res/ScummVmAif.rss new file mode 100644 index 0000000000..ad222e550b --- /dev/null +++ b/backends/platform/symbian/res/ScummVmAif.rss @@ -0,0 +1,43 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include + + +RESOURCE AIF_DATA + { + app_uid= 0x101f9b57; + // + hidden=KAppNotHidden; + embeddability=KAppNotEmbeddable; + caption_list= + { + CAPTION { code=ELangEnglish; caption="ScummVM"; }, + CAPTION { code=ELangAmerican; caption="ScummVM"; }, + CAPTION { code=ELangOther; caption="ScummVM"; } + }; + // + num_icons=2; + } + + + diff --git a/backends/platform/symbian/res/scummL.bmp b/backends/platform/symbian/res/scummL.bmp new file mode 100644 index 0000000000..a47f3c9da4 Binary files /dev/null and b/backends/platform/symbian/res/scummL.bmp differ diff --git a/backends/platform/symbian/res/scummLarge.bmp b/backends/platform/symbian/res/scummLarge.bmp new file mode 100644 index 0000000000..400dca6dcb Binary files /dev/null and b/backends/platform/symbian/res/scummLarge.bmp differ diff --git a/backends/platform/symbian/res/scummLargeMask.bmp b/backends/platform/symbian/res/scummLargeMask.bmp new file mode 100644 index 0000000000..c13a546122 Binary files /dev/null and b/backends/platform/symbian/res/scummLargeMask.bmp differ diff --git a/backends/platform/symbian/res/scummLm.bmp b/backends/platform/symbian/res/scummLm.bmp new file mode 100644 index 0000000000..2632b9111f Binary files /dev/null and b/backends/platform/symbian/res/scummLm.bmp differ diff --git a/backends/platform/symbian/res/scummSm.bmp b/backends/platform/symbian/res/scummSm.bmp new file mode 100644 index 0000000000..62957a8274 Binary files /dev/null and b/backends/platform/symbian/res/scummSm.bmp differ diff --git a/backends/platform/symbian/res/scummSmallMask.bmp b/backends/platform/symbian/res/scummSmallMask.bmp new file mode 100644 index 0000000000..b407894206 Binary files /dev/null and b/backends/platform/symbian/res/scummSmallMask.bmp differ diff --git a/backends/platform/symbian/res/scummvm.rss b/backends/platform/symbian/res/scummvm.rss new file mode 100644 index 0000000000..684e42f4e5 --- /dev/null +++ b/backends/platform/symbian/res/scummvm.rss @@ -0,0 +1,62 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + */ + +// ScummVM.RSS + +NAME SCUM + +// Include definitions of resource STRUCTS used by this +// resource script +#include +#include "..\src\Scummvm.hrh" +// Include the standard Eikon resource ids +#include + + +RESOURCE RSS_SIGNATURE + { + } + +RESOURCE TBUF16 { buf=""; } + +RESOURCE EIK_APP_INFO + { + menubar = r_scum_menubar; + } + +RESOURCE MENU_BAR r_scum_menubar // *** Menu bar +{ + titles = + { + MENU_TITLE { menu_pane = r_scum_menu; txt = "ScummVM"; } + }; +} + +RESOURCE MENU_PANE r_scum_menu // *** Submenu +{ + items = + { + + MENU_ITEM{command = EEikCmdExit;txt = "Exit";} + }; +} diff --git a/backends/platform/symbian/res/scummxLarge.bmp b/backends/platform/symbian/res/scummxLarge.bmp new file mode 100644 index 0000000000..cf590d17d4 Binary files /dev/null and b/backends/platform/symbian/res/scummxLarge.bmp differ diff --git a/backends/platform/symbian/res/scummxLargeMask.bmp b/backends/platform/symbian/res/scummxLargeMask.bmp new file mode 100644 index 0000000000..1c3de48e3e Binary files /dev/null and b/backends/platform/symbian/res/scummxLargeMask.bmp differ diff --git a/backends/platform/symbian/src/ScummApp.cpp b/backends/platform/symbian/src/ScummApp.cpp new file mode 100644 index 0000000000..4315c15065 --- /dev/null +++ b/backends/platform/symbian/src/ScummApp.cpp @@ -0,0 +1,119 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "backends/symbian/src/ScummApp.h" +#include "backends/symbian/src/ScummVM.hrh" + +#define _PAGESIZE_ 0x1000 + +#if defined (__WINS__) && !defined (__SERIES60_30__) && !defined (UIQ3) +extern "C" int _chkstk(int /*a*/) { +_asm { + push ecx + cmp eax,_PAGESIZE_ + lea ecx,[esp] + 8 + jb short lastpage + + probepages: + sub ecx,_PAGESIZE_ + sub eax,_PAGESIZE_ + + test dword ptr [ecx],eax + + cmp eax,_PAGESIZE_ + jae short probepages + + lastpage: + sub ecx,eax + mov eax,esp + + test dword ptr [ecx],eax + + mov esp,ecx + + mov ecx,dword ptr [eax] + mov eax,dword ptr [eax + 4] + + push eax + ret + } + return 1; +} +#endif + +#ifdef EPOC_AS_APP + +// this function is called automatically by the SymbianOS to deliver the new CApaApplication object +#if !defined (UIQ3) && !defined (S60V3) +EXPORT_C +#endif +CApaApplication* NewApplication() { + // Return pointer to newly created CQMApp + return new CScummApp; +} + +#if defined (UIQ3) || defined (S60V3) +#include +// E32Main() contains the program's start up code, the entry point for an EXE. +GLDEF_C TInt E32Main() { + return EikStart::RunApplication(NewApplication); +} +#endif + +#endif // EPOC_AS_APP + +#if !defined (UIQ3) && !defined (S60V3) +GLDEF_C TInt E32Dll(TDllReason) { + return KErrNone; +} +#endif + +CScummApp::CScummApp() { +} + +CScummApp::~CScummApp() { +} + +#if defined (UIQ3) +#include +/** + * Returns the resource id to be used to declare the views supported by this UIQ3 app + * @return TInt, resource id + */ +TInt CScummApp::ViewResourceId() { + return R_SDL_VIEW_UI_CONFIGURATIONS; +} +#endif + +/** + * Responsible for returning the unique UID of this application + * @return unique UID for this application in a TUid + **/ +TUid CScummApp::AppDllUid() const { + return TUid::Uid(ScummUid); +} + +///////////////////////////////////////////////////////////////////////////////////////////////// + + diff --git a/backends/platform/symbian/src/ScummApp.h b/backends/platform/symbian/src/ScummApp.h new file mode 100644 index 0000000000..bd81edaa83 --- /dev/null +++ b/backends/platform/symbian/src/ScummApp.h @@ -0,0 +1,54 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef ScummAPPH +#define ScummAPPH + +#include +#include +#include + +#if defined (EPOC_AS_APP) && !defined (UIQ3) && !defined (S60V3) +#include "ECompXL.h" +#endif + +class CScummApp : public CSDLApp { +public: + CScummApp(); + ~CScummApp(); +#if defined (UIQ3) + /** + * Returns the resource id to be used to declare the views supported by this UIQ3 app + * @return TInt, resource id + */ + TInt ViewResourceId(); +#endif + TUid AppDllUid() const; +#if defined (EPOC_AS_APP) && !defined (UIQ3) && !defined (S60V3) + TECompXL iECompXL; +#endif +}; +#endif + + diff --git a/backends/platform/symbian/src/ScummVMApp.cpp b/backends/platform/symbian/src/ScummVMApp.cpp new file mode 100644 index 0000000000..e30cb62e87 --- /dev/null +++ b/backends/platform/symbian/src/ScummVMApp.cpp @@ -0,0 +1,170 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "ScummVMapp.h" +#include +#include +#include +#include + +EXPORT_C CApaApplication *NewApplication() { + return (new CScummVM); +} + +CScummVM::CScummVM() { +} + +CScummVM::~CScummVM() { +} + +CApaDocument *CScummVM::CreateDocumentL() { + return new (ELeave)CScummVMDoc(*this); +} + +TUid CScummVM::AppDllUid() const { + return TUid::Uid(0x101f9b57); +} + +CScummVMDoc::CScummVMDoc(CEikApplication &aApp) : CEikDocument(aApp) { +} + +CScummVMDoc::~CScummVMDoc() { +} + +CEikAppUi *CScummVMDoc::CreateAppUiL() { + return new (ELeave)CScummVMUi; +} + +void CScummVMUi::HandleForegroundEventL(TBool aForeground) { + if(aForeground) { + BringUpEmulatorL(); + } +} + +CScummVMUi::CScummVMUi() { +} + +CScummVMUi::~CScummVMUi() { + if(iWatcher) { + iThreadWatch.LogonCancel(iWatcher->iStatus); + iWatcher->Cancel(); + } + + delete iWatcher; + + iThreadWatch.Close(); +} + +void CScummVMUi::ConstructL() { + BaseConstructL(); + TBuf<128> startFile; + startFile = iEikonEnv->EikAppUi()->Application()->AppFullName(); + TParse parser; + parser.Set(startFile,NULL,NULL); + + startFile = parser.DriveAndPath(); +#ifndef __WINS__ + startFile.Append( _L("ScummVM.exe")); +#else + startFile.Append( _L("ScummVM.dll")); +#endif + CApaCommandLine *cmdLine = CApaCommandLine::NewLC(startFile); + RApaLsSession lsSession; + + lsSession.Connect(); + CleanupClosePushL(lsSession); + lsSession.StartApp(*cmdLine, iThreadId); + + CleanupStack::PopAndDestroy();//close lsSession + CleanupStack::PopAndDestroy(cmdLine); + + User::After(500000);// Let the application start + + TApaTaskList taskList(iEikonEnv->WsSession()); + + TApaTask myTask = taskList.FindApp(TUid::Uid(0x101f9b57)); + myTask.SendToBackground(); + + TApaTask exeTask = taskList.FindByPos(0); + + iExeWgId=exeTask.WgId(); + exeTask.BringToForeground(); + + if(iExeWgId == myTask.WgId()) { // Should n't be the same + Exit(); + } + if(iThreadWatch.Open(iThreadId) == KErrNone) { + iWatcher = new (ELeave)CScummWatcher; + iWatcher->iAppUi = this; + iThreadWatch.Logon(iWatcher->iStatus); + } +} + +CScummWatcher::CScummWatcher() : CActive(EPriorityStandard) { + CActiveScheduler::Add(this); + + iStatus = KRequestPending; + SetActive(); +} + +CScummWatcher::~CScummWatcher() { +} + +void CScummWatcher::DoCancel() { +} + +void CScummWatcher::RunL() { + iAppUi->HandleCommandL(EEikCmdExit); +} + +void CScummVMUi::BringUpEmulatorL() { + RThread thread; + + if(thread.Open(iThreadId) == KErrNone) { + thread.Close(); + TApaTask apaTask(iEikonEnv->WsSession()); + apaTask.SetWgId(iExeWgId); + apaTask.BringToForeground(); + } else { + iExeWgId = -1; + Exit(); + } +} + +void CScummVMUi::HandleCommandL(TInt aCommand) { + switch(aCommand) { + case EEikCmdExit: + { + RThread thread; + if(thread.Open(iThreadId) == KErrNone) { + thread.Terminate(0); + thread.Close(); + } + Exit(); + } + break; + } +} + +GLDEF_C TInt E32Dll(TDllReason) { + return KErrNone; +} diff --git a/backends/platform/symbian/src/ScummVMApp.h b/backends/platform/symbian/src/ScummVMApp.h new file mode 100644 index 0000000000..0c422ad178 --- /dev/null +++ b/backends/platform/symbian/src/ScummVMApp.h @@ -0,0 +1,82 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ScummVMapph +#define ScummVMapph + +#include +#include +#include +#include +#include +#include + +class CScummVM : public CEikApplication { +public: + CScummVM(); + ~CScummVM(); + + CApaDocument *CreateDocumentL(); + TUid AppDllUid() const; +}; + + +#include + +class CScummVMDoc : public CEikDocument { +public: + CScummVMDoc(CEikApplication &aApplicaiton); + ~CScummVMDoc(); + + CEikAppUi *CreateAppUiL(); + void ConstructL(); +}; + +#include +class CScummVMUi; +class CScummWatcher : public CActive { +public: + CScummWatcher(); + ~CScummWatcher(); + + void DoCancel(); + void RunL(); + CScummVMUi *iAppUi; +}; + +class CScummVMUi : public CEikAppUi { +public: + CScummVMUi(); + ~CScummVMUi(); + + void ConstructL(); + void HandleCommandL(TInt aCommand); + void HandleForegroundEventL(TBool aForeground); + void BringUpEmulatorL(); + +private: + TThreadId iThreadId; + TInt iExeWgId; + RThread iThreadWatch; + CScummWatcher *iWatcher; +}; +#endif diff --git a/backends/platform/symbian/src/ScummVm.hrh b/backends/platform/symbian/src/ScummVm.hrh new file mode 100644 index 0000000000..4966b41e0b --- /dev/null +++ b/backends/platform/symbian/src/ScummVm.hrh @@ -0,0 +1,30 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef ScummHRH +#define ScummHRH +#if defined (UIQ3) || defined (S60V3) +#define ScummUid 0xA0000657 +#else +#define ScummUid 0x101f9b57 +#endif +#endif diff --git a/backends/platform/symbian/src/SymbianActions.cpp b/backends/platform/symbian/src/SymbianActions.cpp new file mode 100644 index 0000000000..ff85266af5 --- /dev/null +++ b/backends/platform/symbian/src/SymbianActions.cpp @@ -0,0 +1,189 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "backends/symbian/src/SymbianActions.h" + +#include "gui/message.h" +#include "scumm/scumm.h" +#include "common/config-manager.h" + +#include + +namespace GUI { + +// SumthinWicked says: we either split our Actions like WinCE did with Pocket/Smartphone +// or we put them in this file separated by #ifdefs, this one is up to you, AnotherGuest :) + +const Common::String actionNames[] = { + "Up", + "Down", + "Left", + "Right", + "Left Click", + "Right Click", + "Save", + "Skip", + "Zone", + "FT Cheat", + "Swap character", + "Skip text", + "Pause", + "Quit" +}; + +#ifdef UIQ +static const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, SDLK_F1, SDLK_F2, SDLK_F5, SDLK_PAGEDOWN, 0, 0, 0, SDLK_PAGEUP, 0, 0}; +#elif defined (S60) +const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, 0, 0, '*', '#', '9',0,0,0,0,0}; +#elif defined (S90) +const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, 0, 0, SDLK_MENU, SDLK_ESCAPE, 0, 0,0,0,0,0}; +#else +const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_MENU, SDLK_ESCAPE, 0, 0, 0, 0, 0, 0}; +#endif + +// creator function according to Factory Pattern +void SymbianActions::init() { + _instance = new SymbianActions(); +} + + +Common::String SymbianActions::actionName(ActionType action) { + return actionNames[action]; +} + +int SymbianActions::size() { + return ACTION_LAST; +} + +Common::String SymbianActions::domain() { + return Common::ConfigManager::kApplicationDomain; +} + +int SymbianActions::version() { + return ACTION_VERSION; +} + +SymbianActions::SymbianActions() + : Actions() { + int i; + + for (i = 0; i < ACTION_LAST; i++) { + _action_mapping[i] = ACTIONS_DEFAULT[i]; + _action_enabled[i] = false; + } + +} + +void SymbianActions::initInstanceMain(OSystem *mainSystem) { + Actions::initInstanceMain(mainSystem); + + // Mouse Up + _action_enabled[ACTION_UP] = true; + + // Mouse Down + _action_enabled[ACTION_DOWN] = true; + + // Mouse Left + _action_enabled[ACTION_LEFT] = true; + + // Mouse Right + _action_enabled[ACTION_RIGHT] = true; + + // Left Click + _action_enabled[ACTION_LEFTCLICK] = true; + + // Right Click + _action_enabled[ACTION_RIGHTCLICK] = true; + + // Skip + _action_enabled[ACTION_SKIP] = true; + _key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE); +} + +void SymbianActions::initInstanceGame() { + Common::String gameid(ConfMan.get("gameid")); + bool is_simon = (strncmp(gameid.c_str(), "simon", 5) == 0); + bool is_sky = (strncmp(gameid.c_str(), "sky", 3) == 0); + bool is_queen = (strncmp(gameid.c_str(), "queen", 5) == 0); + bool is_gob = (strncmp(gameid.c_str(), "gob", 3) == 0); + bool is_ite = ((strncmp(gameid.c_str(), "ite", 3) == 0) || + (strncmp(gameid.c_str(), "ihnm", 4) == 0)); + + Actions::initInstanceGame(); + + // See if a right click mapping could be needed + if (is_sky || gameid == "samnmax" || is_gob) + _right_click_needed = true; + + // Initialize keys for different actions + // Save + if (is_simon || is_gob) + _action_enabled[ACTION_SAVE] = false; + else if (is_queen || is_ite) { + _action_enabled[ACTION_SAVE] = true; + _key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ and ITE + } else if (is_sky) { + _action_enabled[ACTION_SAVE] = true; + _key_action[ACTION_SAVE].setAscii(63); + } else { + _action_enabled[ACTION_SAVE] = true; + _key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key + } + + // Swap character + _action_enabled[ACTION_SWAPCHAR] = true; + _key_action[ACTION_SWAPCHAR].setAscii('b'); // b + + // Zone + _action_enabled[ACTION_ZONE] = true; + + // FT Cheat + _action_enabled[ACTION_FT_CHEAT] = true; + _key_action[ACTION_FT_CHEAT].setAscii(86); // shift-V + + // Skip text + _action_enabled[ACTION_SKIP_TEXT] = true; + if (is_queen) { + _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE); + } else { + _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD); + } + + // Pause + _key_action[ACTION_PAUSE].setAscii(' '); + _action_enabled[ACTION_PAUSE] = true; + + // Quit + _action_enabled[ACTION_QUIT] = true; +} + + +SymbianActions::~SymbianActions() { +} + +bool SymbianActions::perform(ActionType /*action*/, bool /*pushed*/) { + + return false; +} + +} // namespace GUI diff --git a/backends/platform/symbian/src/SymbianActions.h b/backends/platform/symbian/src/SymbianActions.h new file mode 100644 index 0000000000..5f435d5912 --- /dev/null +++ b/backends/platform/symbian/src/SymbianActions.h @@ -0,0 +1,77 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2006 The ScummVM project + * + * This program 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. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef SYMBIANACTIONS_H +#define SYMBIANACTIONS_H + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "gui/Key.h" +#include "gui/Actions.h" + +namespace GUI { + +#define ACTION_VERSION 6 + +enum actionType { + ACTION_UP = 0, + ACTION_DOWN, + ACTION_LEFT, + ACTION_RIGHT, + ACTION_LEFTCLICK, + ACTION_RIGHTCLICK, + ACTION_SAVE, + ACTION_SKIP, + ACTION_ZONE, + ACTION_FT_CHEAT, + ACTION_SWAPCHAR, + ACTION_SKIP_TEXT, + ACTION_PAUSE, + ACTION_QUIT, + ACTION_LAST +}; + +class SymbianActions : public Actions { +public: + // Actions + bool perform(ActionType action, bool pushed = true); + Common::String actionName(ActionType action); + int size(); + static void init(); + void initInstanceMain(OSystem *mainSystem); + void initInstanceGame(); + + // Action domain + Common::String domain(); + int version(); + + ~SymbianActions(); + +private: + SymbianActions(); + bool _right_click_needed; +}; + +} // namespace GUI + +#endif diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp new file mode 100644 index 0000000000..b0b4486418 --- /dev/null +++ b/backends/platform/symbian/src/SymbianOS.cpp @@ -0,0 +1,419 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "backends/symbian/src/SymbianOS.h" +#include "backends/symbian/src/SymbianActions.h" +#include "common/config-manager.h" +#include "gui/Actions.h" +#include "gui/Key.h" +#include "gui/message.h" + +#include // for CEikonEnv::Static() @ Symbian::FatalError() +#include "ESDL/sdlapp.h" // for CSDLApp::GetExecutablePathCStr() @ Symbian::GetExecutablePath() + +////////// extern "C" /////////////////////////////////////////////////// + +extern Common::ConfigManager *g_config; + +namespace Symbian { + +// Show a simple Symbian Info win with Msg & exit +void FatalError(const char *msg) { + TPtrC8 msgPtr((const TUint8 *)msg); + TBuf<512> msg16Bit; + msg16Bit.Copy(msgPtr); + CEikonEnv::Static()->InfoWinL(_L("ScummVM Fatal Error"), msg16Bit); + + if (g_system) + g_system->quit(); +} + +// make this easily available everywhere +char* GetExecutablePath() +{ + return CSDLApp::GetExecutablePathCStr(); +} + +} // namespace Symbian { + +////////// OSystem_SDL_Symbian ////////////////////////////////////////// + +static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { + {"1x", "Fullscreen", GFX_NORMAL}, + {0, 0, 0} +}; + +bool OSystem_SDL_Symbian::hasFeature(Feature f) { + switch(f) { + case kFeatureFullscreenMode: + case kFeatureAspectRatioCorrection: + case kFeatureAutoComputeDirtyRects: + case kFeatureCursorHasPalette: +#ifdef USE_VIBRA_SE_PXXX + case kFeatureVibration: +#endif + return true; + + default: + return false; + } +} + +OSystem_SDL_Symbian::zoneDesc OSystem_SDL_Symbian::_zones[TOTAL_ZONES] = { + { 0, 0, 320, 145 }, + { 0, 145, 150, 55 }, + { 150, 145, 170, 55 } +}; +OSystem_SDL_Symbian::OSystem_SDL_Symbian() :_channels(0),_stereo_mix_buffer(0) { +} + +void OSystem_SDL_Symbian::initBackend() { + ConfMan.setBool("FM_high_quality", false); +#if !defined(S60) || defined(S60V3) // S60 has low quality as default + ConfMan.setBool("FM_medium_quality", true); +#else + ConfMan.setBool("FM_medium_quality", false); +#endif + ConfMan.setInt("joystick_num", 0); // Symbian OS should have joystick_num set to 0 in the ini file , but uiq devices might refuse opening the joystick + ConfMan.flushToDisk(); + + GUI::Actions::init(); + + OSystem_SDL::initBackend(); + + // Initialize global key mapping for Smartphones + GUI::Actions* actions = GUI::Actions::Instance(); + + actions->initInstanceMain(this); + actions->loadMapping(); + initZones(); +} + +OSystem_SDL_Symbian::~OSystem_SDL_Symbian() { + delete []_stereo_mix_buffer; +} + +int OSystem_SDL_Symbian::getDefaultGraphicsMode() const { + return GFX_NORMAL; +} + +const OSystem::GraphicsMode *OSystem_SDL_Symbian::getSupportedGraphicsModes() const { + return s_supportedGraphicsModes; +} + +// make sure we always go to normal, even if the string might be set wrong! +bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) { + // let parent OSystem_SDL handle it + return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode()); +} + +void OSystem_SDL_Symbian::quitWithErrorMsg(const char *msg) { + + CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ; + + if (g_system) + g_system->quit(); +} + +/* + * SumthinWicked says: the stuff below is copied from common/scaler.cpp, + * so we can skip compiling the scalers. ESDL still needs 1x and the scaler + * architecture because we inherit from OSystem_SDL. + */ +int gBitFormat = 565; +void InitScalers(uint32 /*BitFormat*/) {} // called by OSystem_SDL functions, not relevant for ESDL + +/** + * Trivial 'scaler' - in fact it doesn't do any scaling but just copies the + * source to the destination. + */ +void Normal1x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, + int width, int height) { + while (height--) { + memcpy(dstPtr, srcPtr, 2 * width); + srcPtr += srcPitch; + dstPtr += dstPitch; + } +} + +bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) { + + // First save the proc and param + _sound_proc_param = param; + _sound_proc = proc; + SDL_AudioSpec desired; + SDL_AudioSpec obtained; + + memset(&desired, 0, sizeof(desired)); + + _samplesPerSec = 0; + + if (ConfMan.hasKey("output_rate")) + _samplesPerSec = ConfMan.getInt("output_rate"); + + if (_samplesPerSec <= 0) + _samplesPerSec = SAMPLES_PER_SEC; + + // Originally, we always used 2048 samples. This loop will produce the + // same result at 22050 Hz, and should hopefully produce something + // sensible for other frequencies. Note that it must be a power of two. + + uint32 samples = 0x8000; + + for (;;) { + if ((1000 * samples) / _samplesPerSec < 100) + break; + samples >>= 1; + } + + desired.freq = _samplesPerSec; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = (uint16)samples; +#ifdef S60 + desired.callback = symbianMixCallback; + desired.userdata = this; +#else + desired.callback = proc; + desired.userdata = param; +#endif + if (SDL_OpenAudio(&desired, &obtained) != 0) { + warning("Could not open audio device: %s", SDL_GetError()); + return false; + } + // Note: This should be the obtained output rate, but it seems that at + // least on some platforms SDL will lie and claim it did get the rate + // even if it didn't. Probably only happens for "weird" rates, though. + _samplesPerSec = obtained.freq; + _channels = obtained.channels; + + // Need to create mixbuffer for stereo mix to downmix + if(_channels != 2) { + _stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values + } + + SDL_PauseAudio(0); + return true; +} + +/** + * The mixer callback function, passed on to OSystem::setSoundCallback(). + * This simply calls the mix() method. + */ +void OSystem_SDL_Symbian::symbianMixCallback(void *s, byte *samples, int len) { + static_cast (s)->symbianMix(samples,len); +} + + +/** + * Actual mixing implementation + */ +void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) { + // If not stereo then we need to downmix + if (_channels != 2) { + _sound_proc(_sound_proc_param, _stereo_mix_buffer, len * 2); + int16 *bitmixDst = (int16 *)samples; + int16 *bitmixSrc = (int16 *)_stereo_mix_buffer; + + for (int loop = len / 2; loop >= 0; loop --) { + *bitmixDst = (*bitmixSrc + *(bitmixSrc + 1)) >> 1; + bitmixDst++; + bitmixSrc += 2; + } + } else + _sound_proc(_sound_proc_param, samples, len); +} + +/** + * This is an implementation by the remapKey function + * @param SDL_Event to remap + * @param ScumVM event to modify if special result is requested + * @return true if Event has a valid return status + */ +bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Event &event) { + if (GUI::Actions::Instance()->mappingActive() || ev.key.keysym.sym <= SDLK_UNKNOWN) + return false; + + for (TInt loop = 0; loop < GUI::ACTION_LAST; loop++) { + if (GUI::Actions::Instance()->getMapping(loop) == ev.key.keysym.sym && + GUI::Actions::Instance()->isEnabled(loop)) { + // Create proper event instead + switch(loop) { + case GUI::ACTION_UP: + if (ev.type == SDL_KEYDOWN) { + _km.y_vel = -1; + _km.y_down_count = 1; + } else { + _km.y_vel = 0; + _km.y_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_DOWN: + if(ev.type == SDL_KEYDOWN) { + _km.y_vel = 1; + _km.y_down_count = 1; + } else { + _km.y_vel = 0; + _km.y_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_LEFT: + if(ev.type == SDL_KEYDOWN) { + _km.x_vel = -1; + _km.x_down_count = 1; + } else { + _km.x_vel = 0; + _km.x_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_RIGHT: + if(ev.type == SDL_KEYDOWN) { + _km.x_vel = 1; + _km.x_down_count = 1; + } else { + _km.x_vel = 0; + _km.x_down_count = 0; + } + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_LEFTCLICK: + event.type = (ev.type == SDL_KEYDOWN ? EVENT_LBUTTONDOWN : EVENT_LBUTTONUP); + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_RIGHTCLICK: + event.type = (ev.type == SDL_KEYDOWN ? EVENT_RBUTTONDOWN : EVENT_RBUTTONUP); + fillMouseEvent(event, _km.x, _km.y); + + return true; + + case GUI::ACTION_ZONE: + if(ev.type == SDL_KEYDOWN) { + int i; + + for (i=0; i < TOTAL_ZONES; i++) + if (_km.x >= _zones[i].x && _km.y >= _zones[i].y && + _km.x <= _zones[i].x + _zones[i].width && _km.y <= _zones[i].y + _zones[i].height + ) { + _mouseXZone[i] = _km.x; + _mouseYZone[i] = _km.y; + break; + } + _currentZone++; + if (_currentZone >= TOTAL_ZONES) + _currentZone = 0; + event.type = EVENT_MOUSEMOVE; + fillMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]); + SDL_WarpMouse(event.mouse.x, event.mouse.y); + } + + return true; + + case GUI::ACTION_SAVE: + case GUI::ACTION_SKIP: + case GUI::ACTION_FT_CHEAT: + case GUI::ACTION_SKIP_TEXT: + case GUI::ACTION_PAUSE: + { + GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop); + ev.key.keysym.sym = (SDLKey)key.ascii(); + ev.key.keysym.scancode= key.keycode(); + ev.key.keysym.mod = (SDLMod)key.flags(); + + return false; + } + + case GUI::ACTION_QUIT: + { + GUI::MessageDialog alert("Do you want to quit ?", "Yes", "No"); + if (alert.runModal() == GUI::kMessageOK) + quit(); + + return true; + } + } + } + } + + return false; +} + +void OSystem_SDL_Symbian::setWindowCaption(const char *caption) { + OSystem_SDL::setWindowCaption(caption); + check_mappings(); +} + +void OSystem_SDL_Symbian::check_mappings() { + if (ConfMan.get("gameid").empty() || GUI::Actions::Instance()->initialized()) + return; + + GUI::Actions::Instance()->initInstanceGame(); +} + +void OSystem_SDL_Symbian::initZones() { + int i; + + _currentZone = 0; + + for (i = 0; i < TOTAL_ZONES; i++) { + _mouseXZone[i] = (_zones[i].x + (_zones[i].width / 2)); + _mouseYZone[i] = (_zones[i].y + (_zones[i].height / 2)); + } +} + + +/** Vibration support */ +#ifdef USE_VIBRA_SE_PXXX +void OSystem_SDL_Symbian::initializeVibration() { + _vibrationApi = SonyEricsson::CVibration::NewL(); +} + +void OSystem_SDL_Symbian::vibrationOn(int vibraLength) { + // initialize? + if (!_vibrationApi) _vibrationApi = SonyEricsson::CVibration::NewL(); + // do it! + _vibrationApi->VibrationOn(1, 1, vibraLength); +} + +void OSystem_SDL_Symbian::vibrationOff() { + _vibrationApi->VibrationOff(); +} +#endif // USE_SE_PXX_VIBRA + diff --git a/backends/platform/symbian/src/SymbianOS.h b/backends/platform/symbian/src/SymbianOS.h new file mode 100644 index 0000000000..955f59c59c --- /dev/null +++ b/backends/platform/symbian/src/SymbianOS.h @@ -0,0 +1,139 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef SDLSYMBIANH +#define SDLSYMBIANH + +#include "backends/platform/sdl/sdl-common.h" + +/** Vibration support */ +#ifdef USE_VIBRA_SE_PXXX +#include +#endif + +#define TOTAL_ZONES 3 + +class OSystem_SDL_Symbian : public OSystem_SDL { +public: + OSystem_SDL_Symbian(); + virtual ~OSystem_SDL_Symbian(); + +public: + /** + * The following method is called once, from main.cpp, after all + * config data (including command line params etc.) are fully loaded. + */ + virtual void initBackend(); + + int getDefaultGraphicsMode() const; + const OSystem::GraphicsMode *getSupportedGraphicsModes() const; + bool setGraphicsMode(const char *name); + void quitWithErrorMsg(const char *msg); + virtual bool hasFeature(Feature f); + + // Set function that generates samples + // + // This function is overridden by the symbian port in order to provide MONO audio + // downmix is done by supplying our own audiocallback + // + virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend + +protected: + // + // The mixer callback function, passed on to OSystem::setSoundCallback(). + // This simply calls the mix() method. + // and then does downmixing for symbian if needed + // + static void symbianMixCallback(void *s, byte *samples, int len); + + // + // Actual mixing implementation + // + void symbianMix(byte *samples, int len); + +public: + // vibration support +#ifdef USE_VIBRA_SE_PXXX + // + // Intialize the vibration api used if present and supported + // + void initializeVibration(); + + // + // Turn vibration on, repeat no time + // @param vibraLength number of repetitions + // + void vibrationOn(int vibraLength); + + // + // Turns the vibration off + // + void vibrationOff(); + +protected: + SonyEricsson::CVibration* _vibrationApi; +#endif // USE_VIBRA_SE_PXXX + +protected: + + // + // This is an implementation by the remapKey function + // @param SDL_Event to remap + // @param ScumVM event to modify if special result is requested + // @return true if Event has a valid return status + // + bool remapKey(SDL_Event &ev, Event &event); + + void setWindowCaption(const char *caption); + + // + // Used to intialized special game mappings + // + void check_mappings(); + + void initZones(); + + // Audio + int _channels; + + SoundProc _sound_proc; + void *_sound_proc_param; + byte *_stereo_mix_buffer; + + // Used to handle joystick navi zones + int _mouseXZone[TOTAL_ZONES]; + int _mouseYZone[TOTAL_ZONES]; + int _currentZone; + + typedef struct zoneDesc { + int x; + int y; + int width; + int height; + } zoneDesc; + + static zoneDesc _zones[TOTAL_ZONES]; +}; + +#endif diff --git a/backends/platform/symbian/src/main_features.inl b/backends/platform/symbian/src/main_features.inl new file mode 100644 index 0000000000..2e0b008e68 --- /dev/null +++ b/backends/platform/symbian/src/main_features.inl @@ -0,0 +1,66 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifdef USE_VIBRA_SE_PXXX + "Vibra " +#endif + "\n" + +// we want a list of supported engines visible in the program, +// because we also release special builds with only one engine +#ifndef DISABLE_SCUMM + "SCUMM " +#endif +#ifndef DISABLE_SIMON + "Simon " +#endif +#ifndef DISABLE_SKY + "Sky " +#endif +#ifndef DISABLE_QUEEN + "Queen " +#endif +#ifndef DISABLE_GOB + "Gob " +#endif +#ifndef DISABLE_SAGA + "Saga " +#endif +#ifndef DISABLE_KYRA + "Kyra " +#endif +#ifndef DISABLE_SWORD1 + "Sword1 " +#endif +#ifndef DISABLE_SWORD2 + "Sword2 " +#endif +#ifndef DISABLE_CINE + "Cine " +#endif +#ifndef DISABLE_LURE + "Lure " +#endif +#ifndef DISABLE_AGI + "AGI " +#endif + diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h new file mode 100644 index 0000000000..303fde726d --- /dev/null +++ b/backends/platform/symbian/src/portdefs.h @@ -0,0 +1,148 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL + * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System + * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer + * Copyright (C) 2005-2006 The ScummVM project + * + * This program 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define DISABLE_SCALERS // we only need 1x + +#if defined(USE_TREMOR) && !defined(USE_VORBIS) +#define USE_VORBIS // make sure this one is defined together with USE_TREMOR! +#endif + +// hack in some tricks to work around not having these fcns for Symbian +// and we _really_ don't wanna link with any other windows LIBC library! +#if defined(__GCC32__) + + #define snprintf(buf,len,args...) sprintf(buf,args) + #define vsnprintf(buf,len,format,valist) vsprintf(buf,format,valist) + + // taken from public domain http://www.opensource.apple.com/darwinsource/WWDC2004/gcc_legacy-939/gcc/floatlib.c + #define SIGNBIT 0x80000000 + #define HIDDEN (1 << 23) + #define EXCESSD 1022 + #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF) + #define SIGND(fp) ((fp.l.upper) & SIGNBIT) + #define HIDDEND_LL ((long long)1 << 52) + #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL) + + union double_long { + double d; + struct { + long upper; + unsigned long lower; + } l; + long long ll; + }; + + /* convert double float to double int (dfdi) */ + long long inline + scumm_fixdfdi (double a1) { // __fixdfdi (double a1) + register union double_long dl1; + register int exp; + register long long l; + + dl1.d = a1; + + if (!dl1.l.upper && !dl1.l.lower) + return (0); + + exp = EXPD (dl1) - EXCESSD - 64; + l = MANTD_LL(dl1); + + if (exp > 0) { + l = (long long)1<<63; + if (!SIGND(dl1)) + l--; + return l; + } + + /* shift down until exp = 0 or l = 0 */ + if (exp < 0 && exp > -64 && l) + l >>= -exp; + else + return (0); + + return (SIGND (dl1) ? -l : l); + } + + /* okay, okay: I admit it: I absolutely have _NO_ idea why __fixdfdi does not get linked in by gcc from libgcc.a + because I know it's in there: I checked with `ar x _fixdfdi.o libgcc.a` and the symbol is in there, so I'm lost + and had to fix it this way. I tried all gcc and ld options I could find: no hope :( If someone can enlighten me: + feel free to let me know at sumthinwicked@users.sf.net! Much obliged. + PS1. I think for __fixunsdfdi they have made a circumvention by having to add STATICLIBRARY EGCC.LIB + PS2. http://gcc.gnu.org/ml/gcc-bugs/2004-01/msg01596.html might have found out the same problem there + */ + +#elif defined (__WINS__) // WINS + + // let's just blatantly ignore this for now and just get it to work :P but does n't work from the debug function + int inline scumm_snprintf (char *str, unsigned long /*n*/, char const *fmt, ...) { + va_list args; + va_start(args, fmt); + vsprintf(str, fmt, args); + va_end(args); + return strlen(str); + } + + int inline scumm_vsnprintf (char *str, unsigned long /*n*/, char const *fmt, va_list valist) { + vsprintf(str, fmt, valist); + return strlen(str); + } + + #define snprintf scumm_snprintf + #define vsnprintf scumm_vsnprintf +#else // GCCE and the rest + #define snprintf(buf,len,args...) sprintf(buf,args) + #define vsnprintf(buf,len,format,valist) vsprintf(buf,format,valist) +#endif + +// somehow nobody has this function... +#define hypot(a, b) sqrt((a)*(a) + (b)*(b)) + +// Symbian bsearch implementation is flawed +void inline *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { + size_t i; + + for (i=0; i < nmemb; i++) + if (compar(key, (void *)((size_t)base + size * i)) == 0) + return (void *)((size_t)base + size * i); + return NULL; +} +#define bsearch scumm_bsearch + +// we cannot include SymbianOS.h everywhere, but this works too (functions code is in SymbianOS.cpp) +namespace Symbian { +extern void FatalError(const char *msg); +extern char* GetExecutablePath(); +} diff --git a/backends/ps2/DmaPipe.cpp b/backends/ps2/DmaPipe.cpp deleted file mode 100644 index 7f3a372234..0000000000 --- a/backends/ps2/DmaPipe.cpp +++ /dev/null @@ -1,301 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -// minimalistic gfx pipe implementation based on Vzzrzzn's GfxPipe. - -#include -#include -#include "DmaPipe.h" -#include "GsDefs.h" - -class SinglePipe { -public: - SinglePipe(uint64 *buf, uint32 size); - uint32 spaceLeft(void); - void flush(void); - void setGifRegListTag(uint8 numRegs, uint64 list); - void setGifLoopTag(uint16 nLoop); - void setReg(uint64 reg, uint64 value); - void setListReg(uint64 value1, uint64 value2); - void appendChain(uint64 dmaTag); - void init(void); - uint64 *_chainHead; -private: - uint64 *_bufPos; - uint16 *_chainSize; - uint64 *_buf; - uint32 _size; -}; - -DmaPipe::DmaPipe(uint32 size) { - size &= ~0x1F; - _buf = (uint64*)memalign(64, size); - _curPipe = 0; - _pipes[0] = new SinglePipe(_buf, size >> 4); - _pipes[1] = new SinglePipe(_buf + (size >> 4), size >> 4); - - // reset DMAC Channel 2 - D2_CHCR = 0; - D2_TADR = 0; - D2_MADR = 0; - D2_ASR1 = 0; - D2_ASR0 = 0; - D_STAT = 0xFF1F; - D_CTRL = 0; - D_PCR = 0; - D_SQWC = 0; - D_RBOR = 0; - D_RBSR = 0; - D_CTRL = 1; - if (!(D_STAT & CIM2)) // channel 2 interrupts enabled? - D_STAT = CIM2; // enable them - if (D_STAT & CIS2) // is there an old interrupt we have to acknowledge? - D_STAT = CIS2; // do so... - SifSetDChain(); -} - -void DmaPipe::uploadTex(uint32 dest, uint16 bufWidth, uint16 destOfsX, uint16 destOfsY, uint8 pixelFmt, const void *src, uint16 width, uint16 height) { - - checkSpace(5); - *(_pipes[_curPipe]->_chainHead) &= 0xffffffff8fffffff; // change last chain tag id, from 'end' to 'cnt' - *(_pipes[_curPipe]->_chainHead) |= (1 << 28); - _pipes[_curPipe]->setGifLoopTag(4); - _pipes[_curPipe]->setReg(GPR_BITBLTBUF, GS_SET_DEST_BLTBUF((dest/256) & 0x3fff, (bufWidth/64) & 0x3f, pixelFmt & 0x3f)); - _pipes[_curPipe]->setReg( GPR_TRXPOS, GS_SET_DEST_TRXPOS(destOfsX, destOfsY)); - _pipes[_curPipe]->setReg( GPR_TRXREG, GS_SET_TRXREG(width, height)); - _pipes[_curPipe]->setReg( GPR_TRXDIR, 0); - - checkSpace(15); - uint32 numq = width * height; - switch (pixelFmt) { - case GS_PSMCT32: - numq = (numq + 3) >> 2; break; - case GS_PSMCT24: - numq = (numq + 2) / 3; break; - case GS_PSMCT16: - case GS_PSMCT16S: - numq = (numq + 7) >> 3; break; - case GS_PSMT8: - case GS_PSMT8H: - numq = (numq + 15) >> 4; break; - case GS_PSMT4HL: - case GS_PSMT4HH: - case GS_PSMT4: - numq = (numq + 31) >> 5; break; - default: - numq = 0; - } - uint64 texSrc = (uint32)src & 0x7fffffff; - while (numq) { - uint64 sendQuads = (numq <= 0x7FF0) ? numq : 0x7FF0; - _pipes[_curPipe]->appendChain((1 << 28) | 1); - _pipes[_curPipe]->appendChain(0x0800000000000000 + sendQuads); // IMAGE mode giftag. Flg = 10b, nloop = currq - _pipes[_curPipe]->appendChain((texSrc << 32) | 0x0000000030000000 | sendQuads); // set up dma tag for image transfer. next = tex addr, id = 11b, qwc = numq - numq -= sendQuads; - texSrc += sendQuads * 16; - } - _pipes[_curPipe]->appendChain(0x0000000070000000); // next dma tag - _pipes[_curPipe]->setGifLoopTag(1); - _pipes[_curPipe]->setReg(GPR_TEXFLUSH, 1); -} - -void DmaPipe::setTex(uint32 tex, uint32 texBufWidth, uint8 texPowW, uint8 texPowH, uint8 texPixFmt, uint32 clut, uint8 csm, uint32 clutBufWidth, uint32 clutPixFmt) { - checkSpace(7); - _pipes[_curPipe]->setGifLoopTag(6); - _pipes[_curPipe]->setReg( GPR_TEXCLUT, 256 / 64); - _pipes[_curPipe]->setReg(GPR_TEXFLUSH, 0); - _pipes[_curPipe]->setReg( GPR_TEXA, GS_SET_TEXA(128, 1, 0)); - _pipes[_curPipe]->setReg( GPR_TEX1_1, GS_SET_TEX1(0, 0, FILTER_LINEAR, FILTER_LINEAR, 0, 0, 0)); - _pipes[_curPipe]->setReg( GPR_TEX0_1, GS_SET_TEX0(tex / 256, texBufWidth / 64, texPixFmt, texPowW, texPowH, 1, 0, clut / 256, clutBufWidth / 64, csm, 0, 1)); - _pipes[_curPipe]->setReg( GPR_CLAMP_1, 0); -} - -void DmaPipe::textureRect(const GsVertex *p1, const GsVertex *p2, const TexVertex *t1, const TexVertex *t2) { - checkSpace(4); - _pipes[_curPipe]->setGifRegListTag( 6, 0xffffffffff535310); - _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_SPRITE, 0, 1, 0, 1, 0, 1, 0, 0), - GS_SET_COLQ(GS_RGBA(0x80, 0x80, 0x80, 0x80))); - _pipes[_curPipe]->setListReg( GS_SET_UV(t1->u, t1->v), - GS_SET_XYZ(p1->x, p1->y, p1->z)); - _pipes[_curPipe]->setListReg( GS_SET_UV(t2->u, t2->v), - GS_SET_XYZ(p2->x, p2->y, p2->z)); -} - -void DmaPipe::textureRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, const TexVertex *t1, const TexVertex *t2, const TexVertex *t3, const TexVertex *t4, uint32 rgba) { - checkSpace(6); - _pipes[_curPipe]->setGifRegListTag(10, 0xffffff5353535310); - - _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_TRIANGLESTRIP, 0, 1, 0, 1, 0, 1, 0, 0), - GS_SET_COLQ(rgba)); - _pipes[_curPipe]->setListReg( GS_SET_UV(t1->u, t1->v), - GS_SET_XYZ(p1->x, p1->y, p1->z)); - _pipes[_curPipe]->setListReg( GS_SET_UV(t2->u, t2->v), - GS_SET_XYZ(p2->x, p2->y, p2->z)); - _pipes[_curPipe]->setListReg( GS_SET_UV(t3->u, t3->v), - GS_SET_XYZ(p3->x, p3->y, p3->z)); - _pipes[_curPipe]->setListReg( GS_SET_UV(t4->u, t4->v), - GS_SET_XYZ(p4->x, p4->y, p4->z)); -} - -void DmaPipe::flatRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, uint32 rgba) { - checkSpace(4); - _pipes[_curPipe]->setGifRegListTag( 6, 0xffffffffff555510); - _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_TRIANGLESTRIP, 0, 0, 0, 0, 0, 0, 0, 0), - GS_SET_COLQ(rgba)); - _pipes[_curPipe]->setListReg( GS_SET_XYZ(p1->x, p1->y, p1->z), - GS_SET_XYZ(p2->x, p2->y, p2->z)); - _pipes[_curPipe]->setListReg( GS_SET_XYZ(p3->x, p3->y, p3->z), - GS_SET_XYZ(p4->x, p4->y, p4->z)); -} - -void DmaPipe::flatRect(const GsVertex *p1, const GsVertex *p2, uint32 rgba) { - checkSpace(3); - _pipes[_curPipe]->setGifRegListTag( 4, 0xffffffffffff5510); - _pipes[_curPipe]->setListReg( GS_SET_PRIM(PR_SPRITE, 0, 0, 0, 1, 0, 0, 0, 0), - GS_SET_COLQ(rgba)); - _pipes[_curPipe]->setListReg( GS_SET_XYZ(p1->x, p1->y, p1->z), - GS_SET_XYZ(p2->x, p2->y, p2->z)); -} - -void DmaPipe::setOrigin(uint16 x, uint16 y) { - checkSpace(2); - _pipes[_curPipe]->setGifLoopTag(1); - _pipes[_curPipe]->setReg( GPR_XYOFFSET_1, GS_SET_XYOFFSET(x, y)); -} - -void DmaPipe::setAlphaBlend(AlphaBlendColor a, AlphaBlendColor b, AlphaBlendAlpha c, AlphaBlendColor d, uint8 fix) { - checkSpace(2); - _pipes[_curPipe]->setGifLoopTag(1); - _pipes[_curPipe]->setReg(GPR_ALPHA_1, GS_SET_ALPHA(a, b, c, d, fix)); -} - -void DmaPipe::setConfig(uint8 prModeCont, uint8 dither, uint8 colClamp) { - checkSpace(9); - _pipes[_curPipe]->setGifLoopTag(8); - - // set some defaults - // alpha blending formula: (A-B) * C + D - // set: A = dest pixel, b = 0, C = source alpha, D = source pixel, fix = don't care - - _pipes[_curPipe]->setReg(GPR_ALPHA_1, GS_SET_ALPHA(DEST_COLOR, ZERO_COLOR, SOURCE_ALPHA, SOURCE_COLOR, 0)); - _pipes[_curPipe]->setReg( GPR_PRIM, 0); - _pipes[_curPipe]->setReg( GPR_PABE, 0); // alpha blending off - _pipes[_curPipe]->setReg( GPR_TEST_1, GS_SET_TEST(0, 0, 0, 0, 0, 0, 1, 1)); // ztest off - _pipes[_curPipe]->setReg( GPR_ZBUF_1, (uint64)1 << 32); // zbuffer off - - _pipes[_curPipe]->setReg( GPR_PRMODECONT, prModeCont & 1); - _pipes[_curPipe]->setReg( GPR_DTHE, dither & 1); - _pipes[_curPipe]->setReg( GPR_COLCLAMP, colClamp & 1); -} - -void DmaPipe::setScissorRect(uint64 x1, uint64 y1, uint64 x2, uint64 y2) { - checkSpace(2); - _pipes[_curPipe]->setGifLoopTag(1); - _pipes[_curPipe]->setReg( GPR_SCISSOR_1, GS_SET_SCISSOR(x1, x2, y1, y2)); -} - -void DmaPipe::setDrawBuffer(uint64 base, uint64 width, uint8 pixelFmt, uint64 mask) { - checkSpace(2); - _pipes[_curPipe]->setGifLoopTag(1); - _pipes[_curPipe]->setReg( GPR_FRAME_1, GS_SET_FRAME(base / 8192, width / 64, pixelFmt, mask)); -} - -void DmaPipe::setFinishEvent(void) { - checkSpace(3); - // make GS generate a FINISH interrupt when it's done. - _pipes[_curPipe]->setGifLoopTag(2); - _pipes[_curPipe]->setReg( GPR_FINISH, 1); - _pipes[_curPipe]->setReg( GPR_SIGNAL, 1); -} - -void DmaPipe::checkSpace(uint32 needed) { - if (_pipes[_curPipe]->spaceLeft() < (needed << 1)) - flush(); -} - -void DmaPipe::waitForDma(void) { - while (D2_CHCR & 0x100) {} -} - -void DmaPipe::flush(void) { - waitForDma(); - FlushCache(0); - _pipes[_curPipe]->flush(); - _curPipe ^= 1; - _pipes[_curPipe]->init(); -} - -SinglePipe::SinglePipe(uint64 *buf, uint32 size) { - _buf = buf; - _size = size; - init(); -} - -void SinglePipe::flush(void) { - D2_TADR = (uint32)_buf; - D2_QWC = 0; - D2_CHCR |= 0x185; -} - -void SinglePipe::init(void) { - _buf[0] = 0x0000000070000000; - _buf[1] = 0; - _chainHead = _buf; - _chainSize = (uint16*)_chainHead; - _bufPos = _buf + 2; -} - -uint32 SinglePipe::spaceLeft(void) { - return (_size - (_bufPos - _buf)); -} - -void SinglePipe::appendChain(uint64 dmaTag) { - _chainHead = _bufPos; - _chainHead[0] = dmaTag; - _chainHead[1] = 0; - _chainSize = (uint16*)_chainHead; - _bufPos += 2; -} - -void SinglePipe::setReg(uint64 reg, uint64 value) { - *_bufPos++ = value; - *_bufPos++ = reg; - (*_chainSize)++; -} - -void SinglePipe::setListReg(uint64 value1, uint64 value2) { - *_bufPos++ = value1; - *_bufPos++ = value2; - (*_chainSize)++; -} - -void SinglePipe::setGifRegListTag(uint8 numRegs, uint64 list) { - *_bufPos++ = GIF_SET_TAG(1, 1, 0, 0, 1, 0) | ((uint64)numRegs << 60); - *_bufPos++ = list; - (*_chainSize)++; -} - -void SinglePipe::setGifLoopTag(uint16 nLoop) { - *_bufPos++ = GIF_SET_TAG(0, 1, 0, 0, 0, 1) | nLoop; - *_bufPos++ = 0xfffffffffffffffe; - (*_chainSize)++; -} diff --git a/backends/ps2/DmaPipe.h b/backends/ps2/DmaPipe.h deleted file mode 100644 index 5cbef0d9ff..0000000000 --- a/backends/ps2/DmaPipe.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -// minimalistic gfx pipe implementation based on Vzzrzzn's GfxPipe. - -#ifndef __DMAPIPE_H__ -#define __DMAPIPE_H__ - -#include "sysdefs.h" -#include "backends/ps2/GsDefs.h" - -class SinglePipe; - -struct GsVertex { - uint16 x, y, z; -}; - -struct TexVertex { - uint16 u, v; -}; - -class DmaPipe { -public: - DmaPipe(uint32 size); - void uploadTex(uint32 dest, uint16 bufWidth, uint16 destOfsX, uint16 destOfsY, uint8 pixelFmt, const void *src, uint16 width, uint16 height); - void setTex(uint32 tex, uint32 texBufWidth, uint8 texPowW, uint8 texPowH, uint8 texPixFmt, uint32 clut, uint8 csm, uint32 clutBufWidth, uint32 clutPixFmt); - void setDrawBuffer(uint64 base, uint64 width, uint8 pixelFmt, uint64 mask); - void textureRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, const TexVertex *t1, const TexVertex *t2, const TexVertex *t3, const TexVertex *t4, uint32 rgba); - void textureRect(const GsVertex *p1, const GsVertex *p2, const TexVertex *t1, const TexVertex *t2); - void flatRect(const GsVertex *p1, const GsVertex *p2, const GsVertex *p3, const GsVertex *p4, uint32 rgba); - void flatRect(const GsVertex *p1, const GsVertex *p2, uint32 rgba); - - void setOrigin(uint16 x, uint16 y); - void setConfig(uint8 prModeCont, uint8 dither, uint8 colClamp); - void setScissorRect(uint64 x1, uint64 y1, uint64 x2, uint64 y2); - void setAlphaBlend(AlphaBlendColor a, AlphaBlendColor b, AlphaBlendAlpha c, AlphaBlendColor d, uint8 fix); - void setFinishEvent(void); - void flush(void); - void waitForDma(void); -private: - void checkSpace(uint32 needed); - uint64 *_buf; - uint8 _curPipe; - SinglePipe *_pipes[2]; -}; - -#endif //__DMAPIPE_H__ - diff --git a/backends/ps2/Gs2dScreen.cpp b/backends/ps2/Gs2dScreen.cpp deleted file mode 100644 index 7cf82ae5a0..0000000000 --- a/backends/ps2/Gs2dScreen.cpp +++ /dev/null @@ -1,751 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "Gs2dScreen.h" -#include -#include -#include -#include -#include -#include -#include "DmaPipe.h" -#include "GsDefs.h" -#include "graphics/surface.h" - -extern void *_gp; - -enum Buffers { - SCREEN = 0, - MOUSE, - TEXT, - PRINTF -}; - -#define ANIM_STACK_SIZE (1024 * 32) - -#define DEFAULT_PAL_X 175 -#define DEFAULT_PAL_Y 60 -#define DEFAULT_NTSC_X 165 -#define DEFAULT_NTSC_Y 45 -#define ORG_X 256 -#define ORG_Y 256 -#define ORIGIN_X (ORG_X << 4) -#define ORIGIN_Y (ORG_Y << 4) -#define TEX_POW 10 - -#define SCALE(x) ((x) << 4) - -#define M_SIZE 128 -#define M_POW 7 - -static volatile uint32 g_VblankCmd = 0, g_DmacCmd = 0; -static int g_VblankSema, g_DmacSema, g_AnimSema; -static bool g_RunAnim = false; -static GsVertex kFullScreen[2]; -static TexVertex kMouseTex[2] = { - { SCALE(1), SCALE(1) }, - { SCALE(M_SIZE - 1), SCALE(M_SIZE - 1) } -}; -static TexVertex kPrintTex[2] = { - { SCALE(1), SCALE(1) }, - { SCALE(320), SCALE(200) } -}; - -void sioprintf(const char *zFormat, ...); -void runAnimThread(Gs2dScreen *param); - -int vblankStartHandler(int cause) { - // start of VBlank period - if (g_VblankCmd) { // is there a new image waiting? - GS_DISPFB1 = g_VblankCmd; // show it. - g_VblankCmd = 0; - iSignalSema(g_VblankSema); - } - return 0; -} - -int dmacHandler(int channel) { - if (g_DmacCmd && (channel == 2)) { // GS DMA transfer finished, - g_VblankCmd = g_DmacCmd; // we want to show the image - g_DmacCmd = 0; // when the next vblank occurs - iSignalSema(g_DmacSema); - } - return 0; -} - -int vblankEndHandler(int cause) { - if (g_RunAnim) - iSignalSema(g_AnimSema); - return 0; -} - -void createAnimThread(Gs2dScreen *screen); - -Gs2dScreen::Gs2dScreen(uint16 width, uint16 height, TVMode tvMode) { - - _systemQuit = false; - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - g_VblankSema = CreateSema(&newSema); - g_DmacSema = CreateSema(&newSema); - _screenSema = CreateSema(&newSema); - newSema.init_count = 0; - newSema.max_count = 255; - g_AnimSema = CreateSema(&newSema); - assert((g_VblankSema >= 0) && (g_DmacSema >= 0) && (_screenSema >= 0) && (g_AnimSema >= 0)); - - _vblankStartId = AddIntcHandler(INT_VBLANK_START, vblankStartHandler, 0); - _vblankEndId = AddIntcHandler(INT_VBLANK_END, vblankEndHandler, 0); - _dmacId = AddDmacHandler(2, dmacHandler, 0); - - _dmaPipe = new DmaPipe(0x2000); - - EnableIntc(INT_VBLANK_START); - EnableIntc(INT_VBLANK_END); - EnableDmac(2); - - _width = width; - _height = height; - _pitch = (width + 127) & ~127; - - _screenBuf = (uint8*)memalign(64, _width * _height); - _overlayBuf = (uint16*)memalign(64, _width * _height * 2); - _clut = (uint32*)memalign(64, 256 * 4); - - memset(_screenBuf, 0, _width * _height); - memset(_clut, 0, 256 * sizeof(uint32)); - _clut[1] = GS_RGBA(0xC0, 0xC0, 0xC0, 0); - clearOverlay(); - - if (tvMode == TV_DONT_CARE) { - if (PAL_NTSC_FLAG == 'E') - _videoMode = TV_PAL; - else - _videoMode = TV_NTSC; - } else - _videoMode = tvMode; - - printf("Setting up %s mode\n", (_videoMode == TV_PAL) ? "PAL" : "NTSC"); - - // set screen size, 640x544 for pal, 640x448 for ntsc - _tvWidth = 640; - _tvHeight = ((_videoMode == TV_PAL) ? 544 : 448); - kFullScreen[0].z = kFullScreen[1].z = 0; - kFullScreen[0].x = ORIGIN_X; - kFullScreen[0].y = ORIGIN_Y; - kFullScreen[1].x = SCALE(_tvWidth) + ORIGIN_X; - kFullScreen[1].y = SCALE(_tvHeight) + ORIGIN_Y; - _blitCoords[0] = kFullScreen[0]; - _blitCoords[1] = kFullScreen[1]; - _texCoords[0].u = SCALE(1); - _texCoords[0].v = SCALE(1); - _texCoords[1].u = SCALE(_width); - _texCoords[1].v = SCALE(_height); - - uint32 tvFrameSize = _tvWidth * _tvHeight * 4; // 32 bits per pixel - - // setup frame buffer pointers - _frameBufPtr[0] = 0; - _frameBufPtr[1] = tvFrameSize; - _clutPtrs[SCREEN] = tvFrameSize * 2; - _clutPtrs[MOUSE] = _clutPtrs[SCREEN] + 0x1000; // the cluts in PSMCT32 take up half a memory page each - _clutPtrs[TEXT] = _clutPtrs[SCREEN] + 0x2000; - _texPtrs[SCREEN] = _clutPtrs[SCREEN] + 0x3000; - _texPtrs[TEXT] = 0; // these buffers are stored in the alpha gaps of the frame buffers - _texPtrs[MOUSE] = 128 * 256 * 4; - _texPtrs[PRINTF] = _texPtrs[MOUSE] + M_SIZE * M_SIZE * 4; - - _showOverlay = false; - _showMouse = false; - _mouseScaleX = (_tvWidth << 8) / _width; - _mouseScaleY = (_tvHeight << 8) / _height; - setMouseXy(_width / 2, _height / 2); - _mTraCol = 255; - _shakePos = 0; - - // setup hardware now. - GS_CSR = CSR_RESET; // Reset GS - asm ("sync.p"); - GS_CSR = 0; - GsPutIMR(0x7F00); - - uint16 dispPosX, dispPosY; - - if (_videoMode == TV_PAL) { - SetGsCrt(GS_INTERLACED, 3, 0); - dispPosX = DEFAULT_PAL_X; - dispPosY = DEFAULT_PAL_Y; - } else { - SetGsCrt(GS_INTERLACED, 2, 0); - dispPosX = DEFAULT_NTSC_X; - dispPosY = DEFAULT_NTSC_Y; - } - - asm("di"); - GS_PMODE = GS_SET_PMODE(1, 0, 1, 1, 0, 255); - GS_BGCOLOUR = GS_RGBA(0, 0, 0, 0); - GS_DISPLAY1 = GS_SET_DISPLAY(_tvWidth, _tvHeight, dispPosX, dispPosY); - asm("ei"); - - _curDrawBuf = 0; - - _dmaPipe->setOrigin(ORIGIN_X, ORIGIN_Y); - _dmaPipe->setConfig(1, 0, 1); - _dmaPipe->setScissorRect(0, 0, _tvWidth - 1, _tvHeight - 1); - _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); - _dmaPipe->flush(); - - _clutChanged = _screenChanged = _overlayChanged = true; - - clearPrintfOverlay(); - updateScreen(); - - createAnimTextures(); - - // create anim thread - ee_thread_t animThread, thisThread; - ReferThreadStatus(GetThreadId(), &thisThread); - - _animStack = malloc(ANIM_STACK_SIZE); - animThread.initial_priority = thisThread.current_priority - 3; - animThread.stack = _animStack; - animThread.stack_size = ANIM_STACK_SIZE; - animThread.func = (void *)runAnimThread; - animThread.gp_reg = &_gp; - - _animTid = CreateThread(&animThread); - assert(_animTid >= 0); - StartThread(_animTid, this); -} - -void Gs2dScreen::quit(void) { - _systemQuit = true; - ee_thread_t statAnim; - do { // wait until thread called ExitThread() - SignalSema(g_AnimSema); - ReferThreadStatus(_animTid, &statAnim); - } while (statAnim.status != 0x10); - DeleteThread(_animTid); - free(_animStack); - _dmaPipe->waitForDma(); // wait for dmac and vblank for the last time - while (g_DmacCmd || g_VblankCmd); - - sioprintf("kill handlers"); - DisableIntc(INT_VBLANK_START); - DisableIntc(INT_VBLANK_END); - DisableDmac(2); - RemoveIntcHandler(INT_VBLANK_START, _vblankStartId); - RemoveIntcHandler(INT_VBLANK_END, _vblankEndId); - RemoveDmacHandler(2, _dmacId); - - DeleteSema(g_VblankSema); - DeleteSema(g_DmacSema); - DeleteSema(g_AnimSema); -} - -void Gs2dScreen::createAnimTextures(void) { - uint8 *buf = (uint8*)memalign(64, 16 * 64); - memset(buf, 0, 16 * 64); - uint32 vramDest = _texPtrs[TEXT]; - for (int i = 0; i < 16; i++) { - uint32 *destPos = (uint32*)buf; - for (int ch = 15; ch >= 0; ch--) { - uint32 *src = (uint32*)(_binaryData + ((_binaryPattern[i] >> ch) & 1) * 4 * 14); - for (int line = 0; line < 14; line++) - destPos[line << 4] = src[line]; - destPos++; - } - if (!(i & 1)) - _dmaPipe->uploadTex( vramDest, 128, 0, 0, GS_PSMT4HH, buf, 128, 16); - else { - _dmaPipe->uploadTex( vramDest, 128, 0, 0, GS_PSMT4HL, buf, 128, 16); - vramDest += 128 * 16 * 4; - } - _dmaPipe->flush(); - _dmaPipe->waitForDma(); - } - _dmaPipe->uploadTex(_clutPtrs[TEXT], 64, 0, 0, GS_PSMCT32, _binaryClut, 8, 2); - _dmaPipe->flush(); - free(buf); -} - -void Gs2dScreen::newScreenSize(uint16 width, uint16 height) { - if ((width == _width) && (height == _height)) - return; - - WaitSema(g_DmacSema); - WaitSema(g_VblankSema); - - _dmaPipe->flush(); - _width = width; - _height = height; - _pitch = (width + 127) & ~127; - - // malloc new buffers - free(_screenBuf); - free(_overlayBuf); - _screenBuf = (uint8*)memalign(64, _width * _height); - _overlayBuf = (uint16*)memalign(64, _width * _height * 2); - memset(_screenBuf, 0, _width * height); - memset(_overlayBuf, 0, _width * height * 2); - memset(_clut, 0, 256 * sizeof(uint32)); - - // clear video ram - _dmaPipe->uploadTex(_clutPtrs[MOUSE], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); - _dmaPipe->uploadTex(_clutPtrs[SCREEN], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); - _dmaPipe->uploadTex(_texPtrs[SCREEN], _width, 0, 0, GS_PSMCT16, _overlayBuf, _width, _height); - _dmaPipe->flush(); - _dmaPipe->waitForDma(); - - _clutChanged = _screenChanged = _overlayChanged = false; - - _texCoords[1].u = SCALE(_width); - _texCoords[1].v = SCALE(_height); - _mouseScaleX = (_tvWidth << 8) / _width; - _mouseScaleY = (_tvHeight << 8) / _height; - setMouseXy(_width / 2, _height / 2); - - SignalSema(g_VblankSema); - SignalSema(g_DmacSema); -} - -void Gs2dScreen::copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h) { - if (x < 0) { - w += x; - buf -= x; - x = 0; - } - if (y < 0) { - h += y; - buf -= y * pitch; - y = 0; - } - if (x + w > _width) - w = (int)_width - x; - if (y + h > _height) - h = (int)_height - y; - - if ((w > 0) && (h > 0)) { - WaitSema(g_DmacSema); - uint8 *dest = _screenBuf + y * _width + x; - if ((w == pitch) && (pitch == _width)) - memcpy(dest, buf, w * h); - else - for (int cnt = 0; cnt < h; cnt++) { - memcpy(dest, buf, w); - buf += pitch; - dest += _width; - } - _screenChanged = true; - SignalSema(g_DmacSema); - } -} - -void Gs2dScreen::clearScreen(void) { - WaitSema(g_DmacSema); - memset(_screenBuf, 0, _width * _height); - _screenChanged = true; - SignalSema(g_DmacSema); -} - -void Gs2dScreen::setPalette(const uint32 *pal, uint8 start, uint16 num) { - assert(start + num <= 256); - - WaitSema(g_DmacSema); - for (uint16 cnt = 0; cnt < num; cnt++) { - uint16 dest = start + cnt; - dest = (dest & 0xE7) | ((dest & 0x8) << 1) | ((dest & 0x10) >> 1); // rearrange like the GS expects it - _clut[dest] = pal[cnt] & 0xFFFFFF; - } - _clutChanged = true; - SignalSema(g_DmacSema); -} - -void Gs2dScreen::grabPalette(uint32 *pal, uint8 start, uint16 num) { - assert(start + num <= 256); - for (uint16 cnt = 0; cnt < num; cnt++) { - uint16 src = start + cnt; - src = (src & 0xE7) | ((src & 0x8) << 1) | ((src & 0x10) >> 1); - pal[cnt] = _clut[src]; - } -} - -void Gs2dScreen::grabScreen(Graphics::Surface *surf) { - assert(surf); - WaitSema(g_DmacSema); - surf->create(_width, _height, 1); - memcpy(surf->pixels, _screenBuf, _width * _height); - SignalSema(g_DmacSema); -} - -void Gs2dScreen::uploadToVram(void) { - if (_clutChanged) { - _clutChanged = false; - uint32 tmp = _clut[_mTraCol]; - _clut[_mTraCol] = GS_RGBA(0, 0, 0, 0x80); // this mouse color is transparent - _dmaPipe->uploadTex(_clutPtrs[MOUSE], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); - _dmaPipe->flush(); - _dmaPipe->waitForDma(); - _clut[_mTraCol] = tmp; - - _dmaPipe->uploadTex(_clutPtrs[SCREEN], 64, 0, 0, GS_PSMCT32, _clut, 16, 16); - } - - if (_showOverlay) { - if (_overlayChanged) { - _dmaPipe->uploadTex(_texPtrs[SCREEN], _width, 0, 0, GS_PSMCT16, _overlayBuf, _width, _height); - _overlayChanged = false; - } - } else { - if (_screenChanged) { - _dmaPipe->uploadTex(_texPtrs[SCREEN], _pitch, 0, 0, GS_PSMT8, _screenBuf, _width, _height); - _screenChanged = false; - } - } -} - -extern "C" void _ps2sdk_alloc_lock(void); -extern "C" void _ps2sdk_alloc_unlock(void); - -void Gs2dScreen::updateScreen(void) { - WaitSema(_screenSema); - uploadToVram(); - if (!g_RunAnim) { - _dmaPipe->flatRect(kFullScreen + 0, kFullScreen + 1, GS_RGBA(0, 0, 0, 0)); // clear screen - - if (_showOverlay) { - _dmaPipe->setTex(_texPtrs[SCREEN], _width, TEX_POW, TEX_POW, GS_PSMCT16, 0, 0, 0, 0); - _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, _texCoords + 0, _texCoords + 1); - } else { - _dmaPipe->setTex(_texPtrs[SCREEN], _pitch, TEX_POW, TEX_POW, GS_PSMT8, _clutPtrs[SCREEN], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(_blitCoords + 0, _blitCoords + 1, _texCoords + 0, _texCoords + 1); - } - - if (_showMouse) { - GsVertex mouseCoords[2]; - mouseCoords[0].x = (((_mouseX - _hotSpotX) * _mouseScaleX + 8) >> 4) + ORIGIN_X; - mouseCoords[0].y = (((_mouseY - _hotSpotY) * _mouseScaleY + 8) >> 4) + ORIGIN_Y; - mouseCoords[1].x = mouseCoords[0].x + (((M_SIZE * _mouseScaleX) + 8) >> 4); - mouseCoords[1].y = mouseCoords[0].y + (((M_SIZE * _mouseScaleY) + 8) >> 4); - mouseCoords[0].z = mouseCoords[1].z = 0; - - _dmaPipe->setTex(_texPtrs[MOUSE], M_SIZE, M_POW, M_POW, GS_PSMT8H, _clutPtrs[MOUSE], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(mouseCoords + 0, mouseCoords + 1, kMouseTex + 0, kMouseTex + 1); - } - - _dmaPipe->setTex(_texPtrs[PRINTF], 3 * 128, TEX_POW, TEX_POW, GS_PSMT8H, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, kPrintTex + 0, kPrintTex + 1); - -#if 0 - _ps2sdk_alloc_lock(); - uint32 heapTop = (uint32)ps2_sbrk(0); - _ps2sdk_alloc_unlock(); - if (heapTop != (uint32)-1) { - float yPos = (((float)heapTop) / (32 * 1024 * 1024)) * _tvHeight; - GsVertex bottom = { SCALE(_tvWidth - 40) + ORIGIN_X, SCALE(_tvHeight) + ORIGIN_Y, 0 }; - GsVertex top = { SCALE(_tvWidth) + ORIGIN_X, 0, 0 }; - top.y = SCALE((uint16)(_tvHeight - yPos)) + ORIGIN_Y; - _dmaPipe->flatRect(&bottom, &top, GS_RGBA(0x80, 0, 0, 0x40)); - } -#endif - - WaitSema(g_DmacSema); // wait for dma transfer, if there's one running - WaitSema(g_VblankSema); // wait if there's already an image waiting for vblank - - g_DmacCmd = GS_SET_DISPFB(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24); // put it here for dmac/vblank handler - _dmaPipe->flush(); - _curDrawBuf ^= 1; - _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); - } else - _dmaPipe->flush(); - SignalSema(_screenSema); -} - -void Gs2dScreen::showOverlay(void) { - _showOverlay = true; - clearOverlay(); -} - -void Gs2dScreen::hideOverlay(void) { - _screenChanged = true; - _showOverlay = false; -} - -void Gs2dScreen::setShakePos(int shake) { - _shakePos = (shake * _mouseScaleY) >> 8; - _blitCoords[0].y = SCALE(_shakePos) + ORIGIN_Y; - _blitCoords[1].y = SCALE(_tvHeight + _shakePos) + ORIGIN_Y; -} - -void Gs2dScreen::copyPrintfOverlay(const uint8 *buf) { - assert(!((uint32)buf & 63)); - _dmaPipe->uploadTex(_texPtrs[PRINTF], 3 * 128, 0, 0, GS_PSMT8H, buf, 320, 200); - _dmaPipe->flush(); - _dmaPipe->waitForDma(); -} - -void Gs2dScreen::clearPrintfOverlay(void) { - uint8 *tmpBuf = (uint8*)memalign(64, 320 * 200); - memset(tmpBuf, 4, 320 * 200); - _dmaPipe->uploadTex(_texPtrs[PRINTF], 3 * 128, 0, 0, GS_PSMT8H, tmpBuf, 320, 200); - _dmaPipe->flush(); - _dmaPipe->waitForDma(); - free(tmpBuf); -} - -void Gs2dScreen::copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h) { - WaitSema(g_DmacSema); - _overlayChanged = true; - uint16 *dest = _overlayBuf + y * _width + x; - for (uint32 cnt = 0; cnt < h; cnt++) { - memcpy(dest, buf, w * 2); - dest += _width; - buf += pitch; - } - SignalSema(g_DmacSema); -} - -void Gs2dScreen::clearOverlay(void) { - WaitSema(g_DmacSema); - _overlayChanged = true; - // first convert our clut to 16 bit RGBA for the overlay... - uint16 palette[256]; - for (uint32 cnt = 0; cnt < 256; cnt++) { - uint32 rgba = _clut[(cnt & 0xE7) | ((cnt & 0x8) << 1) | ((cnt & 0x10) >> 1)]; - palette[cnt] = ((rgba >> 3) & 0x1F) | (((rgba >> 11) & 0x1F) << 5) | (((rgba >> 19) & 0x1F) << 10); - } - // now copy the current screen over - for (int cnt = 0; cnt < _width * _height; cnt++) - _overlayBuf[cnt] = palette[_screenBuf[cnt]]; - SignalSema(g_DmacSema); -} - -void Gs2dScreen::grabOverlay(uint16 *buf, uint16 pitch) { - uint16 *src = _overlayBuf; - for (uint32 cnt = 0; cnt < _height; cnt++) { - memcpy(buf, src, _width * 2); - buf += pitch; - src += _width; - } -} - -void Gs2dScreen::setMouseOverlay(const uint8 *buf, uint16 width, uint16 height, uint16 hotSpotX, uint16 hotSpotY, uint8 transpCol) { - assert((width <= M_SIZE) && (height <= M_SIZE)); - - _hotSpotX = hotSpotX; - _hotSpotY = hotSpotY; - if (_mTraCol != transpCol) { - _mTraCol = transpCol; - _clutChanged = true; - } - uint8 *bufCopy = (uint8*)memalign(64, M_SIZE * M_SIZE); // make a copy to align to 64 bytes - memset(bufCopy, _mTraCol, M_SIZE * M_SIZE); - for (int cnt = 0; cnt < height; cnt++) - memcpy(bufCopy + cnt * M_SIZE, buf + cnt * width, width); - - _dmaPipe->uploadTex( _texPtrs[MOUSE], M_SIZE, 0, 0, GS_PSMT8H, bufCopy, M_SIZE, M_SIZE); - _dmaPipe->flush(); - _dmaPipe->waitForDma(); // make sure all data has been transferred when we free bufCopy - free(bufCopy); -} - -void Gs2dScreen::showMouse(bool show) { - _showMouse = show; -} - -void Gs2dScreen::setMouseXy(int16 x, int16 y) { - _mouseX = x; - _mouseY = y; -} - -uint8 Gs2dScreen::tvMode(void) { - return _videoMode; -} - -uint16 Gs2dScreen::getWidth(void) { - return _width; -} - -uint16 Gs2dScreen::getHeight(void) { - return _height; -} - -void Gs2dScreen::wantAnim(bool runIt) { - g_RunAnim = runIt; -} - -#define LINE_SPACE 20 -#define SCRL_TIME 8 -#define V 1000 -#define Z_TRANSL 65 - -void Gs2dScreen::animThread(void) { - // animate zeros and ones while game accesses memory card, etc. - g_RunAnim = false; - float yPos = 0.0; - uint8 texSta = 0; - float scrlSpeed = (_videoMode == TV_PAL) ? (_tvHeight / (SCRL_TIME * 50.0)) : (_tvHeight / (SCRL_TIME * 60.0)); - uint8 texMax = (_tvHeight / LINE_SPACE) + (ORG_Y / LINE_SPACE); - TexVertex texNodes[4] = { - { SCALE(1), SCALE(1) }, { SCALE(1), SCALE(14) }, - { SCALE(128), SCALE(1) }, { SCALE(128), SCALE(14) } - }; - float angleStep = ((2 * PI) / _tvHeight); - - while (!_systemQuit) { - do { - WaitSema(g_AnimSema); - } while ((!_systemQuit) && (!g_RunAnim)); - - if (_systemQuit) - break; - - if (PollSema(_screenSema) > 0) { // make sure no thread is currently drawing - WaitSema(g_DmacSema); // dma transfers have to be finished - WaitSema(g_VblankSema); // wait for image, if there is one... - - // redraw the engine's last frame - _dmaPipe->flatRect(kFullScreen + 0, kFullScreen + 1, GS_RGBA(0, 0, 0, 0)); // clear screen - - if (_showOverlay) { - _dmaPipe->setTex(_texPtrs[SCREEN], _width, TEX_POW, TEX_POW, GS_PSMCT16, 0, 0, 0, 0); - _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, _texCoords + 0, _texCoords + 1); - } else { - _dmaPipe->setTex(_texPtrs[SCREEN], _pitch, TEX_POW, TEX_POW, GS_PSMT8, _clutPtrs[SCREEN], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(_blitCoords + 0, _blitCoords + 1, _texCoords + 0, _texCoords + 1); - } - - _dmaPipe->setTex(_texPtrs[PRINTF], 3 * 128, TEX_POW, TEX_POW, GS_PSMT8H, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(kFullScreen + 0, kFullScreen + 1, kPrintTex + 0, kPrintTex + 1); - - if (_showMouse) { - GsVertex mouseCoords[2]; - mouseCoords[0].x = (((_mouseX - _hotSpotX) * _mouseScaleX + 8) >> 4) + ORIGIN_X; - mouseCoords[0].y = (((_mouseY - _hotSpotY) * _mouseScaleY + 8) >> 4) + ORIGIN_Y; - mouseCoords[1].x = mouseCoords[0].x + (((M_SIZE * _mouseScaleX) + 8) >> 4); - mouseCoords[1].y = mouseCoords[0].y + (((M_SIZE * _mouseScaleY) + 8) >> 4); - mouseCoords[0].z = mouseCoords[1].z = 0; - - _dmaPipe->setTex(_texPtrs[MOUSE], M_SIZE, M_POW, M_POW, GS_PSMT8H, _clutPtrs[MOUSE], 0, 64, GS_PSMCT32); - _dmaPipe->textureRect(mouseCoords + 0, mouseCoords + 1, kMouseTex + 0, kMouseTex + 1); - } - - _dmaPipe->setAlphaBlend(SOURCE_COLOR, ZERO_COLOR, SOURCE_ALPHA, DEST_COLOR, 0); - yPos -= scrlSpeed; - if (yPos <= -LINE_SPACE) { - yPos += LINE_SPACE; - texSta++; - } - - float drawY = yPos; - - for (int i = 0; i < texMax; i++) { - uint8 texIdx = (texSta + i) & 0xF; - - float x[4] = { -64.0, -64.0, 64.0, 64.0 }; - float y[4]; - y[0] = y[2] = drawY - _tvHeight / 2 - LINE_SPACE / 2; - y[1] = y[3] = y[0] + LINE_SPACE; - float z[4]; - GsVertex nodes[4]; - - float angle = PI / 2 + angleStep * drawY; - float rotSin = sinf(angle); - float rotCos = cosf(angle); - for (int coord = 0; coord < 4; coord++) { - z[coord] = rotCos * x[coord]; - x[coord] = rotSin * x[coord]; - - nodes[coord].z = 0; - nodes[coord].x = (uint16)(((V * x[coord]) / (z[coord] + V + Z_TRANSL)) * 16); - nodes[coord].y = (uint16)(((V * y[coord]) / (z[coord] + V + Z_TRANSL)) * 16); - nodes[coord].x += SCALE(_tvWidth - 80 + ORG_X); - nodes[coord].y += SCALE(_tvHeight / 2 + ORG_Y); - } - - uint32 texPtr = _texPtrs[TEXT] + 128 * 16 * 4 * (texIdx >> 1); - if (texIdx & 1) - _dmaPipe->setTex(texPtr, 128, 7, 4, GS_PSMT4HL, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); - else - _dmaPipe->setTex(texPtr, 128, 7, 4, GS_PSMT4HH, _clutPtrs[TEXT], 0, 64, GS_PSMCT32); - - _dmaPipe->textureRect(nodes + 0, nodes + 1, nodes + 2, nodes + 3, - texNodes + 0, texNodes + 1, texNodes + 2, texNodes + 3, GS_RGBA(0x80, 0x80, 0x80, 0x80)); - - drawY += LINE_SPACE; - } - g_DmacCmd = GS_SET_DISPFB(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24); // put it here for dmac/vblank handler - _dmaPipe->flush(); - _curDrawBuf ^= 1; - _dmaPipe->setDrawBuffer(_frameBufPtr[_curDrawBuf], _tvWidth, GS_PSMCT24, 0); - _dmaPipe->setAlphaBlend(DEST_COLOR, ZERO_COLOR, SOURCE_ALPHA, SOURCE_COLOR, 0); - - SignalSema(_screenSema); - } - } - ExitThread(); -} - -void runAnimThread(Gs2dScreen *param) { - param->animThread(); -} - -// data for the animated zeros and ones... -const uint8 Gs2dScreen::_binaryData[4 * 14 * 2] = { - // figure zero - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x00, 0x31, 0x13, - 0x31, 0x13, 0x20, 0x02, 0x22, 0x02, 0x31, 0x13, 0x33, 0x13, 0x20, 0x02, 0x20, 0x02, - 0x31, 0x33, 0x31, 0x13, 0x20, 0x22, 0x20, 0x02, 0x31, 0x13, 0x31, 0x13, 0x00, 0x22, - 0x22, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, - // figure one - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x20, 0x02, 0x00, 0x11, 0x33, - 0x13, 0x11, 0x22, 0x22, 0x02, 0x00, 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, 0x02, 0x00, - 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, 0x02, 0x00, 0x11, 0x31, 0x13, 0x11, 0x00, 0x20, - 0x02, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11 -}; - -const uint16 Gs2dScreen::_binaryPattern[16] = { - 0xD992, 0x344B, 0xA592, 0x110D, - 0x9234, 0x2326, 0x5199, 0xC8A6, - 0x4D29, 0x18B0, 0xA5AA, 0x2949, - 0x6DB3, 0xB2AA, 0x64A4, 0x3329 -}; - -const uint32 Gs2dScreen::_binaryClut[16] __attribute__((aligned(64))) = { - GS_RGBA( 0, 0, 0, 0x40), - GS_RGBA( 50, 50, 50, 0x40), - GS_RGBA( 204, 204, 0xFF, 0x40), - GS_RGBA( 140, 140, 0xFF, 0x40), - - GS_RGBA( 0, 0, 0, 0x80), // scrPrintf: transparent - GS_RGBA( 0, 0, 0, 0x20), // scrPrintf: semitransparent - GS_RGBA(0xC0, 0xC0, 0xC0, 0), // scrPrintf: red - GS_RGBA(0x16, 0x16, 0xF0, 0), // scrPrintf: blue - - GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), // unused - GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), - GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), - GS_RGBA(0xFF, 0xFF, 0xFF, 0x80), GS_RGBA(0xFF, 0xFF, 0xFF, 0x80) -}; - - diff --git a/backends/ps2/Gs2dScreen.h b/backends/ps2/Gs2dScreen.h deleted file mode 100644 index 47438c632c..0000000000 --- a/backends/ps2/Gs2dScreen.h +++ /dev/null @@ -1,116 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GS2DSCREEN_H__ -#define __GS2DSCREEN_H__ - -#include "sysdefs.h" -#include "backends/ps2/DmaPipe.h" - -enum TVMode { - TV_DONT_CARE = 0, - TV_PAL, - TV_NTSC -}; - -enum GsInterlace { - GS_NON_INTERLACED = 0, - GS_INTERLACED -}; - - -namespace Graphics { - struct Surface; -} - -class Gs2dScreen { -public: - Gs2dScreen(uint16 width, uint16 height, TVMode tvMode); - ~Gs2dScreen(void); - void newScreenSize(uint16 width, uint16 height); - uint8 tvMode(void); - uint16 getWidth(void); - uint16 getHeight(void); - - void copyPrintfOverlay(const uint8* buf); - void clearPrintfOverlay(void); - void clearScreen(void); - - void copyScreenRect(const uint8 *buf, int pitch, int x, int y, int w, int h); - void setPalette(const uint32 *pal, uint8 start, uint16 num); - void updateScreen(void); - void grabPalette(uint32 *pal, uint8 start, uint16 num); - void grabScreen(Graphics::Surface *surf); - //- overlay routines - void copyOverlayRect(const uint16 *buf, uint16 pitch, uint16 x, uint16 y, uint16 w, uint16 h); - void grabOverlay(uint16 *buf, uint16 pitch); - void clearOverlay(void); - void showOverlay(void); - void hideOverlay(void); - //- mouse routines - void setMouseOverlay(const uint8 *buf, uint16 width, uint16 height, uint16 hotSpotX, uint16 hotSpotY, uint8 transpCol); - void showMouse(bool show); - void setMouseXy(int16 x, int16 y); - void setShakePos(int shake); - - void animThread(void); - void wantAnim(bool runIt); - - void quit(void); -private: - void uploadToVram(void); - void createAnimTextures(void); - - DmaPipe *_dmaPipe; - uint8 _videoMode; - uint16 _tvWidth, _tvHeight; - GsVertex _blitCoords[2]; - TexVertex _texCoords[2]; - - uint8 _curDrawBuf; - uint32 _frameBufPtr[2]; // - uint32 _clutPtrs[3]; // vram pointers - uint32 _texPtrs[4]; // - - uint16 _width, _height, _pitch; - int16 _mouseX, _mouseY, _hotSpotX, _hotSpotY; - uint32 _mouseScaleX, _mouseScaleY; - uint8 _mTraCol; - - int _shakePos; - - bool _showMouse, _showOverlay, _screenChanged, _overlayChanged, _clutChanged; - uint16 *_overlayBuf; - uint8 *_screenBuf; - uint32 *_clut; - - int _screenSema; - int _vblankStartId, _vblankEndId, _dmacId, _animTid; - void *_animStack; - volatile bool _systemQuit; - - static const uint32 _binaryClut[16]; - static const uint8 _binaryData[4 * 14 * 2]; - static const uint16 _binaryPattern[16]; -}; - -#endif // __GS2DSCREEN_H__ diff --git a/backends/ps2/GsDefs.h b/backends/ps2/GsDefs.h deleted file mode 100644 index 65dec5e2a6..0000000000 --- a/backends/ps2/GsDefs.h +++ /dev/null @@ -1,226 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __GSDEFS_H__ -#define __GSDEFS_H__ - -#include "sysdefs.h" - -// Gs2dScreen defines: - -#define PAL_NTSC_FLAG (*(volatile uint8*)0x1FC7FF52) - -#define GS_PMODE *((volatile uint64*)0x12000000) -#define GS_CSR *((volatile uint64*)0x12001000) -#define GS_DISPFB1 *((volatile uint64*)0x12000070) -#define GS_DISPLAY1 *((volatile uint64*)0x12000080) -#define GS_BGCOLOUR *((volatile uint64*)0x120000E0) - -enum GS_CSR_FIELDS { - CSR_SIGNAL = 1 << 0, - CSR_FINISH = 1 << 1, - CSR_HSYNC = 1 << 2, - CSR_VSYNC = 1 << 3, - CSR_FLUSH = 1 << 8, - CSR_RESET = 1 << 9 -}; - -#define GS_SET_PMODE(readC1, readC2, alphaSel, alphaOut, alphaBlend, alphaFixed) \ - ((readC1) | ((readC2) << 1) | ((alphaSel) << 5) | ((alphaOut) << 6) | ((alphaBlend) << 7) | ((alphaFixed) << 8)) - -#define GS_SET_DISPLAY(width, height, xpos, ypos) \ - (((uint64)(height - 1) << 44) | ((uint64)0x9FF << 32) | \ - ((((2560 + (width - 1)) / width) - 1)<<23) | \ - (ypos << 12) | (xpos * (2560 / width))) - -#define GS_SET_DISPFB(frameBufPtr, frameBufWidth, psm) \ - (((frameBufPtr) / 8192) | (((frameBufWidth) / 64) << 9) | ((psm) << 15)) - -#define GS_RGBA(r, g, b, a) \ - ((r) | ((g) << 8) | ((b) << 16) | ((a) << 24)) - -//DmaPipe defines: - -enum GsRegs { - GPR_PRIM = 0x00, // Select and configure current drawing primitive - GPR_RGBAQ, // Setup current vertex color - GPR_ST, // ... - GPR_UV, // Specify Vertex Texture Coordinates - GPR_XYZF2, // Set vertex coordinate - GPR_XYZ2, // Set vertex coordinate and 'kick' drawing - GPR_TEX0_1, // Texture Buffer Setup (Context 1) - GPR_TEX0_2, // Texture Buffer Setup (Context 2) - GPR_CLAMP_1, // ... - GPR_CLAMP_2, // ... - GPR_FOG, // ... - - GPR_XYZF3 = 0x0C, // ... - GPR_XYZ3, // ... - - GPR_TEX1_1 = 0x14, // ... - GPR_TEX1_2, // ... - GPR_TEX2_1, // ... - GPR_TEX2_2, // ... - GPR_XYOFFSET_1, // Mapping from Primitive to Window coordinate system (Context 1) - GPR_XYOFFSET_2, // Mapping from Primitive to Window coordinate system (Context 2) - GPR_PRMODECONT, // ... - GPR_PRMODE, // ... - GPR_TEXCLUT, // ... - - GPR_SCANMSK = 0x22, // ... - - GPR_MIPTBP1_1 = 0x34, // ... - GPR_MIPTBP1_2, // ... - GPR_MIPTBP2_1, // ... - GPR_MIPTBP2_2, // ... - - GPR_TEXA = 0x3b, // ... - - GPR_FOGCOL = 0x3d, // ... - - GPR_TEXFLUSH = 0x3f,// Write to this register before using newly loaded texture - GPR_SCISSOR_1, // Setup clipping rectangle (Context 1) - GPR_SCISSOR_2, // Setup clipping rectangle (Context 2) - GPR_ALPHA_1, // Setup Alpha Blending Parameters (Context 1) - GPR_ALPHA_2, // Setup Alpha Blending Parameters (Context 2) - GPR_DIMX, // ... - GPR_DTHE, // ... - GPR_COLCLAMP, // ... - GPR_TEST_1, // ... - GPR_TEST_2, // ... - GPR_PABE, // ... - GPR_FBA_1, // ... - GPR_FBA_2, // ... - GPR_FRAME_1, // Frame buffer settings (Context 1) - GPR_FRAME_2, // Frame buffer settings (Context 2) - GPR_ZBUF_1, // ... - GPR_ZBUF_2, // ... - GPR_BITBLTBUF, // Setup Image Transfer Between EE and GS - GPR_TRXPOS, // Setup Image Transfer Coordinates - GPR_TRXREG, // Setup Image Transfer Size - GPR_TRXDIR, // Set Image Transfer Directon + Start Transfer - GPR_HWREG, - - GPR_SIGNAL = 0x60, - GPR_FINISH, - GPR_LABEL -}; - -enum PrimTypes { - PR_POINT = 0, - PR_LINE, - PR_LINESTRIP, - PR_TRIANGLE, - PR_TRIANGLESTRIP, - PR_TRIANGLEFAN, - PR_SPRITE -}; - -#define GS_PSMCT32 0x00 -#define GS_PSMCT24 0x01 -#define GS_PSMCT16 0x02 -#define GS_PSMCT16S 0x0A -#define GS_PSMT8 0x13 -#define GS_PSMT4 0x14 -#define GS_PSMT4HL 0x24 -#define GS_PSMT4HH 0x2C -#define GS_PSMT8H 0x1B - -/*#define GS_SET_BITBLTBUF(sbp, sbw, spsm, dbp, dbw, dpsm) \ - ((uint64)(sbp) | ((uint64)(sbw) << 16) | \ - ((uint64)(spsm) << 24) | ((uint64)(dbp) << 32) | \ - ((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56))*/ - -#define GS_SET_SRC_BLTBUF(sbp, sbw, spsm) \ - ((sbp) | ((uint64)sbw << 16) | ((uint64)spsm << 24)) - -#define GS_SET_DEST_BLTBUF(dbp, dbw, dpsm) \ - (((uint64)(dbp) << 32) | ((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56)) - -#define GS_SET_SRC_TRXPOS(ssax, ssay) \ - ((ssax) | ((uint64)ssay << 16)) - -#define GS_SET_DEST_TRXPOS(dsax, dsay) \ - (((uint64)(dsax) << 32) | ((uint64)(dsay) << 48)) - -#define GS_SET_TRXREG(rrw, rrh) \ - ((uint64)(rrw) | ((uint64)(rrh) << 32)) - -#define GS_SET_TEXA(ta0, aem, ta1) \ - ((uint64)(ta0) | ((uint64)(aem) << 15) | ((uint64)(ta1) << 32)) - -#define GS_SET_TEX0(tbp, tbw, psm, tw, th, tcc, tfx, cbp, cpsm, csm, csa, cld) \ - ((uint64)(tbp) | ((uint64)(tbw) << 14) | ((uint64)(psm) << 20) | ((uint64)(tw) << 26) | \ - ((uint64)(th) << 30) | ((uint64)(tcc) << 34) | ((uint64)(tfx) << 35) | ((uint64)(cbp) << 37) | \ - ((uint64)(cpsm) << 51) | ((uint64)(csm) << 55) | ((uint64)(csa) << 56) | ((uint64)(cld) << 61)) - -#define GIF_SET_TAG(nloop, eop, pre, prim, flg, nreg) \ - ( (uint64)(nloop) | ((uint64)(eop)<<15) | ((uint64)(pre) << 46) | \ - ((uint64)(prim)<<47) | ((uint64)(flg)<<58) | ((uint64)(nreg)<<60) ) - -#define GS_SET_UV(u, v) ((uint64)(u) | ((uint64)(v) << 16)) - -#define GS_SET_XYZ(x, y, z) \ - ((uint64)(x) | ((uint64)(y) << 16) | ((uint64)(z) << 32)) - -#define GS_SET_XYOFFSET(ofx, ofy) ((uint64)(ofx) | ((uint64)(ofy) << 32)) - -#define GS_SET_SCISSOR(scax0, scax1, scay0, scay1) \ - ( (uint64)(scax0) | ((uint64)(scax1) << 16) | ((uint64)(scay0) << 32) | ((uint64)(scay1) << 48) ) - -#define GS_SET_FRAME(fbp, fbw, psm, fbmask) \ - ( (uint64)(fbp) | (uint64)((uint64)(fbw) << 16) | (uint64)((uint64)(psm) << 24) | (uint64)((uint64)(fbmask) << 32) ) - -#define GS_SET_TEST(ate, atst, aref, afail, date, datm, zte, ztst) \ - ( (uint64)(ate) | ((uint64)(atst) << 1) | ((uint64)(aref) << 4) | ((uint64)(afail) << 12) | \ - ((uint64)(date) << 14) | ((uint64)(datm) << 15) | ((uint64)(zte) << 16) | ((uint64)(ztst) << 17) ) - -#define FILTER_NEAREST 0 -#define FILTER_LINEAR 1 - -#define GS_SET_TEX1(lcm, mxl, mmag, mmin, mtba, l, k) \ - ((uint64)(lcm) | ((uint64)(mxl) << 2) | ((uint64)(mmag) << 5) | ((uint64)(mmin) << 6) | \ - ((uint64)(mtba) << 9) | ((uint64)(l) << 19) | ((uint64)(k) << 32)) - -enum AlphaBlendColor { - SOURCE_COLOR = 0, - DEST_COLOR, - ZERO_COLOR -}; - -enum AlphaBlendAlpha { - SOURCE_ALPHA = 0, - DEST_ALPHA, - FIXED_ALPHA -}; - -#define GS_SET_ALPHA(a, b, c, d, fix) \ - ((uint64)(a) | ((uint64)(b)<<2) | ((uint64)(c)<<4) | ((uint64)(d)<<6) | ((uint64)(fix)<<32)) - -#define GS_SET_PRIM(prim, iip, tme, fge, abe, aa1, fst, ctxt, fix) \ - ((uint64)(prim) | ((uint64)(iip) << 3) | ((uint64)(tme) << 4) | \ - ((uint64)(fge) << 5) | ((uint64)(abe) << 6) | ((uint64)(aa1) << 7) | \ - ((uint64)(fst) << 8) | ((uint64)(ctxt) << 9) | ((uint64)(fix) << 10)) - -#define GS_SET_COLQ(c) (0x3f80000000000000 | c) - -#endif // __GSDEFS_H__ diff --git a/backends/ps2/READ_PS2.TXT b/backends/ps2/READ_PS2.TXT deleted file mode 100644 index 59ba25ce38..0000000000 --- a/backends/ps2/READ_PS2.TXT +++ /dev/null @@ -1,82 +0,0 @@ -ScummVM-PS2 0.8.2 Readme -======================== - -You need a PlayStation 2 with a modchip of your choice in order to run ScummVM. - -ScummVM expects the game data on CD-R/DVD-R, on the Harddisk or on a USB mass - storage device. - - It tries to mount the HDD partition hdd0:+ScummVM on startup and basically - treats it in the same way as the DVD drive. - Creating the partition and putting the datafiles there is up to you. - - Not all USB mass storage devices are supported, but the most common ones should - work. If you attach a device and it gets recognized, it will show up together - with the CD/DVD drive and HDD in the "Add Game" dialog. - - Most USB Mice and Keyboards should work, too. I have a Logitech MX500 mouse that - doesn't work, all the other devices I tried worked fine. - - -Creating a CD-R using CD-Tool -============================= - -Copy any games you want on the CD over into the directory where you extracted - the ZIP file. Don't copy any files directly into the directory of the - ScummVM.ELF, those files are ignored. Instead, have each game in its own - directory. - - File- and directorynames should be DOS 8+3, if they aren't, they'll get - renamed. - - If you run windows, just double click the make_iso.bat. - Wait while it creates the ISO image and burn it with Nero - or any other CD writing software. - - For Linux or Mac OS X binaries check http://www.nobis-crew.org/cd-tool/ - - Unfortunately, writing DVD images with cd-tool is currently broken. - This problem will probably be fixed in the nearer future. - - -If you want to create a CD/DVD without CD-Tool, make sure to put the ELF, - the SYSTEM.CNF and all the IRXs into the CD/DVD's root directory. - - -Notes -===== -- The Curse of Monkey Island only works correctly from HDD. - Playing it from CD/DVD will initially seem to work, but you will - experience random crashes. -- Compressed SAN files need a lot of CPU power, probably because of zlib, - and are constantly out of sync. Uncompressed SANs play fine though, so - compress_san is NOT recommended. -- The cd/dvd drive is a bottleneck, that's why you should compress the games - with MP3 using compress_scumm_sou / compress_scumm_bun / compress_sword1 / - compress_sword2 etc, but NOT compress_san. -- I haven't had time to implement a virtual keyboard. If you don't have a USB - keyboard, you can only enter '1's using the Select button. - (for copy protection screens as well as savegame names) -- When you see '1's and '0's flying across your screen, it means ScummVM is - accessing the Memory Card. Don't switch off or reset the console in that - case, and don't remove the Memory Card either :P - - -GamePad -======= -Start Button - F5 -Select Button - Figure 1 -L1 - 'n' -R1 - 'y' -L2 - Numpad 0 -Triangle - Escape -Square - Enter -Cross - Left mouse button -Circle - Right mouse button -Left analog stick - Mouse. Disabled when USB mouse is detected. - - - -Changes since 0.8.0 RC3 -======================= -- USB Mass support was added diff --git a/backends/ps2/asyncfio.cpp b/backends/ps2/asyncfio.cpp deleted file mode 100644 index 45cadbafa9..0000000000 --- a/backends/ps2/asyncfio.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "asyncfio.h" -#include -#include -#include -#include -#include -#include - -#define DEFAULT_MODE (FIO_S_IRUSR | FIO_S_IWUSR | FIO_S_IRGRP | FIO_S_IWGRP | FIO_S_IROTH | FIO_S_IWOTH) - -extern void sioprintf(const char *zFormat, ...); - -AsyncFio::AsyncFio(void) { - _runningOp = NULL; - memset((int *)_ioSlots, 0, MAX_HANDLES * sizeof(int)); - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - _ioSema = CreateSema(&newSema); -} - -AsyncFio::~AsyncFio(void) { - DeleteSema(_ioSema); -} - -int AsyncFio::open(const char *name, int ioMode) { - WaitSema(_ioSema); - checkSync(); - int res; - fileXioOpen(name, ioMode, DEFAULT_MODE); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -void AsyncFio::close(int handle) { - WaitSema(_ioSema); - checkSync(); - fileXioClose(handle); - int res; - fileXioWaitAsync(FXIO_WAIT, &res); - if (res != 0) - sioprintf("ERROR: fileXioClose failed, EC %d", res); - _ioSlots[handle] = 0; - SignalSema(_ioSema); -} - -void AsyncFio::checkSync(void) { - if (_runningOp) { - fileXioWaitAsync(FXIO_WAIT, (int *)_runningOp); - _runningOp = NULL; - } -} - -void AsyncFio::read(int fd, void *dest, unsigned int len) { - WaitSema(_ioSema); - checkSync(); - assert(fd < MAX_HANDLES); - _runningOp = _ioSlots + fd; - fileXioRead(fd, (unsigned char*)dest, len); - SignalSema(_ioSema); -} - -void AsyncFio::write(int fd, const void *src, unsigned int len) { - WaitSema(_ioSema); - checkSync(); - assert(fd < MAX_HANDLES); - _runningOp = _ioSlots + fd; - fileXioWrite(fd, (unsigned char*)src, len); - SignalSema(_ioSema); -} - -int AsyncFio::seek(int fd, int offset, int whence) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioLseek(fd, offset, whence); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -int AsyncFio::mkdir(const char *name) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioMkdir(name, DEFAULT_MODE); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -int AsyncFio::dopen(const char *name) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioDopen(name); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -int AsyncFio::dread(int fd, iox_dirent_t *dest) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioDread(fd, dest); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -void AsyncFio::dclose(int fd) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioDclose(fd); - fileXioWaitAsync(FXIO_WAIT, &res); - assert(res == 0); - SignalSema(_ioSema); -} - -int AsyncFio::mount(const char *mountpoint, const char *mountstring, int flag) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioMount(mountpoint, mountstring, flag); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -int AsyncFio::umount(const char *mountpoint) { - int res; - WaitSema(_ioSema); - checkSync(); - fileXioUmount(mountpoint); - fileXioWaitAsync(FXIO_WAIT, &res); - SignalSema(_ioSema); - return res; -} - -int AsyncFio::sync(int fd) { - WaitSema(_ioSema); - if (_runningOp == _ioSlots + fd) - checkSync(); - int res = _ioSlots[fd]; - _ioSlots[fd] = 0; - SignalSema(_ioSema); - return res; -} - -bool AsyncFio::poll(int fd) { - bool retVal = false; - if (PollSema(_ioSema) >= 0) { - if (_runningOp == _ioSlots + fd) { - if (fileXioWaitAsync(FXIO_NOWAIT, (int *)_runningOp) == FXIO_COMPLETE) { - _runningOp = NULL; - retVal = true; - } else - retVal = false; - } else - retVal = true; - SignalSema(_ioSema); - } - return retVal; -} - -bool AsyncFio::fioAvail(void) { - bool retVal = false; - if (PollSema(_ioSema) > 0) { - if (_runningOp) { - if (fileXioWaitAsync(FXIO_NOWAIT, (int *)_runningOp) == FXIO_COMPLETE) { - _runningOp = NULL; - retVal = true; - } else - retVal = false; - } else - retVal = true; - SignalSema(_ioSema); - } - return retVal; -} - diff --git a/backends/ps2/asyncfio.h b/backends/ps2/asyncfio.h deleted file mode 100644 index ce5145dea2..0000000000 --- a/backends/ps2/asyncfio.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#define MAX_HANDLES 32 -#include - -class AsyncFio { -public: - AsyncFio(void); - ~AsyncFio(void); - int open(const char *name, int ioMode); - void close(int handle); - void read(int fd, void *dest, unsigned int len); - void write(int fd, const void *src, unsigned int len); - int seek(int fd, int offset, int whence); - int mkdir(const char *name); - int dopen(const char *name); - int dread(int fd, iox_dirent_t *dest); - void dclose(int fd); - int mount(const char *mountpoint, const char *mountstring, int flag); - int umount(const char *mountpoint); - int sync(int fd); - bool poll(int fd); - bool fioAvail(void); -private: - void checkSync(void); - int _ioSema; - volatile int * volatile _runningOp; - volatile int _ioSlots[MAX_HANDLES]; -}; - diff --git a/backends/ps2/cd.c b/backends/ps2/cd.c deleted file mode 100644 index 5694d9a960..0000000000 --- a/backends/ps2/cd.c +++ /dev/null @@ -1,53 +0,0 @@ -/********************************************************************* - * Copyright (C) 2003 Tord Lindstrom (pukko@home.se) - * This file is subject to the terms and conditions of the PS2Link License. - * See the file LICENSE in the main directory of this distribution for more - * details. - */ - -#include -#include -#include - -#define CDVD_INIT_BIND_RPC 0x80000592 - -static SifRpcClientData_t cdvdCd __attribute__((aligned(64))); -static char sendBuffer[256] __attribute__((aligned(16))); - -int cdvdInitialised = 0; - - -void cdvdExit(void) -{ - cdvdInitialised = 0; -} - - -int cdvdInit(int mode) -{ - int i=0,len=0,ret=0; - u8 *pkt; - - cdvdCd.server = NULL; - - do { - if ((ret = SifBindRpc(&cdvdCd, CDVD_INIT_BIND_RPC, 0)) < 0) { - return -1; - } - if (!cdvdCd.server) { - nopdelay(); - } - } - while(!cdvdCd.server); - - pkt = sendBuffer; - PUSHDATA( int, pkt, mode, i); - pkt += i; len += i; - - if ((ret = SifCallRpc(&cdvdCd, 0, 0, sendBuffer, len, NULL, 0, 0, 0)) < 0) - return -1; - - cdvdInitialised = 1; - - return 0; -} diff --git a/backends/ps2/cd.h b/backends/ps2/cd.h deleted file mode 100644 index 2bd1ddfe27..0000000000 --- a/backends/ps2/cd.h +++ /dev/null @@ -1,26 +0,0 @@ -/********************************************************************* - * Copyright (C) 2003 Tord Lindstrom (pukko@home.se) - * This file is subject to the terms and conditions of the PS2Link License. - * See the file LICENSE in the main directory of this distribution for more - * details. - */ - -#ifndef _CD_H_ -#define _CD_H_ - -#define CDVD_INIT_WAIT 0 -#define CDVD_INIT_NOWAIT 1 -#define CDVD_EXIT 5 - -#ifdef __cplusplus -extern "C" { -#endif - -int cdvdInit(int mode); -void cdvdExit(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/backends/ps2/eecodyvdfs.c b/backends/ps2/eecodyvdfs.c deleted file mode 100644 index 655b5b941c..0000000000 --- a/backends/ps2/eecodyvdfs.c +++ /dev/null @@ -1,67 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include "eecodyvdfs.h" -#include -#include -#include - -static SifRpcClientData_t cd0; -static unsigned sbuff[64] __attribute__((aligned (64))); - -int driveStopped; - -int initCdvdFs(void) { - int res; - while(((res = SifBindRpc(&cd0, CDVDFS_IRX_ID, 0)) >= 0) && (cd0.server == NULL)) - nopdelay(); - driveStopped = 0; - return res; -} - -void readRTC(struct CdClock *dest) { - SifCallRpc(&cd0, READ_RTC, 0, (void *)sbuff, 0, (void *)sbuff, 8, 0, 0); - memcpy(dest, sbuff, 8); -} - -int driveStop(void) { - if (driveStopped) - return 0; - SifCallRpc(&cd0, DRIVE_STOP, 0, (void *)sbuff, 0, (void *)sbuff, 4, 0, 0); - if (*(int *)sbuff == 0) - driveStopped = 1; - return *(int *)sbuff; -} - -int driveStandby(void) { - if (!driveStopped) - return 0; - SifCallRpc(&cd0, DRIVE_STANDBY, 0, (void *)sbuff, 0, (void *)sbuff, 4, 0, 0); - if (*(int *)sbuff == 0) - driveStopped = 0; - return *(int *)sbuff; -} - - diff --git a/backends/ps2/eecodyvdfs.h b/backends/ps2/eecodyvdfs.h deleted file mode 100644 index 9e58d35687..0000000000 --- a/backends/ps2/eecodyvdfs.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef EECDVDFS_H -#define EECDVDFS_H - -#include -#include "iop/CoDyVDfs/common/codyvdirx.h" - -struct CdClock { - u8 stat; - u8 second; - u8 minute; - u8 hour; - u8 padding; - u8 day; - u8 month; - u8 year; -} __attribute__((packed)); - -#ifdef __cplusplus -extern "C" { -#endif - int initCdvdFs(void); - void readRTC(struct CdClock *dest); - int driveStop(void); - int driveStandby(void); -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/backends/ps2/fileio.cpp b/backends/ps2/fileio.cpp deleted file mode 100644 index 3b21e0796f..0000000000 --- a/backends/ps2/fileio.cpp +++ /dev/null @@ -1,728 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "backends/ps2/fileio.h" - -#include -#include -#include -#include -#include -#include "backends/ps2/asyncfio.h" -#include "base/engine.h" -#include "common/file.h" -#include "eecodyvdfs.h" -#include "common/config-manager.h" - -#define CACHE_SIZE (2048 * 32) -#define MAX_READ_STEP (2048 * 16) -#define MAX_CACHED_FILES 6 -#define CACHE_READ_THRESHOLD (16 * 2048) -#define CACHE_FILL_MIN (2048 * 24) -#define READ_ALIGN 64 // align all reads to the size of an EE cache line -#define READ_ALIGN_MASK (READ_ALIGN - 1) - -extern void sioprintf(const char *zFormat, ...); - -AsyncFio fio; - -Ps2File::Ps2File(int64 cacheId) { - _cacheId = cacheId; -} - -Ps2File::~Ps2File(void) { -} - -class Ps2ReadFile : public Ps2File { -public: - Ps2ReadFile(int64 cacheId, bool stream); - virtual ~Ps2ReadFile(void); - virtual bool open(const char *name); - virtual uint32 read(void *dest, uint32 len); - virtual uint32 write(const void *src, uint32 len); - virtual uint32 tell(void); - virtual uint32 size(void); - virtual int seek(int32 offset, int origin); - virtual bool eof(void); -private: - void cacheReadAhead(void); - void cacheReadSync(void); - int _fd, _sema; - uint8 *_cacheBuf; - bool _cacheOpRunning; - uint32 _filePos, _physFilePos, _cachePos; - uint32 _fileSize, _bytesInCache, _cacheOfs; - - uint32 _readBytesBlock; - bool _stream; -}; - -Ps2ReadFile::Ps2ReadFile(int64 cacheId, bool stream) : Ps2File(cacheId) { - _fd = -1; - _cacheBuf = (uint8*)memalign(64, CACHE_SIZE); - - _cacheOpRunning = 0; - _filePos = _physFilePos = _cachePos = 0; - _fileSize = _bytesInCache = _cacheOfs = 0; - _cacheOpRunning = false; - _readBytesBlock = 0; - _stream = stream; - - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - _sema = CreateSema(&newSema); - assert(_sema >= 0); -} - -Ps2ReadFile::~Ps2ReadFile(void) { - if (_cacheOpRunning) - cacheReadSync(); - free(_cacheBuf); - if (_fd >= 0) - fio.close(_fd); - DeleteSema(_sema); -} - -bool Ps2ReadFile::open(const char *name) { - assert(_fd < 0); - _fd = fio.open(name, O_RDONLY); - if (_fd >= 0) { - _fileSize = fio.seek(_fd, 0, SEEK_END); - fio.seek(_fd, 0, SEEK_SET); - return true; - } else - return false; -} - -uint32 Ps2ReadFile::tell(void) { - WaitSema(_sema); - uint32 res = _filePos; - SignalSema(_sema); - return res; -} - -uint32 Ps2ReadFile::size(void) { - WaitSema(_sema); - uint32 res = _fileSize; - SignalSema(_sema); - return res; -} - -bool Ps2ReadFile::eof(void) { - WaitSema(_sema); - bool res = (_filePos == _fileSize); - SignalSema(_sema); - return res; -} - -int Ps2ReadFile::seek(int32 offset, int origin) { - WaitSema(_sema); - int seekDest; - int res = -1; - switch (origin) { - case SEEK_SET: - seekDest = offset; - break; - case SEEK_CUR: - seekDest = _filePos + offset; - break; - case SEEK_END: - seekDest = _fileSize + offset; - break; - default: - seekDest = -1; - break; - } - if ((seekDest >= 0) && (seekDest <= (int)_fileSize)) { - _filePos = seekDest; - res = 0; - } - SignalSema(_sema); - return res; -} - -void Ps2ReadFile::cacheReadAhead(void) { - if (_cacheOpRunning) { - // there's already some cache read running - if (fio.poll(_fd)) // did it finish? - cacheReadSync(); // yes. - } - if ((!_cacheOpRunning) && ((_readBytesBlock >= CACHE_READ_THRESHOLD) || _stream) && fio.fioAvail()) { - // the engine seems to do sequential reads and there are no other I/Os going on. read ahead. - uint32 cachePosEnd = _cachePos + _bytesInCache; - - if (_cachePos > _filePos) - return; // there was a seek in the meantime, don't cache. - if (cachePosEnd - _filePos >= CACHE_FILL_MIN) - return; // cache is full enough. - if (cachePosEnd == _fileSize) - return; // can't read beyond EOF. - - assert(cachePosEnd < _fileSize); - - if (_cachePos + _bytesInCache <= _filePos) { - _cacheOfs = _bytesInCache = 0; - _cachePos = cachePosEnd = _filePos & ~READ_ALIGN_MASK; - assert(_filePos == _physFilePos); - } else { - uint32 cacheDiff = _filePos - _cachePos; - assert(_bytesInCache >= cacheDiff); - cacheDiff &= ~READ_ALIGN_MASK; - _bytesInCache -= cacheDiff; - _cachePos += cacheDiff; - _cacheOfs = (_cacheOfs + cacheDiff) % CACHE_SIZE; - } - - if (_physFilePos != cachePosEnd) { - sioprintf("unexpected _physFilePos %d cache %d %d", _physFilePos, _cacheOfs, _bytesInCache); - assert(!(cachePosEnd & READ_ALIGN_MASK)); - _physFilePos = fio.seek(_fd, cachePosEnd, SEEK_SET); - if (_physFilePos != cachePosEnd) { - sioprintf("cache seek error: seek to %d instead of %d, fs = %d", _physFilePos, cachePosEnd, _fileSize); - return; - } - } - - uint32 cacheDest = (_cacheOfs + _bytesInCache) % CACHE_SIZE; - uint32 cacheRead = CACHE_SIZE - _bytesInCache; - if (cacheDest + cacheRead > CACHE_SIZE) - cacheRead = CACHE_SIZE - cacheDest; - if (cacheRead > MAX_READ_STEP) - cacheRead = MAX_READ_STEP; - - assert((!(cacheRead & READ_ALIGN_MASK)) && cacheRead); - - _cacheOpRunning = true; - fio.read(_fd, _cacheBuf + cacheDest, cacheRead); - } -} - -void Ps2ReadFile::cacheReadSync(void) { - if (_cacheOpRunning) { - int res = fio.sync(_fd); - assert(res >= 0); - _bytesInCache += res; - _physFilePos += res; - _cacheOpRunning = false; - } -} - -uint32 Ps2ReadFile::read(void *dest, uint32 len) { - WaitSema(_sema); - uint8 *destBuf = (uint8*)dest; - if ((_filePos < _cachePos) || (_filePos + len > _cachePos + _bytesInCache)) - cacheReadSync(); // we have to read from CD, sync cache. - - while (len && (_filePos != _fileSize)) { - if ((_filePos >= _cachePos) && (_filePos < _cachePos + _bytesInCache)) { // read from cache - uint32 staPos = (_cacheOfs + (_filePos - _cachePos)) % CACHE_SIZE; - uint32 cpyLen = _bytesInCache - (_filePos - _cachePos); - if (cpyLen > len) - cpyLen = len; - if (staPos + cpyLen > CACHE_SIZE) - cpyLen = CACHE_SIZE - staPos; - - assert(cpyLen); - memcpy(destBuf, _cacheBuf + staPos, cpyLen); - _filePos += cpyLen; - destBuf += cpyLen; - _readBytesBlock += len; - len -= cpyLen; - } else { // cache miss - assert(!_cacheOpRunning); - if (_physFilePos != _filePos) { - if ((_filePos < _physFilePos) || (_filePos > _physFilePos + (CACHE_SIZE / 2))) - _readBytesBlock = 0; // reset cache hit count - - _physFilePos = _filePos & ~READ_ALIGN_MASK; - if (fio.seek(_fd, _physFilePos, SEEK_SET) != (int)_physFilePos) - break; // read beyond EOF - } - - int doRead = len + (_filePos - _physFilePos); - doRead = (doRead + READ_ALIGN_MASK) & ~READ_ALIGN_MASK; - - if (doRead > MAX_READ_STEP) - doRead = MAX_READ_STEP; - if (doRead < 2048) - doRead = 2048; - - fio.read(_fd, _cacheBuf, doRead); - _cachePos = _physFilePos; - _cacheOfs = 0; - _bytesInCache = fio.sync(_fd); - _physFilePos += _bytesInCache; - if (!_bytesInCache) - break; // EOF - } - } - cacheReadAhead(); - SignalSema(_sema); - return destBuf - (uint8*)dest; -} - -uint32 Ps2ReadFile::write(const void *src, uint32 len) { - sioprintf("write request on Ps2ReadFile!"); - SleepThread(); - return 0; -} - -class Ps2WriteFile : public Ps2File { -public: - Ps2WriteFile(int64 cacheId); - virtual ~Ps2WriteFile(void); - virtual bool open(const char *name); - virtual uint32 read(void *dest, uint32 len); - virtual uint32 write(const void *src, uint32 len); - virtual uint32 tell(void); - virtual uint32 size(void); - virtual int seek(int32 offset, int origin); - virtual bool eof(void); -private: - int _fd; - uint8 *_cacheBuf; - uint32 _filePos, _bytesInCache; -}; - -Ps2WriteFile::Ps2WriteFile(int64 cacheId) : Ps2File(cacheId) { - _fd = -1; - _cacheBuf = (uint8*)malloc(CACHE_SIZE); - _filePos = _bytesInCache = 0; -} - -Ps2WriteFile::~Ps2WriteFile(void) { - if ((_fd >= 0) && (_bytesInCache)) { - fio.write(_fd, _cacheBuf, _bytesInCache); - int wrRes = fio.sync(_fd); - if (wrRes != (int)_bytesInCache) // too late to return an error - printf("Cache flush on fclose(): Unable to write %d cached bytes to mc, only %d bytes written\n", _bytesInCache, wrRes); - } - if (_fd >= 0) - fio.close(_fd); - free(_cacheBuf); -} - -bool Ps2WriteFile::open(const char *name) { - _fd = fio.open(name, O_WRONLY | O_CREAT | O_TRUNC); - return (_fd >= 0); -} - -uint32 Ps2WriteFile::read(void *dest, uint32 len) { - printf("ERROR: Read request on Ps2WriteFile\n"); - SleepThread(); - return 0; -} - -uint32 Ps2WriteFile::write(const void *src, uint32 len) { - uint32 size = len; - uint8 *srcBuf = (uint8*)src; - while (size) { - uint32 doCpy = (len > CACHE_SIZE - _bytesInCache) ? (CACHE_SIZE - _bytesInCache) : len; - if (doCpy) { - memcpy(_cacheBuf + _bytesInCache, srcBuf, doCpy); - _bytesInCache += doCpy; - srcBuf += doCpy; - size -= doCpy; - } - - if (_bytesInCache == CACHE_SIZE) { - fio.write(_fd, _cacheBuf, _bytesInCache); - if (fio.sync(_fd) != (int)_bytesInCache) { - printf("Unable to flush %d cached bytes to memory card!\n", _bytesInCache); - return 0; - } - _filePos += _bytesInCache; - _bytesInCache = 0; - } - } - return len; -} - -uint32 Ps2WriteFile::tell(void) { - return _bytesInCache + _filePos; -} - -uint32 Ps2WriteFile::size(void) { - return tell(); -} - -int Ps2WriteFile::seek(int32 offset, int origin) { - printf("Seek(%d/%d) request on Ps2WriteFile\n", offset, origin); - SleepThread(); - return 0; -} - -bool Ps2WriteFile::eof(void) { - return true; -} - -struct TocNode { - char name[64]; - TocNode *next, *sub; - bool isDir; - uint8 nameLen; -}; - -class TocManager { -public: - TocManager(void); - ~TocManager(void); - void readEntries(const char *root); - int64 fileExists(const char *name); - bool haveEntries(void); -private: - void readDir(const char *path, TocNode **node, int level); - TocNode *_rootNode; - char _root[256]; - uint8 _rootLen; -}; - -static TocManager tocManager; - -struct FioHandleCache { - Ps2File *file; - FioHandleCache *next, *prev; -}; - -static FioHandleCache *cacheListStart = NULL; -static FioHandleCache *cacheListEnd = NULL; -static int cacheListLen = 0; -static int openFileCount = 0; -static int cacheListSema = -1; - -static bool checkedPath = false; - -Ps2File *findInCache(int64 id); - -FILE *ps2_fopen(const char *fname, const char *mode) { - if (cacheListSema == -1) { - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - cacheListSema = CreateSema(&newSema); - assert(cacheListSema >= 0); - } - - printf("ps2_fopen: %s, %s\n", fname, mode); - - if (!checkedPath && g_engine) { - // are we playing from cd/dvd? - const char *gameDataPath = ConfMan.get("path").c_str(); - printf("Read TOC dir: %s\n", gameDataPath); - if (strncmp(gameDataPath, "cdfs:", 5) != 0) - driveStop(); // no, we aren't. stop the drive. it's noisy. - // now cache the dir tree - tocManager.readEntries(gameDataPath); - checkedPath = true; - } - - if (((mode[0] != 'r') && (mode[0] != 'w')) || ((mode[1] != '\0') && (mode[1] != 'b'))) { - printf("unsupported mode \"%s\" for file \"%s\"\n", mode, fname); - return NULL; - } - - bool rdOnly = (mode[0] == 'r'); - - int64 cacheId = -1; - if (rdOnly && tocManager.haveEntries()) - cacheId = tocManager.fileExists(fname); - - if (cacheId != 0) { - Ps2File *file = findInCache(cacheId); - if (file) - return (FILE*)file; - - if (rdOnly) { - bool isAudioFile = strstr(fname, ".bun") || strstr(fname, ".BUN") || strstr(fname, ".Bun"); - file = new Ps2ReadFile(cacheId, isAudioFile); - } else - file = new Ps2WriteFile(cacheId); - - if (file->open(fname)) { - openFileCount++; - return (FILE*)file; - } else - delete file; - } - return NULL; -} - -void checkCacheListLen(void) { - while ((cacheListLen > MAX_CACHED_FILES) || ((openFileCount > 13) && cacheListLen)) { - assert(cacheListEnd && cacheListStart); - delete cacheListEnd->file; - if (cacheListEnd->prev) { - cacheListEnd->prev->next = NULL; - FioHandleCache *temp = cacheListEnd; - cacheListEnd = cacheListEnd->prev; - delete temp; - } else { - assert(cacheListEnd == cacheListStart); - assert(cacheListLen == 1); - delete cacheListEnd; - cacheListEnd = cacheListStart = NULL; - } - cacheListLen--; - openFileCount--; - } -} - -int ps2_fclose(FILE *stream) { - Ps2File *file = (Ps2File*)stream; - if (file->_cacheId > 0) { // this is a file on the CD, could be smart to cache it - FioHandleCache *newHandle = new FioHandleCache; - newHandle->file = file; - file->seek(0, SEEK_SET); - - WaitSema(cacheListSema); - if (!cacheListEnd) { - assert(!cacheListStart); - newHandle->prev = newHandle->next = NULL; - cacheListEnd = cacheListStart = newHandle; - } else { - assert(cacheListStart); - newHandle->prev = NULL; - newHandle->next = cacheListStart; - cacheListStart->prev = newHandle; - cacheListStart = newHandle; - } - cacheListLen++; - checkCacheListLen(); - SignalSema(cacheListSema); - } else { - openFileCount--; - delete file; - } - return 0; -} - -Ps2File *findInCache(int64 id) { - if (id <= 0) - return NULL; - WaitSema(cacheListSema); - FioHandleCache *node = cacheListStart; - while (node) { - if (node->file->_cacheId == id) { - if (node == cacheListStart) - cacheListStart = node->next; - if (node == cacheListEnd) - cacheListEnd = node->prev; - if (node->prev) - node->prev->next = node->next; - if (node->next) - node->next->prev = node->prev; - Ps2File *ret = node->file; - delete node; - cacheListLen--; - SignalSema(cacheListSema); - return ret; - } else - node = node->next; - } - SignalSema(cacheListSema); - return NULL; -} - -int ps2_fseek(FILE *stream, long offset, int origin) { - return ((Ps2File*)stream)->seek(offset, origin); -} - -uint32 ps2_ftell(FILE *stream) { - return ((Ps2File*)stream)->tell(); -} - -uint32 ps2_fsize(FILE *stream) { - return ((Ps2File*)stream)->size(); -} - -int ps2_feof(FILE *stream) { - return ((Ps2File*)stream)->eof(); -} - -size_t ps2_fread(void *buf, size_t r, size_t n, FILE *stream) { - assert(r != 0); - return ((Ps2File*)stream)->read(buf, r * n) / r; -} - -int ps2_fgetc(FILE *stream) { - uint8 temp; - if (((Ps2File*)stream)->read(&temp, 1)) - return temp; - else - return EOF; -} - -char *ps2_fgets(char *buf, int n, FILE *stream) { - char *retVal = buf; - while (n--) { - if (n == 0) - *buf = '\0'; - else { - char c = ps2_fgetc(stream); - if (c == EOF) - return NULL; - if ((c == '\r') || (c == '\n')) { - *buf++ = '\0'; - return retVal; - } - *buf++ = c; - } - } - return retVal; -} - -int ps2_fprintf(FILE *pOut, const char *zFormat, ...) { - va_list ap; - char resStr[2048]; - - va_start(ap,zFormat); - int res = vsnprintf(resStr, 2048, zFormat, ap); - va_end(ap); - if ((pOut == stderr) || (pOut == stdout)) { - printf("%s", resStr); - sioprintf("%s", resStr); - } else - res = ps2_fwrite(resStr, 1, res, pOut); - return res; -} - -size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream) { - assert(r != 0); - return ((Ps2File*)stream)->write(buf, r * n) / r; -} - -int ps2_fputc(int c, FILE *stream) { - if (((Ps2File*)stream)->write(&c, 1) == 1) - return c; - else - return -1; -} - -int ps2_fputs(const char *s, FILE *stream) { - int len = strlen(s); - if (ps2_fwrite(s, 1, len, stream) == (size_t)len) - return len; - else - return EOF; -} - -int ps2_fflush(FILE *stream) { - printf("fflush not implemented\n"); - return 0; -} - -TocManager::TocManager(void) { - _rootNode = NULL; -} - -TocManager::~TocManager(void) { -} - -bool TocManager::haveEntries(void) { - return _rootNode != NULL; -} - -void TocManager::readEntries(const char *root) { - _rootLen = strlen(root); - strcpy(_root, root); - while (_root[_rootLen - 1] == '/') { - _rootLen--; - _root[_rootLen] = '\0'; - } - char readPath[256]; - sprintf(readPath, "%s/", _root); - printf("readDir: %s\n", readPath); - readDir(readPath, &_rootNode, 0); -} - -void TocManager::readDir(const char *path, TocNode **node, int level) { - if (level <= 2) { // we don't scan deeper than that - iox_dirent_t dirent; - int fd = fio.dopen(path); - if (fd >= 0) { - while (fio.dread(fd, &dirent) > 0) - if (dirent.name[0] != '.') { // skip '.' and '..' - *node = new TocNode; - (*node)->sub = (*node)->next = NULL; - - (*node)->nameLen = strlen(dirent.name); - memcpy((*node)->name, dirent.name, (*node)->nameLen + 1); - - if (dirent.stat.mode & FIO_S_IFDIR) { // directory - (*node)->isDir = true; - char nextPath[256]; - sprintf(nextPath, "%s%s/", path, dirent.name); - readDir(nextPath, &((*node)->sub), level + 1); - } else - (*node)->isDir = false; - node = &((*node)->next); - } - fio.dclose(fd); - } else - printf("Can't open path: %s\n", path); - } -} - -int64 TocManager::fileExists(const char *name) { - if (((name[_rootLen] != '/') && (name[_rootLen] != '\0')) || (strnicmp(name, _root, _rootLen) != 0)) { - for (int i = 0; i < 8; i++) - if (name[i] == ':') // we don't know the content of other drives, - return -1; // assume file exists - else if ((name[i] == '/') || (name[i] == '\\')) - return 0; // does not exists (this is probably ScummVM trying the 'current directory'.) - return 0; - } - - uint8 nameLen = strlen(name); - - name += _rootLen + 1; - nameLen -= _rootLen + 1; - - TocNode *node = _rootNode; - int64 retId = 1; - while (node) { - if (((name[node->nameLen] == '/') || (name[node->nameLen] == '\0')) && (strnicmp(name, node->name, node->nameLen) == 0)) { - name += node->nameLen; - nameLen -= node->nameLen; - if (node->isDir) { - if (nameLen) { - name++; // skip '/' - nameLen--; - node = node->sub; - retId <<= 10; - } else - return 0; // can't open a directory with fopen() - } else { - if (nameLen == 0) - return retId; // ok, found - else - return 0; // here's a file, but there's something left in the path - } - } else { - node = node->next; - retId++; - } - } - return 0; // does not exist -} - diff --git a/backends/ps2/fileio.h b/backends/ps2/fileio.h deleted file mode 100644 index ed94c2db6a..0000000000 --- a/backends/ps2/fileio.h +++ /dev/null @@ -1,77 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __PS2FILE_IO__ -#define __PS2FILE_IO__ - -#include "common/scummsys.h" - -class Ps2File { -public: - Ps2File(int64 cacheId); - virtual ~Ps2File(void); - virtual bool open(const char *name) = 0; - virtual uint32 read(void *dest, uint32 len) = 0; - virtual uint32 write(const void *src, uint32 len) = 0; - virtual uint32 tell(void) = 0; - virtual uint32 size(void) = 0; - virtual int seek(int32 offset, int origin) = 0; - virtual bool eof(void) = 0; - int64 _cacheId; -private: -}; - -class Ps2SmushFile : public Ps2File { -public: - Ps2SmushFile(int64 cacheId); - virtual ~Ps2SmushFile(void); - virtual bool open(const char *name); - virtual uint32 read(void *dest, uint32 len); - virtual uint32 write(const void *src, uint32 len); - virtual uint32 tell(void); - virtual uint32 size(void); - virtual int seek(int32 offset, int origin); - virtual bool eof(void); -private: - uint32 _filePos, _fileSize; - int _id; -}; - -FILE *ps2_fopen(const char *fname, const char *mode); -int ps2_fclose(FILE *stream); -int ps2_fflush(FILE *stream); -int ps2_fseek(FILE *stream, long offset, int origin); -uint32 ps2_ftell(FILE *stream); -int ps2_feof(FILE *stream); -uint32 ps2_fsize(FILE *stream); - -size_t ps2_fread(void *buf, size_t r, size_t n, FILE *stream); -int ps2_fgetc(FILE *stream); -char *ps2_fgets(char *buf, int n, FILE *stream); - -size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream); -int ps2_fputc(int c, FILE *stream); -int ps2_fputs(const char *s, FILE *stream); -int ps2_fprintf(FILE *pOut, const char *zFormat, ...); - -#endif // __PS2FILE_IO__ - diff --git a/backends/ps2/icon.cpp b/backends/ps2/icon.cpp deleted file mode 100644 index db46ac5987..0000000000 --- a/backends/ps2/icon.cpp +++ /dev/null @@ -1,932 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "backends/ps2/savefile.h" -#include "backends/ps2/Gs2dScreen.h" -#include "backends/ps2/GsDefs.h" - -const iconIVECTOR Ps2SaveFileManager::_bgcolor[4] = { - { 68, 23, 116, 0 }, // top left - { 255, 255, 255, 0 }, // top right - { 255, 255, 255, 0 }, // bottom left - { 68, 23, 116, 0 }, // bottom right -}; - -const iconFVECTOR Ps2SaveFileManager::_lightdir[3] = { - { 0.5, 0.5, 0.5, 0.0 }, - { 0.0,-0.4,-0.1, 0.0 }, - {-0.5,-0.5, 0.5, 0.0 }, -}; - -const iconFVECTOR Ps2SaveFileManager::_lightcol[3] = { - { 0.3, 0.3, 0.3, 0.00 }, - { 0.4, 0.4, 0.4, 0.00 }, - { 0.5, 0.5, 0.5, 0.00 }, -}; - -const iconFVECTOR Ps2SaveFileManager::_ambient = { 0.50, 0.50, 0.50, 0.00 }; - -// Source File: stdico2.rle -// Orig. Offset: 0 / 0x00000000 -// Length: 14018 / 0x000036C2 (bytes) - -const uint8 Ps2SaveFileManager::_rleIcoData[14018] = { - 0xCC, 0x41, 0x00, 0x00, 0xCC, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x24, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0x02, - 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xC1, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0x02, - 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0xDC, 0x00, 0xF7, 0x00, 0xFE, 0x00, 0x04, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xC1, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x7F, 0x7F, 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0xFE, - 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, - 0x7F, 0x80, 0x00, 0x24, 0x00, 0xF7, 0x00, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x7F, 0x7F, 0x7F, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x4E, 0x07, - 0x0C, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE7, 0x03, 0xE6, 0x03, 0xE9, 0x03, 0xF0, 0x2B, 0xF8, 0x57, 0x74, 0x00, 0x0C, 0x00, 0xFD, 0x73, - 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE6, 0x03, - 0xE9, 0x03, 0xF0, 0x2B, 0xF8, 0x57, 0x62, 0x00, 0x21, 0x00, 0xFE, 0x77, 0xFB, 0x67, 0xF9, 0x5F, - 0xF8, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, - 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF9, 0x5F, 0xF7, 0x53, - 0xF1, 0x33, 0xEB, 0x13, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE9, 0x03, 0xED, 0x1F, 0xF3, 0x3F, 0xF9, 0x5B, 0xFB, 0x67, 0xFE, 0x77, 0x5F, 0x00, 0x21, 0x00, - 0xFB, 0x6B, 0xF5, 0x4B, 0xF0, 0x2F, 0xEE, 0x2F, 0xF0, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, - 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, 0xF1, 0x2F, - 0xF1, 0x2F, 0xF0, 0x2F, 0xEF, 0x2B, 0xEC, 0x1B, 0xE9, 0x0B, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xEA, 0x0F, 0xEC, 0x1F, 0xF1, 0x2F, 0xF6, 0x4B, - 0xFC, 0x6B, 0x5F, 0x00, 0x21, 0x00, 0xF8, 0x57, 0xEF, 0x2B, 0xE8, 0x07, 0xE6, 0x07, 0xE8, 0x07, - 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, 0xEA, 0x07, - 0xEA, 0x07, 0xEA, 0x07, 0xE9, 0x07, 0xE9, 0x07, 0xE9, 0x07, 0xE8, 0x07, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, - 0xE7, 0x07, 0xE9, 0x07, 0xF0, 0x2B, 0xF8, 0x57, 0x56, 0x00, 0x30, 0x00, 0xFD, 0x73, 0xFB, 0x67, - 0xFA, 0x63, 0xF9, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xFA, 0x63, 0xF9, 0x5F, 0xF2, 0x3B, - 0xEB, 0x13, 0xE5, 0x03, 0xE3, 0x03, 0xE4, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xEC, 0x13, 0xF3, 0x3B, - 0xF9, 0x5F, 0xFA, 0x63, 0xF9, 0x63, 0xFA, 0x63, 0xFB, 0x6B, 0xFE, 0x77, 0x50, 0x00, 0x30, 0x00, - 0xFA, 0x63, 0xF5, 0x43, 0xF1, 0x37, 0xF0, 0x37, 0xF2, 0x37, 0xF2, 0x37, 0xF2, 0x37, 0xF2, 0x37, - 0xF1, 0x33, 0xEE, 0x1F, 0xE9, 0x07, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE7, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, - 0xEA, 0x07, 0xEE, 0x1F, 0xF1, 0x33, 0xF1, 0x37, 0xF0, 0x37, 0xF1, 0x37, 0xF5, 0x47, 0xFB, 0x67, - 0x4F, 0x00, 0x32, 0x00, 0xFD, 0x77, 0xF6, 0x4B, 0xEE, 0x1F, 0xE9, 0x0B, 0xE8, 0x0B, 0xEA, 0x0B, - 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x0B, 0xEA, 0x07, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xEA, 0x07, 0xEA, 0x0B, 0xEA, 0x0B, 0xE8, 0x0B, - 0xE9, 0x0B, 0xEF, 0x23, 0xF7, 0x4F, 0xFE, 0x7B, 0x49, 0x00, 0x39, 0x00, 0xFD, 0x73, 0xFB, 0x6B, - 0xFA, 0x67, 0xFB, 0x67, 0xFB, 0x67, 0xF8, 0x57, 0xF0, 0x2F, 0xE9, 0x07, 0xE4, 0x03, 0xE4, 0x03, - 0xE5, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, - 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE5, 0x03, - 0xE4, 0x03, 0xE5, 0x03, 0xEA, 0x0B, 0xF1, 0x33, 0xF8, 0x5B, 0xFC, 0x6B, 0xFE, 0x77, 0x46, 0x00, - 0x3A, 0x00, 0xFF, 0x7B, 0xF9, 0x5F, 0xF4, 0x43, 0xF1, 0x3B, 0xF2, 0x3B, 0xF3, 0x3B, 0xF1, 0x2F, - 0xEC, 0x17, 0xE8, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, - 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x47, 0x03, 0x47, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, - 0x68, 0x03, 0x88, 0x03, 0xA8, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xEC, 0x1B, - 0xF0, 0x33, 0xF5, 0x47, 0xFB, 0x63, 0x46, 0x00, 0x3B, 0x00, 0xFC, 0x6F, 0xF4, 0x43, 0xED, 0x1B, - 0xE9, 0x0F, 0xE9, 0x0F, 0xEB, 0x0F, 0xEB, 0x0F, 0xE9, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0xA7, 0x03, - 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x88, 0x03, 0x67, 0x03, 0x27, 0x03, 0x06, 0x03, 0xC5, 0x02, - 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xC6, 0x02, 0xE7, 0x02, 0x27, 0x07, 0x67, 0x03, 0x87, 0x03, - 0xC7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x07, 0xE9, 0x0F, 0xEF, 0x23, 0xF6, 0x4F, 0xFE, 0x77, - 0x43, 0x00, 0x40, 0x00, 0xFD, 0x77, 0xFC, 0x6F, 0xF6, 0x4F, 0xEF, 0x27, 0xE8, 0x03, 0xE4, 0x03, - 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, - 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x47, 0x03, 0x27, 0x03, 0x06, 0x03, 0x06, 0x03, 0xE6, 0x02, - 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xC6, 0x02, 0x85, 0x02, 0x65, 0x02, 0x24, 0x02, 0x04, 0x02, - 0x04, 0x02, 0x05, 0x02, 0x25, 0x02, 0x45, 0x06, 0x85, 0x06, 0xC6, 0x02, 0x06, 0x03, 0x46, 0x03, - 0x87, 0x03, 0xA7, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xE7, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xEA, 0x07, 0xF1, 0x33, 0xF8, 0x5B, 0xFC, 0x6F, - 0xFD, 0x77, 0xFF, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xFE, 0x77, 0xF9, 0x5B, 0xF5, 0x43, 0xEF, 0x2F, - 0xEB, 0x13, 0xE7, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x26, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x65, 0x02, - 0x45, 0x02, 0x45, 0x02, 0x45, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, - 0xC4, 0x01, 0xA3, 0x05, 0x83, 0x05, 0x63, 0x01, 0x83, 0x01, 0x83, 0x05, 0xA3, 0x01, 0xE4, 0x01, - 0x24, 0x02, 0x65, 0x02, 0xC6, 0x02, 0x26, 0x03, 0x67, 0x03, 0xA7, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, - 0xEC, 0x1B, 0xF1, 0x37, 0xF5, 0x47, 0xF9, 0x5F, 0xFD, 0x73, 0x3F, 0x00, 0x41, 0x00, 0xFC, 0x6B, - 0xF4, 0x43, 0xED, 0x1B, 0xE9, 0x0F, 0xE8, 0x07, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x86, 0x03, 0x26, 0x03, 0xA5, 0x02, - 0x24, 0x02, 0xE4, 0x01, 0xC4, 0x01, 0x84, 0x01, 0x84, 0x01, 0x84, 0x01, 0x83, 0x01, 0x63, 0x01, - 0x63, 0x01, 0x63, 0x01, 0x43, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x02, 0x05, 0x02, 0x05, - 0x02, 0x05, 0x22, 0x01, 0x43, 0x01, 0x83, 0x01, 0xC4, 0x01, 0x25, 0x02, 0xA6, 0x02, 0x06, 0x03, - 0x67, 0x03, 0xA7, 0x03, 0xC8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x0B, 0xEA, 0x13, 0xEE, 0x23, 0xF5, 0x47, 0xFC, 0x6B, - 0x39, 0x00, 0x47, 0x00, 0xFF, 0x7B, 0xFE, 0x77, 0xFD, 0x73, 0xFC, 0x73, 0xFD, 0x73, 0xFD, 0x73, - 0xF7, 0x4F, 0xEF, 0x23, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x66, 0x03, 0xE5, 0x02, 0x85, 0x02, - 0x04, 0x02, 0x83, 0x01, 0x43, 0x01, 0x23, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, - 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x04, 0xE3, 0x04, 0xE3, 0x08, 0xE2, 0x08, 0xC2, 0x08, - 0xC2, 0x04, 0xC1, 0x04, 0xC1, 0x04, 0xE2, 0x00, 0x03, 0x01, 0x23, 0x01, 0xA4, 0x01, 0x05, 0x02, - 0x65, 0x02, 0xE6, 0x02, 0x46, 0x03, 0x87, 0x03, 0xC8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE5, 0x03, 0xE5, 0x03, 0xEA, 0x07, 0xF2, 0x37, - 0xFB, 0x67, 0x39, 0x00, 0x47, 0x00, 0xFD, 0x73, 0xF8, 0x5B, 0xF5, 0x47, 0xF4, 0x47, 0xF4, 0x47, - 0xF5, 0x47, 0xF1, 0x2F, 0xEC, 0x13, 0xE7, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, - 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x47, 0x03, 0x46, 0x03, 0x26, 0x03, 0xC5, 0x02, 0x64, 0x02, - 0xE4, 0x01, 0x83, 0x01, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xC3, 0x04, 0xE3, 0x04, 0xE3, 0x00, - 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, - 0xE2, 0x08, 0xC2, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0x03, 0x01, 0x43, 0x01, - 0xA4, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x47, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE5, 0x03, 0xE4, 0x03, 0xE9, 0x03, - 0xF2, 0x33, 0xFA, 0x67, 0x39, 0x00, 0x47, 0x00, 0xFA, 0x63, 0xF3, 0x3B, 0xED, 0x1B, 0xEB, 0x1B, - 0xEC, 0x1B, 0xED, 0x1B, 0xEB, 0x13, 0xEA, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, - 0x87, 0x03, 0x46, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x44, 0x02, - 0xC4, 0x01, 0x63, 0x01, 0x03, 0x05, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xE3, 0x04, - 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x08, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, - 0x23, 0x09, 0x03, 0x05, 0x03, 0x05, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xE3, 0x04, 0xE3, 0x04, - 0x23, 0x01, 0x43, 0x01, 0x83, 0x05, 0xE4, 0x05, 0x66, 0x02, 0x07, 0x03, 0x88, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, 0x4A, 0x00, 0xFF, 0x7B, 0xFE, 0x77, 0xFC, 0x6F, - 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0xA7, 0x03, 0x66, 0x03, 0x26, 0x03, 0x06, 0x03, 0xC5, 0x02, 0x85, 0x02, 0x65, 0x06, - 0x44, 0x06, 0x04, 0x02, 0xE3, 0x01, 0x83, 0x01, 0x43, 0x01, 0x03, 0x05, 0xC3, 0x04, 0xC3, 0x08, - 0xC3, 0x08, 0xE3, 0x08, 0x04, 0x09, 0x03, 0x09, 0x03, 0x05, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, - 0x23, 0x09, 0x23, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, 0x03, 0x09, - 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x63, 0x05, - 0xE5, 0x05, 0x86, 0x02, 0x27, 0x03, 0xA8, 0x03, 0xC7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, - 0x4A, 0x00, 0xFD, 0x6F, 0xF9, 0x5B, 0xF5, 0x47, 0xEF, 0x2B, 0xEA, 0x0B, 0xE6, 0x03, 0xE4, 0x03, - 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x47, 0x03, 0xE6, 0x02, 0xA5, 0x02, - 0x65, 0x02, 0x24, 0x02, 0x04, 0x06, 0xE4, 0x05, 0xA3, 0x05, 0x83, 0x01, 0x43, 0x01, 0x22, 0x01, - 0xE2, 0x04, 0xC2, 0x04, 0xA2, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x24, 0x09, 0x24, 0x09, - 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x44, 0x09, 0x64, 0x09, 0x65, 0x09, 0x65, 0x09, - 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x03, 0x09, - 0x23, 0x09, 0x03, 0x09, 0xE3, 0x04, 0x23, 0x05, 0x83, 0x01, 0x25, 0x02, 0xC6, 0x02, 0x47, 0x03, - 0xA7, 0x03, 0xC7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x36, 0x00, 0x4A, 0x00, 0xFA, 0x5F, 0xF3, 0x3B, 0xED, 0x1F, - 0xE9, 0x13, 0xE8, 0x07, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, - 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x24, 0x02, 0xE4, 0x05, 0xA3, 0x05, 0x63, 0x05, 0x63, 0x05, - 0x43, 0x01, 0x23, 0x01, 0x02, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xC2, 0x08, 0xE3, 0x08, - 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, 0x65, 0x09, 0x65, 0x09, 0x65, 0x09, 0x64, 0x09, - 0x64, 0x09, 0x85, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x23, 0x0D, 0xE3, 0x0C, - 0xC3, 0x08, 0xC3, 0x08, 0x03, 0x09, 0x24, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, - 0x63, 0x01, 0xE3, 0x01, 0x65, 0x02, 0x06, 0x03, 0x67, 0x03, 0xC8, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x34, 0x00, - 0x4C, 0x00, 0xFF, 0x7B, 0xFC, 0x6F, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x46, 0x03, 0xC6, 0x02, 0x45, 0x02, - 0xE5, 0x01, 0x84, 0x05, 0x63, 0x05, 0x23, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0xE3, 0x00, - 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, - 0x65, 0x09, 0x86, 0x09, 0x86, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0xA6, 0x0D, - 0xA6, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x24, 0x0D, 0x03, 0x0D, 0xE3, 0x0C, 0xE3, 0x08, - 0x24, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x03, 0x05, 0xE2, 0x04, 0x22, 0x01, 0xA3, 0x01, - 0x24, 0x02, 0xC5, 0x02, 0x47, 0x03, 0xA8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x0F, 0xF3, 0x3B, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFE, 0x7B, - 0xFC, 0x6B, 0xF9, 0x5B, 0xF5, 0x4B, 0xEF, 0x2B, 0xEA, 0x0B, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x46, 0x03, 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, - 0x64, 0x01, 0x43, 0x05, 0x23, 0x05, 0x03, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x05, 0x04, 0x05, - 0xE3, 0x04, 0xE3, 0x04, 0x03, 0x09, 0x03, 0x09, 0x23, 0x0D, 0x44, 0x0D, 0x44, 0x0D, 0x65, 0x0D, - 0x85, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xA6, 0x11, 0xC6, 0x11, - 0xC7, 0x0D, 0xA7, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x0D, 0x04, 0x0D, 0x04, 0x0D, - 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x44, 0x09, 0x03, 0x05, 0xE2, 0x04, 0x22, 0x01, 0x63, 0x01, - 0x04, 0x02, 0xA5, 0x02, 0x26, 0x03, 0xA7, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE5, 0x03, 0xE4, 0x03, 0xE9, 0x07, 0xF2, 0x37, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x77, - 0xF8, 0x57, 0xF2, 0x37, 0xED, 0x23, 0xEA, 0x13, 0xE9, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x27, 0x03, 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x63, 0x01, - 0x23, 0x01, 0x03, 0x05, 0x23, 0x05, 0x23, 0x09, 0x24, 0x09, 0x45, 0x09, 0x45, 0x09, 0x45, 0x09, - 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x0D, 0x64, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x86, 0x0D, - 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, - 0xC6, 0x11, 0xA6, 0x0D, 0xA6, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x45, 0x0D, 0x45, 0x0D, 0x45, 0x0D, - 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x09, 0x44, 0x09, 0x03, 0x05, 0xE3, 0x04, 0x23, 0x01, 0x83, 0x01, - 0x04, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x87, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, - 0xE4, 0x03, 0xE3, 0x03, 0xE8, 0x03, 0xF1, 0x33, 0xFA, 0x63, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x73, - 0xF5, 0x47, 0xED, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xC8, 0x03, - 0xA7, 0x03, 0x66, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x25, 0x06, 0xA4, 0x05, 0x43, 0x05, 0x02, 0x01, - 0xE2, 0x04, 0x03, 0x05, 0x23, 0x05, 0x44, 0x09, 0x65, 0x09, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, - 0x65, 0x09, 0x85, 0x09, 0x84, 0x09, 0x84, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x86, 0x0D, - 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x11, 0x85, 0x11, 0xA6, 0x11, 0xA6, 0x11, - 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x66, 0x11, 0x65, 0x0D, - 0x65, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x04, 0x05, 0x03, 0x05, 0x44, 0x01, 0x84, 0x01, - 0x05, 0x02, 0xA6, 0x02, 0x26, 0x03, 0x87, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE6, 0x03, 0xE6, 0x03, 0xEB, 0x13, 0xF3, 0x3B, 0xFB, 0x67, 0x32, 0x00, 0x4E, 0x00, 0xFC, 0x6F, - 0xF4, 0x3F, 0xEB, 0x0F, 0xE5, 0x03, 0xE4, 0x03, 0xE7, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, - 0x46, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x04, 0x02, 0xA4, 0x05, 0x23, 0x05, 0xE2, 0x04, 0xC2, 0x04, - 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x64, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, - 0x85, 0x0D, 0x85, 0x09, 0x85, 0x09, 0x85, 0x09, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x0D, - 0x65, 0x0D, 0x45, 0x0D, 0x44, 0x09, 0x24, 0x0D, 0x24, 0x0D, 0x24, 0x0D, 0x44, 0x11, 0x65, 0x11, - 0x85, 0x11, 0x86, 0x11, 0xA6, 0x11, 0x87, 0x11, 0x87, 0x0D, 0x87, 0x0D, 0x86, 0x11, 0x86, 0x0D, - 0x85, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x24, 0x09, 0x04, 0x05, 0x04, 0x01, 0x44, 0x01, 0xC4, 0x01, - 0x45, 0x02, 0xC6, 0x02, 0x46, 0x03, 0xA7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE9, 0x07, - 0xEA, 0x17, 0xED, 0x23, 0xF1, 0x33, 0xF7, 0x53, 0xFC, 0x6F, 0x32, 0x00, 0x4E, 0x00, 0xFD, 0x6F, - 0xF4, 0x43, 0xEC, 0x13, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0x26, 0x03, - 0xC6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x23, 0x05, 0xE2, 0x04, 0xC2, 0x04, 0xC2, 0x04, - 0xC2, 0x08, 0x03, 0x09, 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x11, 0x85, 0x0D, 0x85, 0x0D, - 0x85, 0x09, 0x85, 0x09, 0x85, 0x09, 0x65, 0x09, 0x65, 0x09, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, - 0x24, 0x09, 0x04, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xC2, 0x08, 0xE3, 0x0C, 0x03, 0x0D, - 0x44, 0x0D, 0x65, 0x11, 0x86, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x0D, 0xA6, 0x0D, 0x85, 0x0D, - 0x85, 0x0D, 0x65, 0x0D, 0x45, 0x09, 0x24, 0x09, 0x04, 0x05, 0x23, 0x01, 0x64, 0x01, 0xE5, 0x01, - 0x86, 0x02, 0x06, 0x03, 0x67, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xEB, 0x0F, - 0xEF, 0x2B, 0xF4, 0x4B, 0xF8, 0x5B, 0xFB, 0x6B, 0xFE, 0x77, 0x32, 0x00, 0x4B, 0x00, 0xFD, 0x73, - 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x46, 0x03, 0xA5, 0x02, - 0x24, 0x02, 0xA4, 0x01, 0x23, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xC2, 0x08, 0xA2, 0x08, 0xC2, 0x08, - 0xE3, 0x08, 0x24, 0x0D, 0x64, 0x0D, 0x85, 0x11, 0x85, 0x11, 0x85, 0x0D, 0x85, 0x0D, 0x85, 0x0D, - 0x85, 0x09, 0x65, 0x09, 0x65, 0x05, 0x65, 0x05, 0x64, 0x05, 0x44, 0x05, 0x43, 0x05, 0x23, 0x05, - 0xE3, 0x04, 0xC3, 0x04, 0xA3, 0x04, 0x62, 0x04, 0x61, 0x04, 0x41, 0x04, 0x81, 0x08, 0xA2, 0x08, - 0x03, 0x0D, 0x44, 0x0D, 0x66, 0x11, 0x87, 0x11, 0xA7, 0x11, 0xC7, 0x0D, 0xA6, 0x0D, 0xA5, 0x0D, - 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x03, 0x05, 0x23, 0x01, 0xA4, 0x01, 0x25, 0x02, - 0xC6, 0x02, 0x47, 0x03, 0x87, 0x03, 0xA8, 0x03, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, 0xEC, 0x13, - 0xF4, 0x3F, 0xFB, 0x6B, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, - 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xC8, 0x03, 0x87, 0x03, 0x26, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x83, 0x01, 0x02, 0x01, 0xA2, 0x00, - 0x82, 0x04, 0xA2, 0x04, 0xA2, 0x08, 0xC2, 0x08, 0xE3, 0x08, 0x24, 0x0D, 0x44, 0x0D, 0x64, 0x0D, - 0x65, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x44, 0x0D, 0x64, 0x09, 0x64, 0x09, 0x64, 0x05, 0x84, 0x05, - 0x84, 0x05, 0x84, 0x05, 0x64, 0x01, 0x43, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xA2, 0x04, 0x82, 0x04, - 0x41, 0x04, 0x21, 0x04, 0x21, 0x04, 0x41, 0x04, 0x81, 0x08, 0xC2, 0x08, 0x24, 0x0D, 0x65, 0x0D, - 0x86, 0x0D, 0xC7, 0x11, 0xC6, 0x0D, 0xC6, 0x0D, 0xA5, 0x0D, 0x84, 0x0D, 0x44, 0x09, 0x24, 0x09, - 0x23, 0x05, 0x23, 0x05, 0x64, 0x01, 0xE4, 0x01, 0x66, 0x02, 0x06, 0x03, 0x67, 0x03, 0x88, 0x03, - 0xA8, 0x03, 0xC7, 0x03, 0xC5, 0x03, 0xC5, 0x03, 0xEB, 0x13, 0xF5, 0x47, 0xFE, 0x77, 0x35, 0x00, - 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xEC, 0x1B, 0xE6, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x47, 0x03, 0xC6, 0x02, - 0x24, 0x02, 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x82, 0x04, 0xA2, 0x08, 0xC3, 0x08, - 0xE3, 0x08, 0x24, 0x0D, 0x44, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x64, 0x0D, 0x44, 0x0D, 0x24, 0x0D, - 0x24, 0x09, 0x24, 0x09, 0x44, 0x05, 0x63, 0x05, 0x84, 0x01, 0x84, 0x01, 0xA4, 0x01, 0x83, 0x01, - 0x63, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC1, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x21, 0x04, - 0x41, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x44, 0x0D, 0x86, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, - 0xC5, 0x0D, 0xA5, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x23, 0x05, 0x23, 0x05, 0x43, 0x05, 0xA4, 0x05, - 0x25, 0x02, 0xA6, 0x02, 0x27, 0x03, 0x87, 0x03, 0xA8, 0x03, 0xA7, 0x03, 0xC6, 0x03, 0xC4, 0x03, - 0xC4, 0x03, 0xEA, 0x0B, 0xF4, 0x3F, 0xFD, 0x73, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF4, 0x47, - 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0x68, 0x03, 0xE6, 0x02, 0x25, 0x02, 0x84, 0x05, 0xE2, 0x04, 0xA1, 0x00, - 0x81, 0x00, 0x61, 0x00, 0x82, 0x04, 0xA3, 0x08, 0xE4, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x85, 0x0D, - 0x85, 0x09, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, 0x24, 0x09, 0x24, 0x09, 0x43, 0x05, 0x63, 0x05, - 0x83, 0x01, 0xA3, 0x01, 0xE3, 0x01, 0xE4, 0x01, 0xC3, 0x01, 0xA3, 0x01, 0x63, 0x01, 0x42, 0x01, - 0x02, 0x01, 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x41, 0x04, 0x61, 0x04, 0x82, 0x04, - 0xE3, 0x04, 0x24, 0x09, 0x85, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, 0xC5, 0x0D, 0xA5, 0x0D, 0x64, 0x09, - 0x23, 0x09, 0x03, 0x05, 0x23, 0x05, 0x63, 0x05, 0xC4, 0x05, 0x65, 0x02, 0xC6, 0x02, 0x47, 0x03, - 0x87, 0x03, 0xA7, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xC5, 0x03, 0xC5, 0x03, 0xEB, 0x0F, 0xF4, 0x3F, - 0xFC, 0x6B, 0x35, 0x00, 0x4B, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xEC, 0x1B, 0xE6, 0x03, 0xE6, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x06, 0x03, - 0x45, 0x02, 0xA4, 0x01, 0x02, 0x05, 0x82, 0x04, 0x81, 0x04, 0x81, 0x00, 0x82, 0x04, 0xA2, 0x04, - 0xC3, 0x08, 0x04, 0x09, 0x44, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x44, 0x09, 0x44, 0x09, - 0x44, 0x05, 0x64, 0x05, 0x84, 0x05, 0xA4, 0x05, 0xC3, 0x01, 0x03, 0x02, 0x24, 0x02, 0x44, 0x02, - 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x04, 0x02, 0xC3, 0x01, 0xA3, 0x01, 0x63, 0x01, 0x02, 0x01, - 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x44, 0x09, 0x85, 0x0D, - 0xA6, 0x0D, 0xA6, 0x11, 0xA5, 0x0D, 0x85, 0x0D, 0x44, 0x09, 0x23, 0x05, 0x02, 0x05, 0x23, 0x01, - 0x63, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x67, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0x86, 0x03, - 0xA7, 0x07, 0xC9, 0x13, 0xEB, 0x1B, 0xF1, 0x2F, 0xF7, 0x4F, 0xFD, 0x73, 0x35, 0x00, 0x4B, 0x00, - 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x26, 0x03, 0xA5, 0x02, 0xE4, 0x01, 0x42, 0x01, 0xC2, 0x00, - 0x61, 0x00, 0x82, 0x04, 0xC2, 0x04, 0xC3, 0x04, 0xC3, 0x04, 0xC3, 0x08, 0x03, 0x09, 0x44, 0x09, - 0x64, 0x09, 0x85, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, 0x64, 0x05, 0xA4, 0x05, 0x04, 0x02, - 0x44, 0x02, 0x64, 0x02, 0x84, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, - 0xA5, 0x02, 0x65, 0x02, 0x45, 0x02, 0x04, 0x02, 0x83, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x41, 0x00, - 0x81, 0x04, 0xE2, 0x08, 0x24, 0x09, 0x65, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xA6, 0x11, 0x85, 0x0D, - 0x65, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, 0x23, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x45, 0x02, - 0xC6, 0x02, 0x46, 0x03, 0x86, 0x03, 0x85, 0x03, 0x86, 0x03, 0xA9, 0x0F, 0xCE, 0x2B, 0xF3, 0x43, - 0xF7, 0x53, 0xFB, 0x67, 0xFE, 0x77, 0x35, 0x00, 0x4A, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, - 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, 0x67, 0x03, - 0xE6, 0x02, 0x24, 0x02, 0x63, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x81, 0x00, 0xC3, 0x04, 0x04, 0x05, - 0x04, 0x09, 0x04, 0x09, 0x03, 0x05, 0x03, 0x09, 0x43, 0x09, 0x64, 0x09, 0x64, 0x09, 0x24, 0x09, - 0x03, 0x09, 0x24, 0x05, 0x84, 0x05, 0x04, 0x02, 0x85, 0x02, 0xC5, 0x02, 0x05, 0x03, 0x26, 0x03, - 0x46, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x27, 0x03, 0x07, 0x03, 0xE7, 0x02, - 0xA6, 0x02, 0x04, 0x02, 0x43, 0x01, 0xA1, 0x00, 0x61, 0x00, 0xA2, 0x04, 0x03, 0x09, 0x44, 0x0D, - 0x65, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x66, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x03, 0x05, - 0x23, 0x05, 0x43, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xC5, 0x02, 0x46, 0x03, 0x86, 0x03, - 0x84, 0x03, 0x85, 0x03, 0xAB, 0x17, 0xD3, 0x3F, 0xFB, 0x67, 0xFE, 0x77, 0xFE, 0x7B, 0x36, 0x00, - 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, 0x26, 0x03, 0x85, 0x02, 0xC3, 0x01, 0x02, 0x01, 0xA1, 0x00, - 0x61, 0x00, 0x62, 0x04, 0xC3, 0x04, 0x25, 0x09, 0x45, 0x09, 0x44, 0x09, 0x24, 0x09, 0x23, 0x09, - 0x23, 0x09, 0x43, 0x09, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, 0x84, 0x05, 0x04, 0x02, 0x65, 0x02, - 0x05, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x88, 0x03, 0xA8, 0x03, - 0xA8, 0x03, 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x27, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, - 0x81, 0x00, 0xA2, 0x04, 0x03, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x24, 0x0D, - 0x04, 0x09, 0x04, 0x09, 0xE3, 0x08, 0x03, 0x05, 0x23, 0x05, 0x63, 0x01, 0xA4, 0x01, 0x05, 0x02, - 0x85, 0x02, 0xE6, 0x02, 0x46, 0x03, 0x85, 0x03, 0x83, 0x03, 0x84, 0x03, 0xAC, 0x1B, 0xD5, 0x4B, - 0xFF, 0x7B, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x06, 0x03, 0x45, 0x02, 0x83, 0x01, - 0xE2, 0x00, 0x81, 0x00, 0x61, 0x04, 0x82, 0x04, 0xE4, 0x08, 0x45, 0x09, 0x66, 0x09, 0x65, 0x09, - 0x45, 0x09, 0x24, 0x09, 0x23, 0x09, 0x03, 0x05, 0x23, 0x05, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, - 0x65, 0x02, 0xC6, 0x02, 0x26, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, - 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x47, 0x03, 0xA5, 0x02, - 0xC4, 0x01, 0x22, 0x01, 0xA2, 0x00, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x08, 0xC3, 0x08, 0xC3, 0x08, - 0xC3, 0x08, 0xC3, 0x08, 0xA3, 0x08, 0xC3, 0x08, 0xC2, 0x04, 0xE2, 0x04, 0x22, 0x01, 0x83, 0x01, - 0xE4, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x47, 0x03, 0x85, 0x03, 0x82, 0x03, 0x63, 0x03, - 0x8A, 0x13, 0xD5, 0x47, 0xFE, 0x7B, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, 0xF5, 0x47, 0xED, 0x1B, - 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0xC5, 0x02, - 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0x82, 0x00, 0x62, 0x04, 0x83, 0x08, 0xE4, 0x08, 0x45, 0x09, - 0x66, 0x09, 0x86, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x03, 0x09, 0x03, 0x05, 0x22, 0x01, 0x63, 0x01, - 0xE4, 0x01, 0x65, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x47, 0x03, 0x68, 0x03, 0x68, 0x03, 0x87, 0x03, - 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, - 0x67, 0x03, 0xC5, 0x02, 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0xA2, 0x00, 0xA2, 0x00, 0x81, 0x04, - 0x81, 0x04, 0x81, 0x04, 0x81, 0x04, 0x81, 0x04, 0x82, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0x02, 0x01, - 0x63, 0x01, 0xC3, 0x01, 0x24, 0x02, 0xA6, 0x02, 0x07, 0x03, 0x47, 0x03, 0x67, 0x03, 0x86, 0x03, - 0x63, 0x03, 0x64, 0x03, 0x8B, 0x13, 0xD4, 0x43, 0xFD, 0x73, 0x38, 0x00, 0x48, 0x00, 0xFD, 0x73, - 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, - 0x46, 0x03, 0x85, 0x02, 0xC4, 0x01, 0x03, 0x01, 0xA2, 0x00, 0x82, 0x04, 0x82, 0x04, 0xC3, 0x08, - 0x04, 0x09, 0x65, 0x09, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x03, 0x09, 0xE2, 0x04, - 0x22, 0x01, 0xA3, 0x01, 0x44, 0x02, 0xC5, 0x02, 0x26, 0x03, 0x47, 0x03, 0x88, 0x03, 0x88, 0x03, - 0x68, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x66, 0x03, 0x66, 0x03, 0x66, 0x03, - 0x66, 0x03, 0x87, 0x03, 0x66, 0x03, 0x06, 0x03, 0x85, 0x02, 0xE4, 0x01, 0x63, 0x01, 0x23, 0x01, - 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x61, 0x00, 0x41, 0x00, 0x41, 0x00, 0x61, 0x04, 0xA2, 0x04, - 0x02, 0x01, 0x42, 0x01, 0xC3, 0x01, 0x44, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x47, 0x03, 0x67, 0x03, - 0x67, 0x03, 0x88, 0x07, 0x88, 0x0B, 0x8A, 0x13, 0xAF, 0x2B, 0xD6, 0x4F, 0xFD, 0x73, 0x38, 0x00, - 0x48, 0x00, 0xFF, 0x7B, 0xF6, 0x4F, 0xEE, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0xA8, 0x03, 0x26, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x82, 0x00, - 0xA2, 0x04, 0xC3, 0x08, 0x24, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x0D, - 0x23, 0x09, 0x02, 0x05, 0x62, 0x05, 0xE3, 0x01, 0x85, 0x02, 0x26, 0x03, 0x67, 0x03, 0x87, 0x03, - 0x87, 0x03, 0x88, 0x03, 0x68, 0x03, 0x47, 0x03, 0x47, 0x03, 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, - 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, 0x86, 0x03, 0x87, 0x03, 0x46, 0x03, 0x06, 0x03, 0x85, 0x02, - 0x24, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x00, 0x41, 0x00, - 0x81, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xA3, 0x01, 0x25, 0x02, 0xA5, 0x02, 0xE6, 0x02, 0x27, 0x03, - 0x47, 0x03, 0x66, 0x03, 0x67, 0x03, 0x8A, 0x0F, 0xAD, 0x27, 0xB2, 0x3B, 0xD6, 0x4F, 0xFA, 0x63, - 0xFE, 0x7B, 0x38, 0x00, 0x47, 0x00, 0xFF, 0x7B, 0xF6, 0x4F, 0xEE, 0x1B, 0xE7, 0x03, 0xE6, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x06, 0x03, 0x24, 0x02, 0x63, 0x01, 0xC1, 0x00, - 0x61, 0x00, 0x81, 0x00, 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, - 0x44, 0x0D, 0x44, 0x09, 0x23, 0x09, 0x22, 0x05, 0x83, 0x05, 0x24, 0x02, 0xC5, 0x02, 0x46, 0x03, - 0x66, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x47, 0x03, 0x27, 0x03, 0x06, 0x03, 0x06, 0x03, - 0x05, 0x03, 0xE5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x66, 0x03, - 0x46, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x64, 0x02, 0x04, 0x02, 0x83, 0x01, 0xE2, 0x00, 0xA2, 0x00, - 0x62, 0x00, 0x81, 0x00, 0xC2, 0x00, 0x42, 0x01, 0xC4, 0x01, 0x25, 0x02, 0xA6, 0x02, 0x07, 0x03, - 0x27, 0x03, 0x47, 0x03, 0x66, 0x03, 0x65, 0x03, 0x67, 0x03, 0xAC, 0x1B, 0xD3, 0x3F, 0xFA, 0x63, - 0xFC, 0x6F, 0xFE, 0x77, 0x37, 0x00, 0x46, 0x00, 0xFE, 0x7B, 0xFD, 0x73, 0xFA, 0x63, 0xF3, 0x3F, - 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x47, 0x03, 0xA6, 0x02, - 0xE4, 0x01, 0x22, 0x01, 0x81, 0x00, 0x61, 0x00, 0x82, 0x00, 0xE3, 0x04, 0x23, 0x09, 0x44, 0x0D, - 0x64, 0x0D, 0x65, 0x11, 0x44, 0x0D, 0x44, 0x0D, 0x23, 0x09, 0x23, 0x09, 0x22, 0x05, 0x83, 0x05, - 0x04, 0x02, 0x85, 0x02, 0x06, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xC6, 0x02, - 0xA6, 0x02, 0x85, 0x02, 0x85, 0x02, 0x65, 0x02, 0x64, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, - 0xC5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0xC5, 0x02, 0x85, 0x02, - 0x04, 0x02, 0x83, 0x01, 0x23, 0x01, 0xE2, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xC3, 0x01, 0x24, 0x02, - 0xA6, 0x02, 0x07, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x64, 0x03, 0x86, 0x03, - 0xAD, 0x1F, 0xD7, 0x53, 0x39, 0x00, 0x47, 0x00, 0xFE, 0x77, 0xFA, 0x63, 0xF6, 0x4F, 0xF2, 0x3F, - 0xEE, 0x27, 0xEA, 0x0F, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x67, 0x03, 0x06, 0x03, - 0x65, 0x02, 0xA3, 0x01, 0xE2, 0x00, 0x61, 0x00, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x08, 0x24, 0x09, - 0x64, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x03, 0x09, 0x02, 0x05, 0x22, 0x05, - 0x62, 0x01, 0xC3, 0x01, 0x24, 0x02, 0x85, 0x02, 0x85, 0x02, 0x84, 0x02, 0x64, 0x02, 0x44, 0x02, - 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0xE4, 0x01, 0x04, 0x02, - 0x04, 0x02, 0x24, 0x02, 0x44, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xE6, 0x02, 0x06, 0x03, - 0xE5, 0x02, 0xA5, 0x02, 0x24, 0x02, 0xA4, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC4, 0x01, 0x24, 0x02, - 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x67, 0x03, 0x68, 0x03, 0x88, 0x03, 0x86, 0x03, 0x63, 0x03, - 0x84, 0x03, 0xAC, 0x1B, 0xD6, 0x4F, 0x39, 0x00, 0x48, 0x00, 0xFC, 0x6F, 0xF6, 0x4F, 0xEF, 0x2B, - 0xEA, 0x17, 0xE8, 0x0F, 0xE8, 0x07, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x47, 0x03, - 0xC6, 0x02, 0x24, 0x02, 0x63, 0x01, 0xC2, 0x00, 0x61, 0x04, 0x62, 0x04, 0xA3, 0x08, 0x04, 0x09, - 0x44, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x65, 0x0D, 0x44, 0x0D, 0x04, 0x09, 0xE3, 0x08, 0xE3, 0x04, - 0x02, 0x01, 0x22, 0x01, 0x62, 0x01, 0xA3, 0x01, 0xE3, 0x01, 0xE3, 0x01, 0xE3, 0x01, 0xC3, 0x05, - 0xA3, 0x01, 0x83, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x63, 0x01, 0x84, 0x01, - 0x84, 0x01, 0x84, 0x01, 0x83, 0x01, 0x83, 0x01, 0xC3, 0x01, 0xE4, 0x01, 0x45, 0x06, 0x85, 0x02, - 0xE6, 0x02, 0x06, 0x03, 0xE6, 0x02, 0xA5, 0x02, 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x45, 0x02, - 0x85, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x46, 0x03, 0x67, 0x03, 0x67, 0x03, 0x88, 0x03, 0x85, 0x03, - 0x83, 0x03, 0x83, 0x03, 0xAB, 0x17, 0xD5, 0x4B, 0xFE, 0x77, 0x38, 0x00, 0x48, 0x00, 0xFB, 0x6B, - 0xF3, 0x3F, 0xEA, 0x0F, 0xE4, 0x03, 0xE4, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xA8, 0x03, 0x26, 0x03, 0x85, 0x02, 0xC3, 0x01, 0x22, 0x01, 0xA1, 0x00, 0x61, 0x04, 0x62, 0x04, - 0xA3, 0x08, 0x04, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x04, 0x0D, - 0xE4, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x02, 0x01, 0x22, 0x01, 0x43, 0x01, 0x63, 0x01, 0x63, 0x05, - 0x63, 0x05, 0x42, 0x05, 0x42, 0x05, 0x22, 0x05, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x23, 0x05, - 0x23, 0x05, 0x23, 0x05, 0x44, 0x05, 0x44, 0x05, 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x83, 0x05, - 0xC4, 0x05, 0x25, 0x06, 0x85, 0x02, 0xC5, 0x02, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, - 0xC6, 0x02, 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, - 0x87, 0x03, 0x87, 0x03, 0x86, 0x07, 0x88, 0x0B, 0xAE, 0x27, 0xD6, 0x4F, 0xFD, 0x77, 0x38, 0x00, - 0x48, 0x00, 0xFB, 0x6B, 0xF2, 0x3B, 0xE9, 0x0B, 0xE4, 0x03, 0xE4, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x06, 0x03, 0x64, 0x02, 0xA3, 0x01, 0x02, 0x01, 0x81, 0x00, - 0x41, 0x04, 0x41, 0x04, 0x82, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x65, 0x0D, - 0x45, 0x0D, 0x25, 0x0D, 0x24, 0x09, 0x04, 0x09, 0x24, 0x05, 0x23, 0x05, 0x23, 0x05, 0x43, 0x05, - 0x43, 0x05, 0x43, 0x05, 0x43, 0x09, 0x43, 0x09, 0x43, 0x09, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, - 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x05, 0x44, 0x05, 0x44, 0x05, 0x44, 0x05, 0x23, 0x05, - 0x43, 0x05, 0x43, 0x05, 0x84, 0x05, 0xC4, 0x05, 0x04, 0x06, 0x44, 0x02, 0xA5, 0x02, 0xC5, 0x02, - 0xE5, 0x02, 0x06, 0x03, 0x06, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x66, 0x03, 0x66, 0x03, - 0x66, 0x03, 0x66, 0x03, 0x87, 0x03, 0x89, 0x0F, 0xAC, 0x23, 0xD0, 0x33, 0xD4, 0x47, 0xF9, 0x63, - 0xFE, 0x7B, 0x38, 0x00, 0x47, 0x00, 0xFC, 0x6B, 0xF3, 0x3F, 0xEB, 0x13, 0xE6, 0x03, 0xE5, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x06, 0x03, 0x44, 0x02, 0x83, 0x01, - 0xE1, 0x00, 0x81, 0x00, 0x61, 0x00, 0x41, 0x00, 0x81, 0x04, 0xC2, 0x04, 0x03, 0x09, 0x24, 0x0D, - 0x45, 0x0D, 0x66, 0x11, 0x65, 0x11, 0x45, 0x0D, 0x45, 0x0D, 0x45, 0x09, 0x45, 0x09, 0x44, 0x05, - 0x44, 0x05, 0x44, 0x09, 0x63, 0x09, 0x63, 0x09, 0x63, 0x09, 0x84, 0x09, 0x84, 0x09, 0x85, 0x09, - 0x85, 0x09, 0x85, 0x05, 0x84, 0x09, 0x64, 0x05, 0x64, 0x05, 0x64, 0x05, 0x84, 0x05, 0x84, 0x05, - 0x85, 0x05, 0x85, 0x05, 0x64, 0x05, 0x64, 0x05, 0x63, 0x05, 0x63, 0x05, 0x83, 0x05, 0xA3, 0x05, - 0x04, 0x06, 0x65, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, - 0x67, 0x03, 0x86, 0x03, 0x85, 0x03, 0x64, 0x03, 0x86, 0x03, 0x8C, 0x1B, 0xB2, 0x3F, 0xF8, 0x5F, - 0xFB, 0x6B, 0xFD, 0x73, 0x39, 0x00, 0x44, 0x00, 0xFC, 0x6B, 0xF4, 0x43, 0xEC, 0x13, 0xE7, 0x03, - 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x05, 0x03, 0x64, 0x02, - 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0xA2, 0x04, 0xE3, 0x08, - 0x04, 0x09, 0x45, 0x0D, 0x66, 0x11, 0x66, 0x11, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x09, - 0x65, 0x09, 0x44, 0x09, 0x44, 0x09, 0x43, 0x09, 0x63, 0x09, 0x64, 0x09, 0x64, 0x09, 0x84, 0x09, - 0x85, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, - 0xA5, 0x09, 0xA5, 0x09, 0xA6, 0x09, 0x85, 0x09, 0x64, 0x05, 0x44, 0x05, 0x43, 0x05, 0x22, 0x05, - 0x42, 0x05, 0x83, 0x05, 0x04, 0x02, 0x65, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x47, 0x03, 0x67, 0x03, - 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x85, 0x03, 0x84, 0x03, 0x86, 0x03, 0xAE, 0x27, 0xD7, 0x57, - 0x3C, 0x00, 0x44, 0x00, 0xFC, 0x6B, 0xF3, 0x3B, 0xEB, 0x0F, 0xE5, 0x03, 0xE5, 0x03, 0xE8, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x26, 0x03, 0x84, 0x02, 0xC3, 0x01, 0x22, 0x01, - 0xA1, 0x00, 0x61, 0x00, 0x41, 0x04, 0x82, 0x04, 0xC2, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x45, 0x0D, - 0x65, 0x0D, 0x66, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x65, 0x09, 0x44, 0x09, - 0x44, 0x09, 0x23, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, - 0x85, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, - 0xA6, 0x09, 0xA5, 0x09, 0x85, 0x09, 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x23, 0x09, 0x63, 0x05, - 0xA3, 0x01, 0x04, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, - 0x87, 0x03, 0x85, 0x03, 0x84, 0x03, 0x87, 0x03, 0xAF, 0x27, 0xF8, 0x5B, 0x3C, 0x00, 0x44, 0x00, - 0xFB, 0x6B, 0xF3, 0x3B, 0xEA, 0x0B, 0xE4, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE9, 0x03, 0xE9, 0x03, - 0xE9, 0x03, 0xC8, 0x03, 0x46, 0x03, 0xC5, 0x02, 0x03, 0x02, 0x42, 0x01, 0xC2, 0x00, 0x61, 0x04, - 0x62, 0x04, 0x82, 0x08, 0xC3, 0x08, 0x04, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x0D, 0x85, 0x0D, - 0x86, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x65, 0x09, 0x64, 0x09, 0x44, 0x09, 0x23, 0x09, 0x03, 0x09, - 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x04, 0x03, 0x05, 0x44, 0x05, 0x85, 0x09, - 0xA6, 0x0D, 0xC6, 0x0D, 0xA6, 0x0D, 0x85, 0x0D, 0xA5, 0x0D, 0xA5, 0x09, 0xA5, 0x09, 0xA5, 0x09, - 0xA5, 0x0D, 0xA5, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x43, 0x09, 0x63, 0x05, 0x83, 0x01, 0xA3, 0x01, - 0x24, 0x02, 0x85, 0x02, 0x06, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA5, 0x03, - 0xA4, 0x03, 0xA7, 0x03, 0xCF, 0x27, 0xF8, 0x57, 0x3C, 0x00, 0x45, 0x00, 0xFC, 0x6F, 0xF4, 0x43, - 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xC8, 0x03, - 0x67, 0x03, 0x06, 0x03, 0x64, 0x02, 0xA3, 0x01, 0x22, 0x01, 0xA2, 0x04, 0x82, 0x04, 0xA3, 0x08, - 0xE3, 0x08, 0x04, 0x09, 0x24, 0x09, 0x44, 0x09, 0x64, 0x09, 0x65, 0x09, 0x65, 0x0D, 0x65, 0x0D, - 0x65, 0x09, 0x64, 0x09, 0x43, 0x05, 0x43, 0x05, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xA3, 0x04, - 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0xC2, 0x04, 0x03, 0x05, 0x45, 0x09, 0xA6, 0x0D, 0xC6, 0x0D, - 0xA6, 0x0D, 0x86, 0x0D, 0xA6, 0x0D, 0xA5, 0x0D, 0xA5, 0x0D, 0xC5, 0x0D, 0xC6, 0x0D, 0xC6, 0x0D, - 0xA6, 0x0D, 0x85, 0x09, 0x64, 0x09, 0x63, 0x05, 0x43, 0x01, 0x63, 0x01, 0xA3, 0x01, 0x24, 0x02, - 0xC6, 0x02, 0x47, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xC7, 0x03, - 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, 0x45, 0x00, 0xFD, 0x73, 0xF8, 0x57, 0xF2, 0x37, - 0xEE, 0x27, 0xEB, 0x17, 0xEA, 0x0B, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA7, 0x03, - 0x47, 0x03, 0xC6, 0x02, 0x24, 0x02, 0xA3, 0x01, 0x23, 0x01, 0xC2, 0x04, 0xC3, 0x04, 0xE3, 0x04, - 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, - 0x44, 0x05, 0x43, 0x05, 0x43, 0x05, 0x23, 0x01, 0x02, 0x01, 0xC2, 0x00, 0x82, 0x04, 0x61, 0x04, - 0x41, 0x04, 0x41, 0x04, 0x81, 0x04, 0xC2, 0x04, 0x24, 0x09, 0x65, 0x09, 0x86, 0x0D, 0xA6, 0x0D, - 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xC6, 0x0D, 0xC6, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x0D, - 0xA6, 0x09, 0x85, 0x09, 0x64, 0x05, 0x23, 0x05, 0x22, 0x05, 0x63, 0x01, 0xE4, 0x01, 0x85, 0x02, - 0x06, 0x03, 0x67, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, - 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, 0x45, 0x00, 0xFE, 0x7B, 0xFC, 0x6B, 0xF9, 0x5F, 0xF6, 0x4F, - 0xF0, 0x2F, 0xEB, 0x13, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0x87, 0x03, - 0x27, 0x03, 0xA5, 0x02, 0x24, 0x02, 0x83, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC2, 0x04, 0xA2, 0x04, - 0xA2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0x03, 0x05, 0x03, 0x05, 0x03, 0x01, - 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x22, 0x01, 0xC2, 0x00, 0x81, 0x00, 0x41, 0x00, 0x20, 0x00, - 0x40, 0x04, 0x61, 0x04, 0xA2, 0x04, 0xE3, 0x04, 0x24, 0x09, 0x65, 0x0D, 0x85, 0x0D, 0xA6, 0x11, - 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x0D, 0xA6, 0x0D, 0xA6, 0x09, - 0x85, 0x09, 0x65, 0x05, 0x44, 0x05, 0x23, 0x05, 0x63, 0x05, 0xC3, 0x01, 0x44, 0x02, 0xE5, 0x02, - 0x46, 0x03, 0x86, 0x03, 0xC7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, - 0xFE, 0x7B, 0x3E, 0x00, 0x42, 0x00, 0xFC, 0x6F, 0xF5, 0x47, 0xED, 0x1B, 0xE7, 0x03, 0xE5, 0x03, - 0xE7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x24, 0x02, - 0x83, 0x01, 0x43, 0x01, 0xE2, 0x00, 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0xE2, 0x04, - 0x02, 0x01, 0x02, 0x01, 0x23, 0x01, 0x23, 0x01, 0x43, 0x01, 0x83, 0x01, 0x83, 0x01, 0x62, 0x01, - 0x02, 0x01, 0xA1, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x04, 0x41, 0x04, 0x81, 0x04, 0xA2, 0x04, - 0x03, 0x09, 0x44, 0x09, 0x85, 0x0D, 0xC6, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x11, - 0xC7, 0x11, 0xA7, 0x0D, 0xA6, 0x09, 0xA6, 0x09, 0x86, 0x09, 0x65, 0x09, 0x44, 0x09, 0x23, 0x09, - 0x43, 0x05, 0xA3, 0x05, 0x24, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x86, 0x03, 0xC7, 0x03, 0xE6, 0x03, - 0xE4, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xF6, 0x4F, - 0xED, 0x1F, 0xE6, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, - 0x67, 0x03, 0x06, 0x03, 0xA5, 0x02, 0x24, 0x02, 0xC4, 0x01, 0x63, 0x01, 0x23, 0x01, 0x22, 0x01, - 0x42, 0x05, 0x42, 0x05, 0x62, 0x01, 0x63, 0x01, 0x83, 0x01, 0xA4, 0x01, 0xC4, 0x01, 0xE4, 0x01, - 0x04, 0x02, 0x24, 0x02, 0x03, 0x02, 0xA3, 0x01, 0x22, 0x01, 0xC1, 0x00, 0x60, 0x00, 0x40, 0x00, - 0x20, 0x04, 0x61, 0x04, 0xA2, 0x04, 0x03, 0x09, 0x44, 0x0D, 0x85, 0x11, 0xC6, 0x11, 0xC7, 0x15, - 0xC7, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x0D, 0xA6, 0x0D, 0x86, 0x09, 0x65, 0x09, - 0x44, 0x05, 0x24, 0x05, 0x03, 0x09, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, 0x85, 0x02, 0x06, 0x03, - 0x66, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, - 0x3E, 0x00, 0x42, 0x00, 0xFE, 0x7B, 0xF6, 0x4B, 0xED, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x46, 0x03, 0x06, 0x03, 0xA5, 0x02, - 0x45, 0x02, 0x05, 0x02, 0xE4, 0x01, 0xC4, 0x01, 0xC3, 0x01, 0xE3, 0x01, 0x04, 0x02, 0x24, 0x02, - 0x45, 0x02, 0x45, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0x84, 0x02, 0x44, 0x02, - 0xE3, 0x01, 0x42, 0x01, 0xC1, 0x00, 0x40, 0x00, 0x20, 0x00, 0x41, 0x04, 0xA2, 0x04, 0x24, 0x09, - 0x65, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, - 0xC7, 0x11, 0xA6, 0x0D, 0x85, 0x09, 0x44, 0x09, 0x24, 0x05, 0x03, 0x05, 0x03, 0x05, 0x43, 0x05, - 0x83, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x66, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, - 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3E, 0x00, 0x42, 0x00, 0xFD, 0x73, 0xF4, 0x47, - 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xA7, 0x03, - 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x85, 0x02, 0x65, 0x02, - 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x26, 0x03, - 0x46, 0x03, 0x46, 0x03, 0x26, 0x03, 0xC5, 0x02, 0x64, 0x06, 0xC3, 0x05, 0x02, 0x01, 0x60, 0x00, - 0x20, 0x00, 0x41, 0x04, 0xC3, 0x08, 0x45, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xC6, 0x11, 0xC6, 0x11, - 0xA6, 0x11, 0x86, 0x0D, 0x87, 0x0D, 0xA7, 0x11, 0xC7, 0x11, 0xA6, 0x0D, 0x65, 0x0D, 0x24, 0x09, - 0x03, 0x05, 0x02, 0x05, 0x03, 0x05, 0x43, 0x01, 0x84, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xE6, 0x02, - 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, - 0x3E, 0x00, 0x42, 0x00, 0xFD, 0x77, 0xF5, 0x4B, 0xEC, 0x1B, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x87, 0x03, 0x47, 0x03, - 0x27, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x27, 0x03, - 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x06, 0x03, - 0x85, 0x02, 0xC3, 0x05, 0x02, 0x01, 0x61, 0x00, 0x20, 0x00, 0x62, 0x04, 0xE3, 0x08, 0x65, 0x0D, - 0xA6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xA6, 0x11, 0xA7, 0x0D, 0xA7, 0x0D, 0xA7, 0x11, - 0xA6, 0x11, 0x86, 0x0D, 0x44, 0x09, 0x03, 0x09, 0xE2, 0x04, 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, - 0x83, 0x01, 0xC4, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, - 0xE8, 0x03, 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3F, 0x00, 0x41, 0x00, 0xF6, 0x4F, 0xED, 0x1B, - 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA7, 0x03, - 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x26, 0x03, 0x26, 0x03, 0x06, 0x03, 0x06, 0x03, - 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0xA8, 0x03, - 0xA8, 0x03, 0x67, 0x03, 0xE6, 0x02, 0x44, 0x02, 0x83, 0x01, 0xE2, 0x00, 0x61, 0x00, 0x41, 0x00, - 0x82, 0x04, 0x03, 0x09, 0x85, 0x0D, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x11, - 0xC7, 0x11, 0xA7, 0x0D, 0xA7, 0x11, 0x86, 0x11, 0x65, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, - 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, 0x63, 0x05, 0xA3, 0x01, 0x24, 0x02, 0xC5, 0x02, 0x46, 0x03, - 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3E, 0x00, - 0x42, 0x00, 0xFE, 0x77, 0xF6, 0x4B, 0xED, 0x1B, 0xE7, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x88, 0x03, 0x87, 0x03, 0x67, 0x03, 0x46, 0x03, - 0x46, 0x03, 0x26, 0x03, 0x26, 0x03, 0x27, 0x03, 0x27, 0x03, 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, - 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x88, 0x03, 0x88, 0x03, 0x27, 0x03, 0x85, 0x02, 0xE3, 0x01, - 0x22, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x62, 0x04, 0xA3, 0x08, 0x24, 0x09, 0xA5, 0x0D, 0xC5, 0x11, - 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xE7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x86, 0x11, - 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x04, 0x02, 0x05, 0x43, 0x05, 0x83, 0x05, - 0xC3, 0x01, 0x44, 0x02, 0xC5, 0x02, 0x46, 0x03, 0xC7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3C, 0x00, 0x44, 0x00, 0xFE, 0x77, 0xFC, 0x6B, 0xF8, 0x5B, - 0xF2, 0x3B, 0xEC, 0x17, 0xE7, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0x88, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x46, 0x03, - 0x47, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, - 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0xE6, 0x02, 0x44, 0x02, 0x83, 0x01, 0xE2, 0x00, 0xA1, 0x00, - 0x82, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x44, 0x0D, 0xA5, 0x11, 0xC5, 0x11, 0xC6, 0x11, 0xC6, 0x11, - 0xC7, 0x11, 0xE7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x04, 0x09, - 0xE3, 0x04, 0xE2, 0x04, 0xE2, 0x04, 0x03, 0x05, 0x43, 0x05, 0x83, 0x05, 0xE4, 0x01, 0x64, 0x02, - 0xE5, 0x02, 0x46, 0x03, 0xA7, 0x03, 0xE6, 0x03, 0xE5, 0x03, 0xE7, 0x03, 0xEE, 0x23, 0xF7, 0x53, - 0xFE, 0x7B, 0x3C, 0x00, 0x44, 0x00, 0xFB, 0x63, 0xF5, 0x47, 0xF1, 0x33, 0xED, 0x1F, 0xEA, 0x0B, - 0xE8, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, - 0xA8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, - 0x67, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, - 0x27, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x42, 0x01, 0xC1, 0x00, 0xA1, 0x04, 0xA2, 0x04, 0xE3, 0x04, - 0x24, 0x09, 0x64, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, - 0xC7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x24, 0x09, 0xE3, 0x04, 0xE2, 0x04, - 0xE2, 0x04, 0xE3, 0x04, 0x43, 0x05, 0xA4, 0x05, 0x04, 0x06, 0x85, 0x02, 0x06, 0x03, 0x66, 0x03, - 0xA7, 0x03, 0xC6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x3B, 0x00, - 0x45, 0x00, 0xFE, 0x77, 0xF6, 0x4F, 0xEF, 0x23, 0xE9, 0x0F, 0xE8, 0x0B, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xC7, 0x03, 0xC8, 0x03, - 0xC8, 0x03, 0xA8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x67, 0x03, 0x67, 0x03, 0x66, 0x03, 0x67, 0x03, - 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x87, 0x03, 0x46, 0x03, 0x26, 0x03, 0xE6, 0x02, - 0x44, 0x02, 0xA3, 0x01, 0x22, 0x05, 0xC1, 0x04, 0xC2, 0x04, 0xE2, 0x04, 0x23, 0x05, 0x64, 0x09, - 0x85, 0x0D, 0xA5, 0x11, 0xA6, 0x11, 0xA6, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xC7, 0x11, 0xC6, 0x11, - 0xA6, 0x11, 0xA6, 0x11, 0x66, 0x11, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0xE2, 0x04, 0xE2, 0x00, - 0xE3, 0x00, 0x44, 0x01, 0xA4, 0x05, 0x25, 0x06, 0xA6, 0x06, 0x26, 0x03, 0x66, 0x03, 0xA7, 0x03, - 0xC6, 0x03, 0xC5, 0x03, 0xC8, 0x03, 0xCF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x39, 0x00, 0x47, 0x00, - 0xFE, 0x77, 0xFC, 0x6F, 0xF8, 0x5B, 0xF1, 0x33, 0xEA, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, - 0x66, 0x03, 0x87, 0x03, 0x87, 0x03, 0x67, 0x03, 0x47, 0x03, 0x26, 0x03, 0xE5, 0x02, 0xA5, 0x02, - 0x64, 0x02, 0xE4, 0x01, 0x63, 0x01, 0x02, 0x05, 0xE2, 0x08, 0xE3, 0x08, 0x23, 0x09, 0x64, 0x09, - 0x85, 0x0D, 0xA5, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA7, 0x15, 0xA7, 0x11, 0xA7, 0x11, 0xA6, 0x11, - 0xA6, 0x11, 0xA6, 0x11, 0x85, 0x11, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x05, 0x03, 0x05, - 0xE3, 0x04, 0x03, 0x01, 0x44, 0x01, 0xC4, 0x01, 0x45, 0x06, 0xE6, 0x06, 0x46, 0x03, 0x66, 0x03, - 0x87, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x39, 0x00, - 0x47, 0x00, 0xFA, 0x63, 0xF6, 0x4B, 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE6, 0x03, 0xE6, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC7, 0x03, 0xC7, 0x03, - 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x46, 0x03, 0x06, 0x03, 0xC6, 0x02, 0x65, 0x02, - 0x04, 0x02, 0xE4, 0x01, 0x83, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x09, 0x24, 0x09, 0x64, 0x09, - 0x85, 0x0D, 0xA5, 0x0D, 0xC6, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x87, 0x11, 0x87, 0x11, 0x86, 0x11, - 0xA6, 0x11, 0xA6, 0x11, 0xA5, 0x11, 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x24, 0x09, - 0x24, 0x09, 0x03, 0x05, 0x03, 0x05, 0x43, 0x05, 0xC4, 0x01, 0x65, 0x02, 0x06, 0x03, 0x46, 0x03, - 0x66, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, - 0x38, 0x00, 0x48, 0x00, 0xFE, 0x73, 0xF6, 0x4B, 0xEF, 0x23, 0xE9, 0x13, 0xE8, 0x0B, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC7, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x66, 0x03, 0x06, 0x03, 0xA6, 0x02, - 0x45, 0x02, 0xC4, 0x01, 0x83, 0x01, 0x63, 0x01, 0x43, 0x05, 0x43, 0x05, 0x44, 0x05, 0x65, 0x09, - 0x65, 0x0D, 0x85, 0x0D, 0xA5, 0x11, 0xC6, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0x87, 0x11, - 0x66, 0x11, 0x86, 0x15, 0xA6, 0x15, 0xA6, 0x11, 0x85, 0x11, 0x64, 0x0D, 0x24, 0x09, 0x23, 0x09, - 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, 0x23, 0x09, 0x23, 0x05, 0x63, 0x05, 0xE4, 0x01, 0x85, 0x02, - 0x06, 0x03, 0x66, 0x03, 0x66, 0x03, 0x87, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, - 0xF6, 0x53, 0xFE, 0x7B, 0x36, 0x00, 0x4A, 0x00, 0xFE, 0x77, 0xFD, 0x73, 0xF8, 0x5B, 0xF0, 0x2F, - 0xE9, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0xC8, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0x86, 0x03, - 0x46, 0x03, 0x06, 0x03, 0x85, 0x02, 0x25, 0x02, 0xC4, 0x01, 0x64, 0x01, 0x23, 0x01, 0x23, 0x05, - 0x23, 0x05, 0x44, 0x05, 0x65, 0x09, 0xA6, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xC6, 0x11, 0xC7, 0x11, - 0xE7, 0x11, 0xE8, 0x11, 0xC8, 0x11, 0x87, 0x11, 0x87, 0x15, 0x86, 0x15, 0x86, 0x11, 0xA6, 0x11, - 0x85, 0x11, 0x44, 0x0D, 0x23, 0x09, 0x03, 0x05, 0x23, 0x09, 0x44, 0x09, 0x44, 0x09, 0x43, 0x09, - 0x63, 0x05, 0xA3, 0x05, 0x24, 0x02, 0xA5, 0x02, 0x26, 0x03, 0x66, 0x03, 0x86, 0x03, 0x87, 0x03, - 0xA5, 0x03, 0xA4, 0x03, 0xA6, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, - 0xFD, 0x73, 0xF9, 0x5F, 0xF6, 0x4B, 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x67, 0x03, - 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x66, 0x03, 0x26, 0x03, 0xE5, 0x02, 0x85, 0x02, 0x04, 0x02, - 0xC4, 0x01, 0x84, 0x01, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x85, 0x0D, - 0xA6, 0x0D, 0xC7, 0x11, 0xC6, 0x11, 0xC6, 0x11, 0xC7, 0x15, 0xE7, 0x15, 0xE8, 0x15, 0xC8, 0x15, - 0xA8, 0x15, 0x87, 0x15, 0x86, 0x15, 0x86, 0x11, 0x85, 0x11, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, - 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x43, 0x05, 0x63, 0x05, 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, - 0xE6, 0x02, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, - 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFB, 0x67, 0xF5, 0x43, 0xEE, 0x23, - 0xEA, 0x13, 0xE9, 0x0B, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC7, 0x03, 0xA8, 0x03, 0x67, 0x03, 0x27, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xE5, 0x02, 0x05, 0x03, - 0x05, 0x03, 0xC5, 0x02, 0x65, 0x02, 0x04, 0x06, 0xA4, 0x05, 0x64, 0x05, 0x63, 0x05, 0x43, 0x05, - 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x65, 0x0D, 0xA6, 0x0D, 0xC7, 0x11, 0xC7, 0x11, 0xC6, 0x11, - 0xC6, 0x11, 0xC7, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC7, 0x15, 0xA7, 0x11, - 0x86, 0x11, 0x85, 0x0D, 0x64, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x04, 0x09, 0xE3, 0x04, 0xE3, 0x04, - 0x23, 0x05, 0x83, 0x01, 0xE3, 0x01, 0x64, 0x02, 0xC5, 0x02, 0x06, 0x03, 0x47, 0x03, 0x67, 0x03, - 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, - 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x5F, 0xF1, 0x33, 0xE9, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x67, 0x03, 0x27, 0x03, 0xE6, 0x02, - 0x86, 0x02, 0x65, 0x02, 0x44, 0x02, 0x44, 0x02, 0x64, 0x02, 0x65, 0x02, 0x24, 0x02, 0xE4, 0x05, - 0x84, 0x05, 0x43, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x23, 0x05, 0x44, 0x09, 0x64, 0x09, - 0x85, 0x0D, 0xA6, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x15, - 0xC8, 0x15, 0xC8, 0x15, 0xC8, 0x15, 0xC7, 0x15, 0xA7, 0x11, 0x86, 0x11, 0x65, 0x0D, 0x44, 0x09, - 0x24, 0x09, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x04, 0xE2, 0x04, 0x42, 0x01, 0xA3, 0x01, 0x24, 0x02, - 0xA5, 0x02, 0x06, 0x03, 0x27, 0x03, 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0x86, 0x03, - 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x5F, - 0xF1, 0x2F, 0xE8, 0x03, 0xE4, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xC8, 0x03, - 0xA7, 0x03, 0x46, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x45, 0x02, 0xE5, 0x01, 0xC4, 0x01, 0xC4, 0x01, - 0xA4, 0x01, 0xC4, 0x01, 0xC4, 0x01, 0xA4, 0x05, 0x63, 0x05, 0x43, 0x05, 0x03, 0x09, 0x03, 0x09, - 0x03, 0x09, 0x24, 0x09, 0x44, 0x09, 0x65, 0x09, 0x85, 0x0D, 0xA6, 0x0D, 0xC7, 0x11, 0xC7, 0x11, - 0xC7, 0x11, 0xE7, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, 0xC7, 0x15, - 0xC7, 0x11, 0xA7, 0x11, 0xA6, 0x11, 0x85, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x04, 0x09, 0x03, 0x05, - 0xE2, 0x04, 0x02, 0x01, 0x62, 0x01, 0xE3, 0x01, 0x65, 0x02, 0xE6, 0x02, 0x26, 0x03, 0x47, 0x03, - 0x67, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA6, 0x03, 0xA5, 0x03, 0xA7, 0x03, 0xCE, 0x23, - 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x33, 0xEA, 0x07, 0xE6, 0x03, - 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x87, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, - 0x05, 0x02, 0xA4, 0x01, 0x64, 0x01, 0x44, 0x05, 0x44, 0x05, 0x43, 0x05, 0x43, 0x05, 0x43, 0x05, - 0x43, 0x05, 0x43, 0x05, 0x23, 0x09, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x24, 0x09, 0x45, 0x09, - 0x65, 0x09, 0x86, 0x0D, 0xA7, 0x0D, 0xC7, 0x11, 0xC8, 0x11, 0xC8, 0x11, 0xE8, 0x11, 0xC8, 0x11, - 0xC7, 0x11, 0xC7, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0xA7, 0x11, 0x86, 0x11, - 0x86, 0x0D, 0x65, 0x0D, 0x24, 0x09, 0x03, 0x09, 0x03, 0x05, 0x02, 0x01, 0x22, 0x01, 0x83, 0x01, - 0x04, 0x02, 0x85, 0x02, 0x06, 0x03, 0x46, 0x03, 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x86, 0x03, - 0xA7, 0x03, 0xA5, 0x03, 0xA4, 0x03, 0xA7, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, - 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0xA8, 0x03, 0x67, 0x03, - 0x27, 0x03, 0xE6, 0x02, 0xA6, 0x02, 0x45, 0x02, 0xC4, 0x01, 0x64, 0x01, 0x23, 0x01, 0xE3, 0x04, - 0xE3, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, - 0x23, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x09, 0x25, 0x0D, 0x66, 0x0D, 0x86, 0x0D, 0xA7, 0x0D, - 0xC7, 0x11, 0xC7, 0x11, 0xC8, 0x11, 0xC7, 0x11, 0xC7, 0x11, 0xA7, 0x11, 0xA6, 0x11, 0xA6, 0x0D, - 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x45, 0x0D, 0x24, 0x09, - 0x03, 0x05, 0x02, 0x05, 0x22, 0x01, 0x63, 0x01, 0xE3, 0x01, 0x45, 0x02, 0xC6, 0x02, 0x27, 0x03, - 0x47, 0x03, 0x46, 0x03, 0x46, 0x03, 0x66, 0x03, 0x86, 0x03, 0xA7, 0x03, 0xA5, 0x03, 0xA4, 0x03, - 0xC7, 0x03, 0xCE, 0x23, 0xF6, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, - 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0x87, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x85, 0x02, 0x45, 0x02, 0x04, 0x02, - 0xC4, 0x01, 0x63, 0x01, 0x23, 0x05, 0x03, 0x05, 0xE3, 0x04, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, - 0x03, 0x09, 0x03, 0x09, 0x04, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x24, 0x0D, 0x04, 0x0D, 0xE3, 0x08, - 0xE3, 0x08, 0x04, 0x09, 0x45, 0x09, 0x66, 0x0D, 0xA6, 0x11, 0xA7, 0x11, 0xC7, 0x11, 0xA7, 0x11, - 0xA6, 0x11, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, 0x86, 0x0D, - 0x66, 0x0D, 0x65, 0x0D, 0x45, 0x0D, 0x24, 0x09, 0x03, 0x09, 0x03, 0x05, 0x22, 0x05, 0x63, 0x01, - 0xC3, 0x01, 0x24, 0x02, 0x85, 0x02, 0xE6, 0x02, 0x27, 0x03, 0x47, 0x03, 0x46, 0x03, 0x66, 0x03, - 0x67, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xC4, 0x03, 0xC7, 0x03, 0xCE, 0x23, 0xF7, 0x53, - 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF1, 0x37, 0xEA, 0x0B, 0xE5, 0x03, 0xE6, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE7, 0x03, 0xC7, 0x03, 0xA7, 0x03, 0x26, 0x03, - 0xC5, 0x02, 0x65, 0x02, 0xE4, 0x01, 0x83, 0x01, 0x63, 0x01, 0x43, 0x01, 0x23, 0x05, 0x03, 0x05, - 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, 0x23, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, - 0x65, 0x0D, 0x65, 0x0D, 0x65, 0x0D, 0x24, 0x0D, 0xE3, 0x08, 0xC3, 0x08, 0xE3, 0x08, 0x04, 0x09, - 0x45, 0x0D, 0x86, 0x11, 0xA6, 0x11, 0xA6, 0x15, 0x86, 0x11, 0x65, 0x0D, 0x45, 0x0D, 0x45, 0x0D, - 0x65, 0x0D, 0x86, 0x11, 0x86, 0x11, 0x86, 0x0D, 0x86, 0x0D, 0x65, 0x0D, 0x45, 0x09, 0x24, 0x09, - 0x03, 0x09, 0x03, 0x09, 0x02, 0x05, 0x63, 0x05, 0xA3, 0x01, 0x24, 0x02, 0x85, 0x02, 0xC5, 0x02, - 0xE6, 0x02, 0x26, 0x03, 0x47, 0x03, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, - 0xA6, 0x03, 0xC5, 0x03, 0xC7, 0x03, 0xEE, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, - 0xFA, 0x63, 0xF1, 0x37, 0xE9, 0x0B, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xC7, 0x03, 0x87, 0x03, 0x46, 0x03, 0xA5, 0x02, 0x24, 0x02, 0xC3, 0x05, 0x42, 0x05, - 0x02, 0x05, 0xE2, 0x00, 0xE2, 0x00, 0xC2, 0x04, 0xE2, 0x08, 0x03, 0x09, 0x03, 0x09, 0x23, 0x09, - 0x43, 0x09, 0x44, 0x09, 0x64, 0x09, 0x64, 0x09, 0x85, 0x09, 0xA6, 0x0D, 0xA6, 0x11, 0x86, 0x0D, - 0x24, 0x0D, 0xE3, 0x08, 0xC2, 0x04, 0xC3, 0x04, 0xE3, 0x08, 0x24, 0x0D, 0x65, 0x0D, 0x86, 0x11, - 0xA6, 0x11, 0x85, 0x11, 0x44, 0x0D, 0x24, 0x09, 0x24, 0x09, 0x45, 0x0D, 0x65, 0x0D, 0x66, 0x0D, - 0x65, 0x0D, 0x65, 0x0D, 0x44, 0x09, 0x24, 0x09, 0x03, 0x05, 0x02, 0x05, 0x22, 0x05, 0x42, 0x05, - 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, 0xC5, 0x02, 0xE5, 0x02, 0x05, 0x03, 0x26, 0x03, 0x46, 0x03, - 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA6, 0x03, 0xC5, 0x03, 0xC8, 0x03, - 0xEF, 0x23, 0xF7, 0x53, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF1, 0x37, 0xEA, 0x0B, - 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xA7, 0x03, 0x46, 0x03, - 0xC5, 0x02, 0x24, 0x02, 0xA3, 0x01, 0x42, 0x05, 0xE2, 0x04, 0xA2, 0x04, 0xA2, 0x04, 0xA2, 0x04, - 0xA2, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xE3, 0x04, 0x03, 0x05, 0x44, 0x09, 0x65, 0x09, - 0x85, 0x0D, 0xA6, 0x0D, 0xA6, 0x11, 0xA7, 0x11, 0x86, 0x11, 0x45, 0x0D, 0x04, 0x09, 0xE3, 0x08, - 0xC3, 0x08, 0xE4, 0x08, 0x04, 0x09, 0x45, 0x0D, 0x85, 0x11, 0x85, 0x11, 0x85, 0x0D, 0x44, 0x09, - 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x45, 0x0D, 0x45, 0x0D, 0x44, 0x0D, 0x24, 0x0D, 0x23, 0x09, - 0x03, 0x05, 0x03, 0x05, 0x22, 0x01, 0x62, 0x01, 0xA3, 0x05, 0x04, 0x02, 0x65, 0x02, 0xA5, 0x02, - 0x06, 0x03, 0x06, 0x03, 0x05, 0x03, 0x26, 0x03, 0x26, 0x03, 0x47, 0x03, 0x67, 0x03, 0x87, 0x03, - 0x87, 0x03, 0xA7, 0x03, 0xC5, 0x03, 0xC4, 0x03, 0xC6, 0x03, 0xED, 0x1F, 0xF6, 0x4F, 0xFE, 0x7B, - 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE6, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0x87, 0x03, 0x06, 0x03, 0x65, 0x02, 0xC3, 0x01, 0x42, 0x01, - 0x02, 0x05, 0xC2, 0x08, 0xA2, 0x08, 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0x61, 0x04, 0x81, 0x04, - 0x81, 0x00, 0xA2, 0x04, 0xC3, 0x04, 0x04, 0x09, 0x45, 0x0D, 0x86, 0x0D, 0xA6, 0x11, 0xC6, 0x11, - 0xA6, 0x11, 0x86, 0x0D, 0x65, 0x0D, 0x25, 0x09, 0x04, 0x09, 0xE4, 0x08, 0xE4, 0x08, 0x04, 0x09, - 0x45, 0x0D, 0x65, 0x0D, 0x85, 0x0D, 0x85, 0x0D, 0x64, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, - 0x24, 0x09, 0x23, 0x09, 0x03, 0x09, 0x03, 0x09, 0x02, 0x09, 0x02, 0x05, 0x22, 0x01, 0x63, 0x01, - 0xC3, 0x01, 0x04, 0x02, 0x64, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, - 0x26, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x87, 0x03, 0xA7, 0x03, 0xA7, 0x03, 0xC5, 0x03, - 0xC2, 0x03, 0xC4, 0x03, 0xEC, 0x1B, 0xF6, 0x4B, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, - 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, - 0x67, 0x03, 0xC6, 0x02, 0x04, 0x02, 0x62, 0x01, 0x02, 0x01, 0xC2, 0x04, 0xA2, 0x08, 0x82, 0x08, - 0xA2, 0x08, 0x82, 0x04, 0x61, 0x04, 0x40, 0x00, 0x40, 0x00, 0x41, 0x00, 0x62, 0x00, 0xA3, 0x04, - 0xE4, 0x08, 0x25, 0x0D, 0x66, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x66, 0x0D, - 0x45, 0x0D, 0x25, 0x09, 0x05, 0x09, 0x04, 0x09, 0x04, 0x09, 0x24, 0x09, 0x45, 0x09, 0x65, 0x0D, - 0x64, 0x09, 0x64, 0x09, 0x44, 0x09, 0x43, 0x05, 0x43, 0x05, 0x23, 0x05, 0x03, 0x05, 0x02, 0x05, - 0xE2, 0x04, 0x02, 0x05, 0x22, 0x05, 0x63, 0x01, 0xC3, 0x01, 0x24, 0x02, 0x64, 0x02, 0xA5, 0x02, - 0xC6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, - 0x66, 0x03, 0x86, 0x03, 0xA7, 0x03, 0xC7, 0x03, 0xC5, 0x03, 0xC4, 0x03, 0xC6, 0x03, 0xEE, 0x23, - 0xF6, 0x4F, 0xFE, 0x7B, 0x35, 0x00, 0x4B, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0x47, 0x03, 0x85, 0x02, 0xC3, 0x01, - 0x02, 0x01, 0xA1, 0x00, 0x81, 0x04, 0x61, 0x04, 0x61, 0x08, 0x62, 0x04, 0x62, 0x04, 0x41, 0x04, - 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x62, 0x04, 0xA3, 0x04, 0xE4, 0x08, 0x25, 0x0D, 0x45, 0x0D, - 0x86, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x66, 0x0D, 0x45, 0x0D, 0x25, 0x09, - 0x04, 0x09, 0x04, 0x09, 0x24, 0x09, 0x24, 0x09, 0x44, 0x09, 0x44, 0x09, 0x44, 0x09, 0x23, 0x05, - 0x23, 0x05, 0x23, 0x05, 0x22, 0x05, 0x22, 0x05, 0x22, 0x05, 0x43, 0x05, 0x63, 0x05, 0x83, 0x01, - 0xC3, 0x01, 0x24, 0x02, 0x64, 0x02, 0xA5, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, - 0x06, 0x03, 0x06, 0x03, 0x05, 0x03, 0x25, 0x03, 0x45, 0x03, 0x65, 0x03, 0x85, 0x03, 0x85, 0x03, - 0xA6, 0x03, 0xC7, 0x07, 0xC9, 0x17, 0xED, 0x23, 0xF3, 0x3F, 0xF9, 0x5F, 0xFF, 0x7B, 0x35, 0x00, - 0x4A, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xE8, 0x03, 0xC8, 0x03, 0x46, 0x03, 0x65, 0x02, 0xA3, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x60, 0x04, - 0x40, 0x04, 0x21, 0x04, 0x41, 0x04, 0x41, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, - 0x82, 0x04, 0xC4, 0x08, 0x04, 0x0D, 0x04, 0x0D, 0x24, 0x0D, 0x65, 0x0D, 0x85, 0x11, 0xA6, 0x11, - 0xA6, 0x11, 0xA6, 0x11, 0x86, 0x11, 0x45, 0x0D, 0x25, 0x09, 0x24, 0x09, 0x04, 0x09, 0x04, 0x09, - 0x24, 0x09, 0x24, 0x09, 0x04, 0x09, 0x03, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x22, 0x05, - 0x43, 0x05, 0x63, 0x05, 0xA4, 0x01, 0xE4, 0x01, 0x04, 0x02, 0x44, 0x02, 0x84, 0x02, 0xA5, 0x02, - 0xC6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0xE6, 0x02, 0x06, 0x03, 0x05, 0x03, - 0x25, 0x03, 0x24, 0x03, 0x44, 0x03, 0x63, 0x03, 0x82, 0x03, 0xA4, 0x03, 0xC9, 0x13, 0xCF, 0x33, - 0xF6, 0x4F, 0xF9, 0x5F, 0xFC, 0x6F, 0x36, 0x00, 0x49, 0x00, 0xFA, 0x63, 0xF2, 0x37, 0xEA, 0x0B, - 0xE6, 0x03, 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC7, 0x03, 0x46, 0x03, 0x65, 0x02, - 0xA3, 0x01, 0xE2, 0x00, 0x81, 0x00, 0x61, 0x04, 0x40, 0x04, 0x40, 0x04, 0x60, 0x00, 0x61, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x01, 0x04, 0x42, 0x04, 0xA3, 0x08, 0xE4, 0x0C, 0x04, 0x0D, 0x04, 0x09, - 0x04, 0x09, 0x24, 0x0D, 0x65, 0x11, 0x86, 0x11, 0xA6, 0x15, 0x86, 0x11, 0x65, 0x0D, 0x45, 0x0D, - 0x24, 0x09, 0x04, 0x09, 0x03, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x03, 0x09, 0xE3, 0x04, - 0xE2, 0x04, 0x02, 0x05, 0x22, 0x05, 0x62, 0x05, 0xA3, 0x05, 0xC4, 0x01, 0x05, 0x02, 0x45, 0x02, - 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, - 0xE5, 0x02, 0xE5, 0x02, 0xE5, 0x02, 0x06, 0x03, 0x26, 0x03, 0x46, 0x03, 0x66, 0x03, 0x65, 0x03, - 0x83, 0x03, 0xA6, 0x03, 0xCE, 0x27, 0xF6, 0x53, 0xFE, 0x77, 0xFF, 0x7B, 0x37, 0x00, 0x47, 0x00, - 0xFA, 0x63, 0xF1, 0x33, 0xEA, 0x07, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xE8, 0x03, - 0xC8, 0x03, 0x46, 0x03, 0xA5, 0x02, 0x04, 0x02, 0x43, 0x01, 0x02, 0x01, 0xE1, 0x00, 0xA1, 0x00, - 0xA1, 0x00, 0xA1, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x21, 0x00, 0x21, 0x04, 0x42, 0x04, 0x83, 0x08, - 0xC4, 0x08, 0x04, 0x09, 0x03, 0x09, 0x03, 0x09, 0x24, 0x09, 0x44, 0x0D, 0x65, 0x11, 0x65, 0x11, - 0x65, 0x0D, 0x44, 0x0D, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xE3, 0x08, 0xE3, 0x08, 0x03, 0x09, - 0x03, 0x05, 0x23, 0x05, 0x23, 0x05, 0x43, 0x01, 0x63, 0x01, 0x83, 0x01, 0xC3, 0x01, 0x04, 0x02, - 0x25, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, - 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC4, 0x02, 0xE4, 0x02, 0x05, 0x03, 0x28, 0x0B, - 0x4B, 0x17, 0x8D, 0x1F, 0x8C, 0x1F, 0xAA, 0x1F, 0xAD, 0x23, 0xD4, 0x43, 0xFB, 0x6B, 0x39, 0x00, - 0x47, 0x00, 0xF9, 0x5F, 0xF1, 0x2F, 0xE8, 0x03, 0xE4, 0x03, 0xE5, 0x03, 0xE8, 0x03, 0xE9, 0x03, - 0xE8, 0x03, 0xE8, 0x03, 0x87, 0x03, 0xE6, 0x02, 0x65, 0x02, 0xC4, 0x01, 0x83, 0x01, 0x63, 0x01, - 0x42, 0x01, 0x22, 0x01, 0x02, 0x01, 0xE2, 0x00, 0xA1, 0x00, 0x61, 0x00, 0x21, 0x00, 0x42, 0x04, - 0x62, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x03, 0x09, 0x23, 0x09, 0x24, 0x09, 0x45, 0x0D, 0x45, 0x0D, - 0x25, 0x0D, 0x24, 0x09, 0x03, 0x09, 0xE3, 0x08, 0xC3, 0x08, 0xC3, 0x08, 0xC3, 0x04, 0xE2, 0x04, - 0x03, 0x05, 0x23, 0x05, 0x43, 0x01, 0x83, 0x01, 0xA4, 0x01, 0xE4, 0x01, 0x04, 0x02, 0x24, 0x02, - 0x44, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, - 0xC5, 0x02, 0xC5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC5, 0x02, 0xC3, 0x02, 0xC2, 0x02, 0xE5, 0x02, - 0x2B, 0x17, 0x91, 0x37, 0xD6, 0x4B, 0xD5, 0x4B, 0xD4, 0x4B, 0xD5, 0x4F, 0xF9, 0x5F, 0xFE, 0x77, - 0x39, 0x00, 0x46, 0x00, 0xFA, 0x5F, 0xF1, 0x33, 0xE9, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE8, 0x03, - 0xE9, 0x03, 0xE9, 0x03, 0xE8, 0x03, 0xA8, 0x03, 0x47, 0x03, 0xE6, 0x02, 0x65, 0x02, 0x25, 0x02, - 0x04, 0x02, 0xC3, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x42, 0x01, 0xE2, 0x00, 0x82, 0x00, 0x41, 0x00, - 0x41, 0x00, 0x42, 0x00, 0x82, 0x04, 0xA3, 0x04, 0xE3, 0x08, 0x24, 0x09, 0x44, 0x09, 0x24, 0x09, - 0x25, 0x09, 0x04, 0x09, 0xC3, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x82, 0x04, 0xA2, 0x04, - 0xE2, 0x04, 0x02, 0x01, 0x63, 0x01, 0xA3, 0x01, 0xE4, 0x01, 0x25, 0x02, 0x65, 0x02, 0x65, 0x02, - 0x85, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC3, 0x02, 0xC3, 0x02, - 0xE7, 0x02, 0x4F, 0x2B, 0xB8, 0x57, 0xFD, 0x77, 0xFD, 0x77, 0xFD, 0x77, 0xFD, 0x77, 0xFE, 0x7B, - 0x3A, 0x00, 0x41, 0x00, 0xFB, 0x67, 0xF5, 0x43, 0xEE, 0x23, 0xEA, 0x13, 0xE9, 0x0B, 0xE8, 0x03, - 0xE7, 0x03, 0xE8, 0x03, 0xE8, 0x03, 0xC8, 0x03, 0x88, 0x03, 0x47, 0x03, 0xE6, 0x02, 0xC6, 0x02, - 0xA5, 0x02, 0x64, 0x02, 0x24, 0x02, 0x04, 0x02, 0xC3, 0x01, 0x42, 0x01, 0xE2, 0x00, 0x81, 0x00, - 0x41, 0x00, 0x42, 0x00, 0x62, 0x00, 0xA2, 0x04, 0xE3, 0x04, 0x03, 0x05, 0x24, 0x09, 0x04, 0x09, - 0xE4, 0x08, 0xC3, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x81, 0x04, 0x81, 0x04, 0x82, 0x04, 0xC2, 0x04, - 0x02, 0x01, 0x63, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x45, 0x02, 0x85, 0x02, 0xA6, 0x02, 0xC5, 0x02, - 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xC6, 0x02, 0xE6, 0x0A, 0xE8, 0x12, - 0x2D, 0x23, 0x95, 0x4B, 0xDD, 0x73, 0x3F, 0x00, 0x41, 0x00, 0xFD, 0x73, 0xF9, 0x5F, 0xF6, 0x4B, - 0xF1, 0x37, 0xEC, 0x1B, 0xE8, 0x03, 0xE5, 0x03, 0xE6, 0x03, 0xE7, 0x03, 0xC8, 0x03, 0xA7, 0x03, - 0x67, 0x03, 0x46, 0x03, 0x06, 0x03, 0xE6, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x64, 0x02, 0x04, 0x02, - 0x83, 0x01, 0x02, 0x01, 0xA1, 0x00, 0x61, 0x00, 0x42, 0x00, 0x62, 0x04, 0x82, 0x04, 0xA2, 0x04, - 0xE2, 0x04, 0xE3, 0x04, 0xE3, 0x04, 0xC3, 0x08, 0xA3, 0x04, 0x82, 0x04, 0x61, 0x04, 0x61, 0x00, - 0x81, 0x00, 0xA1, 0x04, 0xE2, 0x00, 0x43, 0x01, 0xA3, 0x01, 0x24, 0x02, 0x65, 0x02, 0x85, 0x02, - 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0x84, 0x02, 0x83, 0x02, 0x82, 0x02, 0x81, 0x02, 0x81, 0x02, - 0xC5, 0x02, 0x0A, 0x1B, 0x4F, 0x37, 0x95, 0x4B, 0xBA, 0x63, 0xFE, 0x7B, 0x40, 0x00, 0x3F, 0x00, - 0xFE, 0x77, 0xFD, 0x73, 0xF8, 0x5B, 0xF1, 0x2F, 0xE9, 0x07, 0xE5, 0x03, 0xE5, 0x03, 0xE7, 0x03, - 0xC7, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x66, 0x03, 0x46, 0x03, 0x26, 0x03, 0xE5, 0x02, 0xC5, 0x02, - 0xA5, 0x02, 0x44, 0x02, 0xC3, 0x01, 0x42, 0x01, 0xE1, 0x00, 0x81, 0x00, 0x82, 0x00, 0x82, 0x04, - 0x82, 0x04, 0xA2, 0x04, 0xC2, 0x04, 0xC2, 0x04, 0xC3, 0x04, 0xC3, 0x08, 0xA3, 0x04, 0x82, 0x04, - 0x81, 0x04, 0x81, 0x00, 0xA1, 0x00, 0xC2, 0x00, 0x22, 0x01, 0xA3, 0x01, 0x04, 0x02, 0x65, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xC6, 0x02, 0xC6, 0x02, 0xC6, 0x02, - 0xA6, 0x02, 0xA6, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA3, 0x02, - 0x81, 0x02, 0x81, 0x02, 0xC6, 0x06, 0x2E, 0x2F, 0xB7, 0x5B, 0xFD, 0x73, 0xFE, 0x77, 0x43, 0x00, - 0x3B, 0x00, 0xFE, 0x73, 0xF6, 0x4B, 0xEF, 0x23, 0xE9, 0x13, 0xE7, 0x0B, 0xE7, 0x03, 0xC6, 0x03, - 0xC6, 0x03, 0xA7, 0x03, 0x87, 0x03, 0x66, 0x03, 0x46, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, - 0x64, 0x02, 0x04, 0x02, 0xA3, 0x01, 0x42, 0x01, 0xE2, 0x00, 0xC2, 0x00, 0xC2, 0x04, 0xC2, 0x04, - 0xC2, 0x00, 0xE2, 0x00, 0xE2, 0x00, 0xE2, 0x04, 0xC2, 0x04, 0xA2, 0x04, 0x82, 0x04, 0x81, 0x00, - 0xA1, 0x00, 0xC1, 0x00, 0x02, 0x01, 0x83, 0x01, 0xE4, 0x01, 0x65, 0x02, 0xA6, 0x02, 0xC6, 0x02, - 0xC5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, 0xA6, 0x02, - 0xA5, 0x02, 0x84, 0x02, 0x84, 0x02, 0xA5, 0x02, 0xC7, 0x0A, 0xE9, 0x12, 0xE9, 0x16, 0xC7, 0x16, - 0xC7, 0x16, 0x0C, 0x23, 0x74, 0x4B, 0xFD, 0x73, 0x46, 0x00, 0x39, 0x00, 0xFA, 0x63, 0xF6, 0x4B, - 0xF0, 0x37, 0xEB, 0x1B, 0xC7, 0x03, 0xC4, 0x03, 0xA5, 0x03, 0x86, 0x03, 0x67, 0x03, 0x47, 0x03, - 0x26, 0x03, 0x05, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0x84, 0x02, 0x24, 0x02, 0xE3, 0x01, 0x83, 0x01, - 0x42, 0x01, 0x22, 0x01, 0x02, 0x01, 0x02, 0x01, 0x23, 0x01, 0x23, 0x01, 0x23, 0x01, 0x03, 0x01, - 0xE2, 0x04, 0xC2, 0x04, 0xA1, 0x00, 0x81, 0x00, 0xA1, 0x00, 0xE2, 0x00, 0x43, 0x01, 0xC4, 0x01, - 0x24, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xC5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA6, 0x02, 0xA5, 0x02, 0x84, 0x02, 0x62, 0x02, 0x62, 0x02, 0xA5, 0x02, - 0xEB, 0x1E, 0x51, 0x37, 0x52, 0x43, 0x51, 0x43, 0x51, 0x43, 0x74, 0x4B, 0xB9, 0x63, 0x47, 0x00, - 0x39, 0x00, 0xFE, 0x77, 0xFC, 0x6F, 0xF8, 0x5B, 0xF0, 0x33, 0xC9, 0x07, 0xA4, 0x03, 0xA4, 0x03, - 0x86, 0x03, 0x47, 0x03, 0x26, 0x03, 0x06, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0x84, 0x02, - 0x44, 0x02, 0x24, 0x02, 0xE3, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x63, 0x01, 0x63, 0x01, 0x83, 0x01, - 0xA4, 0x01, 0x84, 0x01, 0x43, 0x01, 0x22, 0x01, 0xE2, 0x00, 0xC1, 0x00, 0xA1, 0x00, 0xC2, 0x00, - 0x22, 0x01, 0x83, 0x01, 0xE4, 0x01, 0x45, 0x02, 0x65, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0x83, 0x02, - 0x61, 0x02, 0x61, 0x02, 0xC7, 0x0E, 0x30, 0x37, 0xB9, 0x5F, 0xDB, 0x6B, 0xDB, 0x6B, 0xDB, 0x6B, - 0xDC, 0x6F, 0xFD, 0x77, 0x49, 0x00, 0x32, 0x00, 0xFE, 0x77, 0xF6, 0x4F, 0xEE, 0x23, 0xA9, 0x0F, - 0x87, 0x07, 0x67, 0x03, 0x26, 0x03, 0x05, 0x03, 0xE5, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0x85, 0x02, 0x65, 0x02, 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x03, 0x02, 0xE3, 0x01, 0xE4, 0x01, - 0xE4, 0x01, 0x04, 0x02, 0xE4, 0x01, 0xA3, 0x01, 0x83, 0x01, 0x42, 0x01, 0x02, 0x01, 0x02, 0x01, - 0x22, 0x01, 0x63, 0x01, 0xC4, 0x01, 0x25, 0x02, 0x65, 0x02, 0x85, 0x02, 0xA4, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, 0x84, 0x02, 0xA4, 0x02, - 0xA4, 0x02, 0x84, 0x0A, 0xA6, 0x0E, 0x0D, 0x27, 0x96, 0x53, 0xFE, 0x7B, 0x4F, 0x00, 0x30, 0x00, - 0xFB, 0x63, 0xF5, 0x47, 0xD0, 0x33, 0x8B, 0x1B, 0x47, 0x03, 0x03, 0x03, 0xE2, 0x02, 0xC3, 0x02, - 0xA3, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0x85, 0x02, 0x85, 0x02, 0x85, 0x02, 0x65, 0x02, - 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x04, 0x02, 0xE4, 0x01, 0xC3, 0x01, - 0x82, 0x01, 0x62, 0x01, 0x62, 0x01, 0x83, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x45, 0x02, 0x65, 0x02, - 0x85, 0x02, 0x84, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0x84, 0x02, 0x84, 0x02, 0x83, 0x02, - 0x82, 0x02, 0x61, 0x02, 0x82, 0x02, 0xA6, 0x06, 0xE9, 0x1E, 0x2F, 0x37, 0x74, 0x4B, 0xBA, 0x67, - 0x50, 0x00, 0x30, 0x00, 0xFE, 0x77, 0xFC, 0x6B, 0xD8, 0x5B, 0x90, 0x33, 0x48, 0x0B, 0xE2, 0x02, - 0xC1, 0x02, 0xC3, 0x02, 0xA3, 0x02, 0xA4, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, - 0xA5, 0x02, 0x86, 0x02, 0x65, 0x02, 0x65, 0x02, 0x45, 0x02, 0x65, 0x02, 0x64, 0x02, 0x44, 0x02, - 0x24, 0x02, 0x03, 0x02, 0xE3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0xC3, 0x01, 0x04, 0x02, 0x24, 0x02, - 0x64, 0x02, 0x64, 0x02, 0x85, 0x02, 0x85, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA5, 0x02, 0xA4, 0x02, - 0x84, 0x02, 0x83, 0x02, 0x82, 0x02, 0x61, 0x02, 0x82, 0x02, 0xC8, 0x0E, 0x30, 0x37, 0x98, 0x5F, - 0xDB, 0x6F, 0xFD, 0x77, 0x52, 0x00, 0x2B, 0x00, 0xFE, 0x7B, 0xB6, 0x4F, 0x6D, 0x23, 0x06, 0x0B, - 0x05, 0x0B, 0xE7, 0x0A, 0xE8, 0x0A, 0xC7, 0x06, 0xC6, 0x02, 0xC5, 0x02, 0xA5, 0x02, 0xC5, 0x02, - 0xA6, 0x02, 0xA6, 0x02, 0x86, 0x02, 0x85, 0x02, 0x85, 0x02, 0x85, 0x02, 0x84, 0x02, 0x64, 0x02, - 0x64, 0x02, 0x44, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x24, 0x02, 0x44, 0x02, 0x44, 0x02, - 0x64, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0xA4, 0x02, 0xA5, 0x02, 0xC6, 0x02, - 0xC7, 0x06, 0xC8, 0x0A, 0xC7, 0x0A, 0xA5, 0x0A, 0xC7, 0x0A, 0x0E, 0x2B, 0x97, 0x57, 0x56, 0x00, - 0x2A, 0x00, 0xDA, 0x67, 0x94, 0x47, 0x6F, 0x37, 0x4F, 0x37, 0x50, 0x37, 0x50, 0x33, 0x0C, 0x1F, - 0xE7, 0x06, 0xA3, 0x02, 0xA2, 0x02, 0xA3, 0x02, 0xA3, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, - 0x64, 0x02, 0x63, 0x02, 0x63, 0x02, 0x63, 0x02, 0x43, 0x02, 0x43, 0x02, 0x43, 0x02, 0x22, 0x02, - 0x23, 0x02, 0x23, 0x02, 0x43, 0x02, 0x43, 0x02, 0x63, 0x02, 0x63, 0x02, 0x63, 0x02, 0x62, 0x02, - 0x62, 0x02, 0x81, 0x02, 0xA3, 0x02, 0xC7, 0x0A, 0x0C, 0x23, 0x50, 0x33, 0x30, 0x37, 0x2F, 0x37, - 0x30, 0x37, 0x75, 0x4B, 0xDB, 0x6B, 0x56, 0x00, 0x2A, 0x00, 0xFD, 0x77, 0xDB, 0x6B, 0xD9, 0x63, - 0xB9, 0x63, 0xB9, 0x63, 0xB8, 0x5F, 0x71, 0x3B, 0x09, 0x13, 0xC3, 0x02, 0xA0, 0x02, 0xA1, 0x02, - 0x82, 0x02, 0x82, 0x02, 0x62, 0x02, 0x63, 0x02, 0x43, 0x02, 0x63, 0x02, 0x62, 0x02, 0x42, 0x02, - 0x42, 0x02, 0x42, 0x02, 0x42, 0x02, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0x42, 0x02, 0x42, 0x02, - 0x42, 0x02, 0x42, 0x02, 0x42, 0x02, 0x62, 0x02, 0x60, 0x02, 0x60, 0x02, 0xA2, 0x02, 0x0A, 0x17, - 0x52, 0x3F, 0xB9, 0x5F, 0xB9, 0x63, 0xB9, 0x63, 0xB9, 0x63, 0xDB, 0x6B, 0xFE, 0x77, 0x5C, 0x00, - 0x1E, 0x00, 0xB7, 0x57, 0x4F, 0x2B, 0xE7, 0x06, 0xC4, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xA6, 0x06, - 0xA6, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, - 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x87, 0x06, 0x86, 0x06, - 0x86, 0x06, 0xA6, 0x06, 0xA4, 0x06, 0xA3, 0x06, 0xE7, 0x0A, 0x4F, 0x2F, 0xB8, 0x5B, 0x62, 0x00, - 0x1E, 0x00, 0xDB, 0x6B, 0x95, 0x4B, 0x4F, 0x2F, 0x2D, 0x2F, 0x2E, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, - 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, - 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, 0x0F, 0x2F, - 0x0F, 0x2F, 0x0E, 0x2F, 0x0D, 0x2F, 0x0C, 0x2F, 0x4F, 0x33, 0x95, 0x4F, 0xDC, 0x6F, 0x62, 0x00, - 0x1E, 0x00, 0xFE, 0x77, 0xDB, 0x67, 0xB8, 0x5F, 0xB7, 0x5F, 0xB8, 0x5F, 0xB8, 0x5F, 0x98, 0x5F, - 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, - 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, 0x98, 0x5F, - 0x98, 0x5F, 0x98, 0x5F, 0x97, 0x5F, 0x97, 0x5F, 0xB8, 0x5F, 0xDB, 0x6B, 0xFE, 0x7B, 0x3F, 0x08, - 0x00, 0x00 -}; - - diff --git a/backends/ps2/iop/CoDyVDfs/Makefile b/backends/ps2/iop/CoDyVDfs/Makefile deleted file mode 100644 index 4493e77154..0000000000 --- a/backends/ps2/iop/CoDyVDfs/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# _____ ___ ____ ___ ____ -# ____| | ____| | | |____| -# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. -#----------------------------------------------------------------------- -# Copyright 2001-2004, ps2dev - http://www.ps2dev.org -# Licenced under Academic Free License version 2.0 -# Review ps2sdk README & LICENSE files for further details. -# -# $Id$ - - -IOP_OBJS_DIR = obj/ -IOP_BIN_DIR = bin/ -IOP_SRC_DIR = iop/ -IOP_INC_DIR = include/ - -IOP_BIN = iop/CoDyVDfs.irx -IOP_OBJS = obj/codyvdfs.o obj/fiofs.o obj/rpcfs.o obj/imports.o - -IOP_CFLAGS += -Wall -fno-builtin -IOP_LDFLAGS += -s - -all: $(IOP_OBJS_DIR) $(IOP_BIN_DIR) $(IOP_BIN) - -clean: - rm -f -r $(IOP_OBJS_DIR) $(IOP_BIN_DIR) - -include $(PS2SDKSRC)/Defs.make -include $(PS2SDKSRC)/iop/Rules.make -include $(PS2SDKSRC)/iop/Rules.release diff --git a/backends/ps2/iop/CoDyVDfs/common/codyvdirx.h b/backends/ps2/iop/CoDyVDfs/common/codyvdirx.h deleted file mode 100644 index 6b81d000ae..0000000000 --- a/backends/ps2/iop/CoDyVDfs/common/codyvdirx.h +++ /dev/null @@ -1,38 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef CDVDFS_COMMON_H -#define CDVDFS_COMMON_H - -#define CDVDFS_IRX_ID 0xD004352 - -// commands: -#define READ_RTC 0 -#define SET_READ_SPEED 1 -#define DRIVE_STOP 2 -#define DRIVE_STANDBY 3 - -#define CdTrayOpen 0 -#define CdTrayClose 1 -#define CdTrayCheck 2 - -#endif // CDVDFS_COMMON_H diff --git a/backends/ps2/iop/CoDyVDfs/iop/cdtypes.h b/backends/ps2/iop/CoDyVDfs/iop/cdtypes.h deleted file mode 100644 index 9f7a9762be..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/cdtypes.h +++ /dev/null @@ -1,134 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __CDTYPES_H__ -#define __CDTYPES_H__ - -typedef unsigned int uint32; -typedef unsigned short uint16; -typedef unsigned char uint8; -typedef signed int int32; -typedef signed short int16; -typedef signed char int8; - -typedef struct { - uint8 len_di; - uint8 attributeLength; - uint8 lba[4]; - uint16 parent; - char name[256]; // arbitrary number -} ISOPathTableRecord __attribute__ ((packed)); - -typedef struct { - uint8 year; // Number of years since 1900 - uint8 month; // Month of the year from 1 to 12 - uint8 day; // Day of the Month from 1 to 31 - uint8 hour; // Hour of the day from 0 to 23 - uint8 min; // Minute of the hour from 0 to 59 - uint8 sec; // second of the minute from 0 to 59 - uint8 gmtOff; // Offset from Greenwich Mean Time in number of 15 minute intervals from -48(West) to +52(East) - uint8 padding[10]; -} ISOTime __attribute__ ((packed)); - -typedef struct { - uint8 year; // Number of years since 1900 - uint8 month; // Month of the year from 1 to 12 - uint8 day; // Day of the Month from 1 to 31 - uint8 hour; // Hour of the day from 0 to 23 - uint8 min; // Minute of the hour from 0 to 59 - uint8 sec; // second of the minute from 0 to 59 - uint8 gmtOff; // Offset from Greenwich Mean Time in number of 15 minute intervals from -48(West) to +52(East) - //uint8 padding[10]; -} ISOFileTime __attribute__ ((packed)); - -typedef struct { - uint8 len_dr; - uint8 attributeLength; - uint8 lba[4]; - uint8 lba_BE[4]; - uint8 size[4]; - uint8 size_BE[4]; - ISOFileTime time; - uint8 flags; - uint8 fieldSize; - uint8 gapSize; - uint8 sequenceNumber[4]; - uint8 len_fi; - char name[256]; // arbitrary number -} ISODirectoryRecord __attribute__ ((packed)); - -typedef struct { - char volumeSetId[128]; - char publisherId[128]; - char preparerId[128]; - char applicationId[128]; - char copyrightId[37]; - char abstractId[37]; - char bibliographicId[37]; -} ISOIds __attribute__ ((packed)); - -typedef struct { - uint16 length; - uint32 tocLBA; - uint32 tocLBA_bigend; - uint32 tocSize; - uint32 tocSize_bigend; - uint8 dateStamp[8]; - uint8 reserved[6]; - uint8 reserved2; - uint8 reserved3; -} ISORoot __attribute__((packed)); // 0x22 - -typedef struct { - uint8 type; // 0x00 - char identifier[5]; // 0x01 - uint8 version; // 0x06 - uint8 reserved1; // 0x07 - char systemIdentifier[32]; // 0x08 - char volumeIdentifier[32]; // 0x28 - uint8 reserved2[8]; // 0x48 - uint32 volumeSpaceSize; // 0x50 - uint32 volumeSpaceSizeBE; // 0x54 - char reserved3[32]; // 0x58 - uint32 volumeSetSize; // 0x78 - uint32 volumeSequenceNumber; // 0x7C - uint32 logicalBlockSize; // 0x80 - uint32 pathTableSize; // 0x84 - uint32 pathTableSizeBE; // 0x88 - uint32 pathTablePos; // 0x8C - uint32 pathTable2Pos; // 0x90 - uint32 pathTablePosBE; // 0x94 - uint32 pathTable2PosBE; // 0x98 - ISORoot rootDir; // 0x9C - ISOIds ids; // 0xBE - ISOTime creation; // 0x32D - ISOTime modification; // 0x33E - ISOTime expiration; // 0x34F - ISOTime effective; // 0x360 - uint8 fileStructureVersion; // 0x371 - uint8 reserved4; // 0x372 - uint8 applicationUse[512]; // 0x373 - uint8 reserved5[653]; // 0x573 -} ISOPvd __attribute__ ((packed)); // 0x800 - -#endif // __CDTYPES_H__ - diff --git a/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.c b/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.c deleted file mode 100644 index 627054e6fd..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.c +++ /dev/null @@ -1,347 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include "fiofs.h" -#include "codyvdfs.h" -#include "../common/codyvdirx.h" - -#define DBG_PRINTF printf - -char cachedDir[256]; -int cachedDirLba, cachedDirOfs, cachedDirSize; -static uint8 cacheBuf[2340]; - -int mediaType, fsRootLba, fsRootSize; - -int verifyDriveReady(void) { - int res; - u32 trayStat; - res = CdTrayReq(CdTrayCheck, &trayStat); - if ((mediaType == DISC_UNKNOWN) || (res == 0) || (trayStat == 1)) { - // media was exchanged - if (checkDiscReady(100) == 0) // wait up to 1 second - return initDisc(); - else { - mediaType = DISC_UNKNOWN; - return -1; // drive still not ready - } - } - if (mediaType == DISC_NONE) - return -1; - return 0; -} - -int cacheEnterDir(ISODirectoryRecord *dir) { - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - char *cacheName; - cachedDirLba = READ_ARRAY32(dir->lba); - cachedDirSize = READ_ARRAY32(dir->size); - cachedDirOfs = 0; - cacheName = cachedDir + strlen(cachedDir); - memcpy(cacheName, dir->name, dir->len_fi); - cacheName[dir->len_fi] = '/'; - cacheName[dir->len_fi + 1] = '\0'; - return cdReadSectors(cachedDirLba, 1, cacheBuf, &rmode); -} - -int initRootCache(void) { - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - ISODirectoryRecord *root = (ISODirectoryRecord*)cacheBuf; - - if (cdReadSectors(fsRootLba, 1, cacheBuf, &rmode) == 0) { - cachedDir[0] = '\0'; - fsRootSize = READ_ARRAY32(root->size); - cachedDirLba = fsRootLba; - cachedDirOfs = 0; - cachedDirSize = fsRootSize; - if (READ_ARRAY32(root->lba) == fsRootLba) - return 0; - } - DBG_PRINTF("Can't read root directory table in sector %d\n", fsRootLba); - mediaType = DISC_NONE; - return -1; -} - -ISODirectoryRecord *findEntryInCache(const char *name, int nameLen) { - int i; - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - ISODirectoryRecord *entry; - for (i = 0; i < NUM_SECTORS(cachedDirSize); i++) { - entry = (ISODirectoryRecord *)cacheBuf; - if (i != cachedDirOfs) { - if (cdReadSectors(cachedDirLba + i, 1, cacheBuf, &rmode) < 0) - return NULL; - cachedDirOfs = i; - } - - while (entry->len_dr && ((uint8*)entry < cacheBuf + SECTOR_SIZE)) { - if ((entry->len_fi > 2) && (entry->name[entry->len_fi - 2] == ';') && (entry->name[entry->len_fi - 1] == '1')) { - if ((nameLen == entry->len_fi - 2) && (strnicmp(name, entry->name, entry->len_fi - 2) == 0)) - return entry; - } else { - if ((nameLen == entry->len_fi) && (strnicmp(name, entry->name, entry->len_fi) == 0)) - return entry; - } - entry = (ISODirectoryRecord *)( (uint8*)entry + entry->len_dr ); - } - } - return NULL; -} - -ISODirectoryRecord *findPath(const char *path) { - ISODirectoryRecord *pathPos; - const char *tok; - - if (path[0] == '/') - path++; - - if (strnicmp(cachedDir, path, strlen(cachedDir)) == 0) - path += strlen(cachedDir); // requested path is somewhere in our cache - else - initRootCache(); // not cached, we start again at the cd root - - if (path[0] == '/') - path++; - - if (!path[0]) { // open root dir - if (cachedDirOfs) - initRootCache(); - return (ISODirectoryRecord *)cacheBuf; - } - - do { - tok = strchr(path, '/'); - if (tok) - pathPos = findEntryInCache(path, tok - path); - else - pathPos = findEntryInCache(path, strlen(path)); - - if (pathPos && tok && tok[1] && IS_DIR(pathPos)) - if (cacheEnterDir(pathPos) < 0) - return NULL; - - path = tok + 1; - } while (pathPos && tok && tok[1]); - return pathPos; -} - -int checkDiscReady(int retries) { - if (retries == -1) { - if (CdDiskReady(0) == 2) // block until drive ready, should always return 2 - return 0; - } else { - do { - if (CdDiskReady(1) == 2) - return 0; - DelayThread(10 * 1000); - } while (--retries >= 0); - } - return -1; -} - - -int initDisc(void) { - int type, sector, discType; - ISOPvd *pvd; - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - ISOPathTableRecord *rootRec; - - if (checkDiscReady(0) < 0) { - printf("disc not ready\n"); - mediaType = DISC_UNKNOWN; // retry later - return -1; - } - - do { // wait until drive detected disc type - type = CdGetDiskType(); - if (DISC_NOT_READY(type)) - DelayThread(10 * 1000); - } while (DISC_NOT_READY(type)); - - if (type == CdDiskIllegal) { - printf("Illegal disc type\n"); - mediaType = DISC_NONE; - return -1; - } - if (type == CdDiskNone) { - printf("Tray empty\n"); - mediaType = DISC_NONE; - return -1; - } - - discType = DISC_DVD; - switch (type) { - case CdDiskCDPS1: - case CdDiskCDDAPS1: - case CdDiskCDPS2: - case CdDiskCDDAPS2: - case CdDiskCDDA: - discType = DISC_MODE2; - rmode.datapattern = CdSect2340; - default: - break; - } - - for (sector = 16; sector < 32; sector++) { - printf("sec %d\n", sector); - if (cdReadSectors(sector, 1, cacheBuf, &rmode) == 0) { - if (discType == DISC_DVD) - pvd = (ISOPvd *)cacheBuf; - else { - switch (cacheBuf[3]) { - case 1: - discType = DISC_MODE1; - printf("Disc: Mode1\n"); - pvd = (ISOPvd*)(cacheBuf + 4); - break; - case 2: - discType = DISC_MODE2; - printf("Disc: Mode2\n"); - pvd = (ISOPvd*)(cacheBuf + 12); - break; - default: - DBG_PRINTF("Unknown Sector Type %02X\n", cacheBuf[3]); - return -1; - } - } - rmode.datapattern = CdSect2048; - if ((pvd->type == 1) && (memcmp(pvd->identifier, "CD001", 5) == 0)) { // found ISO9660 PVD - DBG_PRINTF("Found ISO9660 PVD in sector %d\n", sector); - - DBG_PRINTF("reading path table from sector %d\n", pvd->pathTablePos); - if (cdReadSectors(pvd->pathTablePos, 1, cacheBuf, &rmode) < 0) { - DBG_PRINTF("Can't read path table\n"); - return -1; - } - - rootRec = (ISOPathTableRecord *)cacheBuf; - if ((rootRec->len_di != 1) || (rootRec->name[0] != 0)) { - DBG_PRINTF("Root entry missing: %02X - %02X\n", rootRec->len_di, rootRec->name[0]); - return -1; - } - - fsRootLba = READ_ARRAY32(rootRec->lba); // this points to the root record - - mediaType = discType; - DBG_PRINTF("Root directory in sector %d\n", fsRootLba); - return initRootCache(); - } - } - } - mediaType = DISC_NONE; - // PVD not found - return -1; -} - -int cdReadSectors(int lba, int num, void *dest, CdRMode *rmode) { - int err; - if (CdRead(lba, num, dest, rmode) == 1) { - CdSync(0); - err = CdGetError(); - return (err > 0) ? -err : err; - } - return -0xFF; -} - -int cd_dummy(void) { - printf("cd_dummy called!\n"); - return -1; -} - -int cd_init(iop_device_t *dev) { - printf("FS init\n"); - memset(cachedDir, 0, 256); - cachedDirLba = cachedDirOfs = 0; - mediaType = DISC_UNKNOWN; - return 0; -} - -iop_device_ops_t FS_ops = { - (void *) cd_init, - (void *) cd_dummy, - (void *) cd_dummy, - (void *) cd_open, - (void *) cd_close, - (void *) cd_read, - (void *) cd_dummy, - (void *) cd_lseek, - (void *) cd_dummy, - (void *) cd_dummy, - (void *) cd_dummy, - (void *) cd_dummy, - (void *) cd_dopen, - (void *) cd_dclose, - (void *) cd_dread, - (void *) cd_dummy, - (void *) cd_dummy, -}; - -#define FS_NAME "cdfs" -#define FS_DESC "CD-ROM" - -iop_device_t fsdriver = { - FS_NAME, - IOP_DT_FS | IOP_DT_FSEXT, - 1, - FS_DESC, - &FS_ops -}; - -int _start(void) { - printf("CoDyVDfs v0.01\n"); - - CdInit(1); - DelDrv(FS_NAME); - AddDrv(&fsdriver); - - initRpc(); - initFio(); - return(0); -} - -int strnicmp(const char *s1, const char *s2, int n) { - if (n) { - do { - if (tolower(*s1) != tolower(*s2)) - return tolower(*s1) - tolower(*s2); - if (*s1++ == '\0') - break; - s2++; - } while (--n); - } - return 0; -} - diff --git a/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.h b/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.h deleted file mode 100644 index 5e6295993c..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/codyvdfs.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __CoDyVDfs_H__ -#define __CoDyVDfs_H__ - -#include -#include "cdtypes.h" - -typedef cd_read_mode_t CdRMode; - -// for reading misaligned ints -#define READ_ARRAY32(a) \ - (a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24)) - -#define SECTOR_SIZE 0x800 -#define SECTOR_MASK 0x7FF -#define NUM_SECTORS(a) ((a + 2047) >> 11) - -#define IS_DIR(a) ((a)->flags & 2) - -#define DISC_UNKNOWN 0xFE -#define DISC_NONE 0xFF -#define DISC_DVD 0 -#define DISC_MODE1 1 -#define DISC_MODE2 2 - -enum ReadModes { - CdSect2048 = 0, - CdSect2328, // 1 - CdSect2340 // 2 -}; - -enum { - CdDiskNone = 0x00, - CdDiskDetect, // 0x01 - CdDiskDetectCD, // 0x02 - CdDiskDetectDVD, // 0x03 - CdDiskDetectUnk = 0x05, - CdDiskCDPS1 = 0x10, - CdDiskCDDAPS1 = 0x11, - CdDiskCDPS2 = 0x12, - CdDiskCDDAPS2 = 0x13, - CdDiskDVDPS2 = 0x14, - CdDiskDVDV2 = 0xFC, - CdDiskCDDA = 0xFD, - CdDiskDVDV = 0xFE, - CdDiskIllegal = 0xFF -}; - -#define DISC_NOT_READY(type) ((type > CdDiskNone) && (type < CdDiskCDPS1) && (type != CdDiskDetectUnk)) - -int initRpc(void); - -int verifyDriveReady(void); -int cdReadSectors(int lba, int num, void *dest, CdRMode *rmode); -int initRootCache(void); -ISODirectoryRecord *findPath(const char *path); -int cacheEnterDir(ISODirectoryRecord *dir); -int initDisc(void); -int checkDiscReady(int retries); -int strnicmp(const char *s1, const char *s2, int n); - -#endif // __MYCDVDFS_H__ - diff --git a/backends/ps2/iop/CoDyVDfs/iop/fiofs.c b/backends/ps2/iop/CoDyVDfs/iop/fiofs.c deleted file mode 100644 index 701ece1525..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/fiofs.c +++ /dev/null @@ -1,262 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "cdtypes.h" -#include "codyvdfs.h" -#include -#include -#include -#include -#include -#include - -#define MAX_DIO_HANDLES 8 -#define MAX_FIO_HANDLES 32 - -typedef struct { - int lba, size, lbaOfs; - uint32 curOfs; - uint8 *buf; -} DioHandle; - -typedef struct { - int lba, size; - int pos; - uint8 *buf; - int cachedLba; -} FioHandle; - -static DioHandle dioHandles[MAX_DIO_HANDLES]; -static FioHandle fioHandles[MAX_FIO_HANDLES]; - -int initFio(void) { - int i; - - for (i = 0; i < MAX_DIO_HANDLES; i++) - dioHandles[i].lba = 0; - for (i = 0; i < MAX_FIO_HANDLES; i++) - fioHandles[i].lba = 0; - return 0; -} - -int allocDioHandle(void) { - int i; - for (i = 0; i < MAX_DIO_HANDLES; i++) - if (!dioHandles[i].lba) - return i; - return -1; -} - -int allocFioHandle(void) { - int i; - for (i = 0; i < MAX_FIO_HANDLES; i++) - if (!fioHandles[i].lba) - return i; - return -1; -} - -int cd_open(iop_file_t *handle, const char *name, int mode) { - int fdSlot; - FioHandle *fd; - ISODirectoryRecord *rec; - - if (verifyDriveReady() < 0) - return -EIO; - - rec = findPath(name); - if (!rec || IS_DIR(rec)) - return -ENOENT; - - fdSlot = allocFioHandle(); - if (fdSlot < 0) - return -ENFILE; - - fd = fioHandles + fdSlot; - - fd->buf = AllocSysMemory(ALLOC_FIRST, 0x800, NULL); - if (!fd->buf) - return -ENOMEM; - - fd->lba = READ_ARRAY32(rec->lba); - fd->size = READ_ARRAY32(rec->size); - fd->pos = 0; - fd->cachedLba = 0; - - handle->privdata = (void*)fdSlot; - return 0; -} - -int cd_lseek(iop_file_t *handle, int ofs, int whence) { - FioHandle *fd = fioHandles + (int)handle->privdata; - int newOfs; - switch(whence) { - case SEEK_SET: - newOfs = ofs; - break; - case SEEK_CUR: - newOfs = fd->pos + ofs; - break; - case SEEK_END: - newOfs = fd->size + ofs; - break; - default: - newOfs = -1; - } - if ((newOfs >= 0) && (newOfs <= fd->size)) { - fd->pos = newOfs; - return newOfs; - } else - return -1; -} - -int cd_read(iop_file_t *handle, void *dest, int length) { - FioHandle *fd = fioHandles + (int)handle->privdata; - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - int readLba, readPos, bytesLeft; - uint8 *destPos = (uint8*)dest; - int doCopy; - int numLba; - readLba = fd->lba + (fd->pos >> 11); - readPos = fd->pos & 0x7FF; - - if (fd->pos + length > fd->size) - length = fd->size - fd->pos; - - if (length < 0) - return 0; - - bytesLeft = length; - while (bytesLeft > 0) { - if (readPos || (bytesLeft < 0x800) || (readLba == fd->cachedLba)) { - if (fd->cachedLba != readLba) { - if (cdReadSectors(readLba, 1, fd->buf, &rmode) == 0) - fd->cachedLba = readLba; - else - break; // read error - } - doCopy = 0x800 - readPos; - if (doCopy > bytesLeft) - doCopy = bytesLeft; - - memcpy(destPos, fd->buf + readPos, doCopy); - readPos += doCopy; - readLba += readPos >> 11; - readPos &= 0x7FF; - bytesLeft -= doCopy; - fd->pos += doCopy; - destPos += doCopy; - } else { - numLba = bytesLeft >> 11; - if (cdReadSectors(readLba, numLba, destPos, &rmode) != 0) - break; - readLba += numLba; - fd->pos += numLba << 11; - destPos += numLba << 11; - bytesLeft &= 0x7FF; - } - } - return destPos - (uint8*)dest; -} - -int cd_close(iop_file_t *handle) { - FioHandle *hd = fioHandles + (int)handle->privdata; - FreeSysMemory(hd->buf); - hd->lba = hd->pos = hd->size = 0; - hd->buf = 0; - return 0; -} - -int cd_dopen(iop_file_t *handle, const char *path) { - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - int fdSlot; - ISODirectoryRecord *rec; - - if (verifyDriveReady() < 0) - return -EIO; - - rec = findPath(path); - if (!rec || !IS_DIR(rec)) - return -ENOENT; - - fdSlot = allocDioHandle(); - - if (fdSlot < 0) - return -ENFILE; - - dioHandles[fdSlot].buf = AllocSysMemory(ALLOC_FIRST, 0x800, NULL); - if (!dioHandles[fdSlot].buf) - return -ENOMEM; - - dioHandles[fdSlot].lba = READ_ARRAY32(rec->lba); - dioHandles[fdSlot].size = READ_ARRAY32(rec->size); - if (cdReadSectors(dioHandles[fdSlot].lba, 1, dioHandles[fdSlot].buf, &rmode) != 0) { - dioHandles[fdSlot].lba = dioHandles[fdSlot].size = 0; - FreeSysMemory(dioHandles[fdSlot].buf); - dioHandles[fdSlot].buf = NULL; - return -EIO; - } - dioHandles[fdSlot].curOfs = 0; - dioHandles[fdSlot].lbaOfs = 0; - handle->privdata = (void*)fdSlot; - return fdSlot; -} - -int cd_dread(iop_file_t *handle, iox_dirent_t *buf) { - CdRMode rmode = { 16, 0, CdSect2048, 0 }; - ISODirectoryRecord *rec; - DioHandle *hd = dioHandles + (int)handle->privdata; - int i; - for (i = hd->lbaOfs; i < NUM_SECTORS(hd->size); i++) { - if (i != hd->lbaOfs) { - cdReadSectors(hd->lba + i, 1, hd->buf, &rmode); - hd->lbaOfs = i; - hd->curOfs = 0; - } - while ((hd->curOfs < SECTOR_SIZE) && ((ISODirectoryRecord *)(hd->buf + hd->curOfs))->len_dr) { - rec = (ISODirectoryRecord *)(hd->buf + hd->curOfs); - hd->curOfs += rec->len_dr; - if ((rec->len_fi != 1) || ((rec->name[0] != 0) && (rec->name[0] != 1))) { // skip '.' / '..' - memcpy(buf->name, rec->name, rec->len_fi); - if ((buf->name[rec->len_fi - 2] == ';') && (buf->name[rec->len_fi - 1] == '1')) - buf->name[rec->len_fi - 2] = '\0'; - else - buf->name[rec->len_fi] = '\0'; - buf->stat.mode = FIO_S_IRUSR | FIO_S_IXUSR | FIO_S_IRGRP | FIO_S_IXGRP | FIO_S_IROTH | FIO_S_IXOTH; - buf->stat.mode |= IS_DIR(rec) ? FIO_S_IFDIR : FIO_S_IFREG; - buf->stat.attr = 0; - buf->stat.size = READ_ARRAY32(rec->size); - buf->stat.hisize = 0; - return 1; - } - } - } - return 0; -} - -int cd_dclose(iop_file_t *handle) { - DioHandle *hd; - hd = dioHandles + (int)handle->privdata; - FreeSysMemory(hd->buf); - hd->size = hd->lba = 0; - return 0; -} - diff --git a/backends/ps2/iop/CoDyVDfs/iop/fiofs.h b/backends/ps2/iop/CoDyVDfs/iop/fiofs.h deleted file mode 100644 index 21d7dff218..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/fiofs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __FIOFS_H__ -#define __FIOFS_H__ - -int initFio(void); - -int cd_open(iop_file_t *handle, const char *name, int mode); -int cd_lseek(iop_file_t *handle, int ofs, int whence); -int cd_read(iop_file_t *handle, void *dest, int length); -int cd_close(iop_file_t *handle); -int cd_dopen(iop_file_t *handle, const char *path); -int cd_dread(iop_file_t *handle, fio_dirent_t *buf); -int cd_dclose(iop_file_t *handle); - -#endif // __FIOFS_H__ - diff --git a/backends/ps2/iop/CoDyVDfs/iop/imports.lst b/backends/ps2/iop/CoDyVDfs/iop/imports.lst deleted file mode 100644 index d3ed3b0442..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/imports.lst +++ /dev/null @@ -1,65 +0,0 @@ - -cdvdman_IMPORTS_start -I_sceCdInit -I_sceCdStandby -I_sceCdRead -I_sceCdSeek -I_sceCdGetError -I_sceCdSync -I_sceCdGetDiskType -I_sceCdDiskReady -I_sceCdTrayReq -I_sceCdStop -I_sceCdReadClock -cdvdman_IMPORTS_end - -intrman_IMPORTS_start -I_CpuSuspendIntr -I_CpuResumeIntr -intrman_IMPORTS_end - -iomanX_IMPORTS_start -I_AddDrv -I_DelDrv -iomanX_IMPORTS_end - -sifcmd_IMPORTS_start -I_sceSifInitRpc -I_sceSifSetRpcQueue -I_sceSifRegisterRpc -I_sceSifRpcLoop -sifcmd_IMPORTS_end - -stdio_IMPORTS_start -I_printf -stdio_IMPORTS_end - -sysclib_IMPORTS_start -I_memcmp -I_memcpy -I_memset -I_strlen -I_strncmp -I_strtoul -I_strcpy -I_strcat -I_strchr -I_strncpy -I_strtok -I_strrchr -I_tolower -sysclib_IMPORTS_end - -sysmem_IMPORTS_start -I_AllocSysMemory -I_FreeSysMemory -sysmem_IMPORTS_end - -thbase_IMPORTS_start -I_CreateThread -I_StartThread -I_GetThreadId -I_DelayThread -thbase_IMPORTS_end - - diff --git a/backends/ps2/iop/CoDyVDfs/iop/irx_imports.h b/backends/ps2/iop/CoDyVDfs/iop/irx_imports.h deleted file mode 100644 index 1f974cf834..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/irx_imports.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -# _____ ___ ____ ___ ____ -# ____| | ____| | | |____| -# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. -#----------------------------------------------------------------------- -# Copyright (c) 2003 Marcus R. Brown -# Licenced under Academic Free License version 2.0 -# Review ps2sdk README & LICENSE files for further details. -# -# $Id$ -# Defines all IRX imports. -*/ - -#ifndef IOP_IRX_IMPORTS_H -#define IOP_IRX_IMPORTS_H - -#include "irx.h" - -/* Please keep these in alphabetical order! */ -#include "cdvdman.h" -#include "intrman.h" -#include "iomanX.h" -#include "loadcore.h" -#include "sifcmd.h" -#include "stdio.h" -#include "sysclib.h" -#include "sysmem.h" -#include "thbase.h" - -#endif /* IOP_IRX_IMPORTS_H */ diff --git a/backends/ps2/iop/CoDyVDfs/iop/rpcfs.c b/backends/ps2/iop/CoDyVDfs/iop/rpcfs.c deleted file mode 100644 index 16f70e9ed4..0000000000 --- a/backends/ps2/iop/CoDyVDfs/iop/rpcfs.c +++ /dev/null @@ -1,115 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include -#include "codyvdfs.h" -#include "../common/codyvdirx.h" - -struct t_SifRpcDataQueue qd; -struct t_SifRpcServerData sd0; -static uint8 rpcBuffer[64]; - -void *rpcServer(int func, void *data, int size); -void rpcThread(void *param); - -int initRpc(void) { - iop_thread_t thread; - int tid; - - thread.attr = TH_C; - thread.thread = rpcThread; - thread.priority = 40; - thread.stacksize = 0x1000; - thread.attr = 0; - - tid = CreateThread(&thread); - if (tid >= 0) - StartThread(tid, 0); - else { - printf("Unable to start RPC Thread!\n"); - return -1; - } - return 0; -} - -void rpcThread(void *param) { - SifInitRpc(0); - SifSetRpcQueue(&qd, GetThreadId()); - SifRegisterRpc(&sd0, CDVDFS_IRX_ID, rpcServer, (void *)rpcBuffer, 0, 0, &qd); - SifRpcLoop(&qd); -} - -void *rpcReadClock(void *data) { - CdReadClock((cd_clock_t *)data); - return data; -} - -void *driveStop(void *data) { - if (CdStop() == 1) { - if (CdSync(0) == 0) { - *(int*)data = CdGetError(); - } else - *(int*)data = -0x100; - } else - *(int*)data = -0x101; - return data; -} - -void *driveStandby(void *data) { - int type; - if (CdStandby() == 1) { - if (CdSync(0) == 0) { - *(int*)data = CdGetError(); - } else - *(int*)data = -0x100; - } else - *(int*)data = -0x101; - - do { // wait until drive detected disc type - type = CdGetDiskType(); - if (DISC_NOT_READY(type)) - DelayThread(10 * 1000); - } while (DISC_NOT_READY(type)); - printf("Standby: Disc type: %02X\n", type); - - return data; -} - -void *rpcServer(int func, void *data, int size) { - switch (func) { - case READ_RTC: - return rpcReadClock(data); - case DRIVE_STOP: - return driveStop(data); - case DRIVE_STANDBY: - return driveStandby(data); - default: - printf("Unknown RPC command %d\n", func); - return NULL; - } - return NULL; -} - - diff --git a/backends/ps2/irxboot.cpp b/backends/ps2/irxboot.cpp deleted file mode 100644 index fc844fc319..0000000000 --- a/backends/ps2/irxboot.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "backends/ps2/irxboot.h" - -extern void sioprintf(const char *zFormat, ...); - -static const char hddArg[] = "-o" "\0" "4" "\0" "-n" "\0" "20"; -static const char pfsArg[] = "-m" "\0" "2" "\0" "-o" "\0" "16" "\0" "-n" "\0" "40" /*"\0" "-debug"*/; - -IrxFile irxFiles[] = { - { "SIO2MAN", BIOS, NOTHING, NULL, 0 }, - { "MCMAN", BIOS, NOTHING, NULL, 0 }, - { "MCSERV", BIOS, NOTHING, NULL, 0 }, - { "PADMAN", BIOS, NOTHING, NULL, 0 }, - { "LIBSD", BIOS, NOTHING, NULL, 0 }, - - { "IOMANX.IRX", SYSTEM | NOT_HOST, NOTHING, NULL, 0 }, // already loaded by ps2link - { "FILEXIO.IRX", SYSTEM, NOTHING, NULL, 0 }, - { "CODYVDFS.IRX", SYSTEM, NOTHING, NULL, 0 }, - { "SJPCM.IRX", SYSTEM, NOTHING, NULL, 0 }, - - { "USBD.IRX", USB | OPTIONAL | DEPENDANCY, USB_DRIVER, NULL, 0 }, - { "PS2MOUSE.IRX", USB | OPTIONAL, MOUSE_DRIVER, NULL, 0 }, - { "RPCKBD.IRX", USB | OPTIONAL, KBD_DRIVER, NULL, 0 }, - { "USB_MASS.IRX", USB | OPTIONAL, MASS_DRIVER, NULL, 0 }, - - { "PS2DEV9.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 }, - { "PS2ATAD.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 }, - { "PS2HDD.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, hddArg, sizeof(hddArg) }, - { "PS2FS.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, pfsArg, sizeof(pfsArg) }, - { "POWEROFF.IRX", HDD | OPTIONAL | DEPENDANCY, HDD_DRIVER, NULL, 0 } -}; - -static const int numIrxFiles = sizeof(irxFiles) / sizeof(irxFiles[0]); - -BootDevice detectBootPath(const char *elfPath, char *bootPath) { - - BootDevice device; - - if (strncasecmp(elfPath, "cdrom0:", 7) == 0) - device = CDROM; - else if (strncasecmp(elfPath, "host", 4) == 0) - device = HOST; - else - device = OTHER; - - sioprintf("elf path: %s, device %d", elfPath, device); - - strcpy(bootPath, elfPath); - - char *pathPos = bootPath; - char seperator; - - if (device == CDROM) { - // CDVD uses '\' as seperator - while (*pathPos) { - if (*pathPos == '/') - *pathPos = '\\'; - pathPos++; - } - seperator = '\\'; - } else { - // all the other devices use '/' - while (*pathPos) { - if (*pathPos == '\\') - *pathPos = '/'; - pathPos++; - } - seperator = '/'; - } - pathPos = strrchr(bootPath, seperator); - if (!pathPos) - pathPos = strchr(bootPath, ':'); - - if (pathPos) { - if ((pathPos[0] == ':') && (device == CDROM)) { - pathPos[1] = '\\'; - pathPos[2] = '\0'; - } else - pathPos[1] = '\0'; - sioprintf("done. IRX path: \"%s\"", bootPath); - } else { - sioprintf("path not recognized, default to host."); - strcpy(bootPath, "host:"); - device = UNKNOWN; - } - return device; -} - -int loadIrxModules(int device, const char *irxPath, IrxReference **modules) { - - IrxReference *resModules = (IrxReference *)malloc(numIrxFiles * sizeof(IrxReference)); - IrxReference *curModule = resModules; - - for (int i = 0; i < numIrxFiles; i++) { - curModule->fileRef = irxFiles + i; - if ((device == HOST) && (irxFiles[i].flags & NOT_HOST)) - continue; - - if ((irxFiles[i].flags & TYPEMASK) == BIOS) { - curModule->loc = IRX_FILE; - curModule->path = (char *)malloc(32); - sprintf(curModule->path, "rom0:%s", irxFiles[i].name); - curModule->buffer = NULL; - curModule->size = 0; - curModule->argSize = 0; - curModule->args = NULL; - curModule->errorCode = 0; - } else { - curModule->loc = IRX_BUFFER; - curModule->path = (char *)malloc(256); - - sprintf(curModule->path, "%s%s%s", irxPath, irxFiles[i].name, (device == CDROM) ? ";1" : ""); - int fd = fioOpen(curModule->path, O_RDONLY); - if (fd < 0) { - // IRX not found - sioprintf("Can't open %s: %d", curModule->path, fd); - // we keep the error code of the path where we originally expected the file - curModule->errorCode = fd; - - // try cdrom root directory - sprintf(curModule->path, "cdrom0:\\%s;1", irxFiles[i].name); - fd = fioOpen(curModule->path, O_RDONLY); - if (fd < 0) { - // still not found, try host: - sioprintf("Can't open %s: %d", curModule->path, fd); - sprintf(curModule->path, "host:%s", irxFiles[i].name); - fd = fioOpen(curModule->path, O_RDONLY); - if (fd < 0) { - // we simply can't find it. - sioprintf("Can't open %s: %d", curModule->path, fd); - // restore the path where we originally expected the file, for error message (later, after boot up) - sprintf(curModule->path, "%s%s%s", irxPath, irxFiles[i].name, (device == CDROM) ? ";1" : ""); - } - } - } - - if (fd >= 0) { - curModule->size = fioLseek(fd, 0, SEEK_END); - fioLseek(fd, 0, SEEK_SET); - curModule->buffer = (uint8 *)memalign(64, (curModule->size + 63) & ~63); - fioRead(fd, curModule->buffer, curModule->size); - - curModule->argSize = irxFiles[i].argSize; - curModule->args = irxFiles[i].args; - curModule->errorCode = 0; - fioClose(fd); - } else { - if (irxFiles[i].flags & DEPENDANCY) { - // other modules depend on this one. - // kill the modules we already loaded, if they depend on the one that failed. - IrxReference *pos = resModules; - while (pos < curModule) { - if ((pos->fileRef->flags & TYPEMASK) == (irxFiles[i].flags & TYPEMASK)) { - if (pos->path) - free(pos->path); - if (pos->buffer) - free(pos->buffer); - - IrxReference *copyPos = pos; - while (copyPos < curModule) { - copyPos[0] = copyPos[1]; - copyPos++; - } - curModule--; - } else - pos++; - } - // and skip any remaining modules that depend on the missing one, too. - while ((i < numIrxFiles - 1) && ((irxFiles[i + 1].flags & TYPEMASK) == (curModule->fileRef->flags & TYPEMASK))) - i++; - // the module that actually failed (curModule) is kept in the array for displaying an error message - } - curModule->size = 0; - curModule->buffer = NULL; - curModule->argSize = 0; - curModule->args = NULL; - } - } - curModule++; - } - *modules = resModules; - sioprintf("List of %d modules:", curModule - resModules); - for (int i = 0; i < curModule - resModules; i++) - sioprintf("%s", resModules[i].path); - return curModule - resModules; -} - diff --git a/backends/ps2/irxboot.h b/backends/ps2/irxboot.h deleted file mode 100644 index c41a4ac311..0000000000 --- a/backends/ps2/irxboot.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __IRXBOOT_H__ -#define __IRXBOOT_H__ - -#include "common/scummsys.h" - -enum IrxFlags { - BIOS = 0, - SYSTEM = 1, - USB = 2, - HDD = 3, - TYPEMASK = 3, - - OPTIONAL = 4, - DEPENDANCY = 8, - NOT_HOST = 16 -}; - -enum IrxPurpose { - NOTHING, - HDD_DRIVER, - USB_DRIVER, - MOUSE_DRIVER, - KBD_DRIVER, - MASS_DRIVER -}; - -enum IrxLocation { - IRX_BUFFER, - IRX_FILE -}; - -enum BootDevice { - HOST = 0, - CDROM, - OTHER, - UNKNOWN -}; - -struct IrxFile { - const char *name; - int flags; - IrxPurpose purpose; - const char *args; - int argSize; -}; - -struct IrxReference { - IrxFile *fileRef; - IrxLocation loc; - char *path; - void *buffer; - uint32 size; - uint32 argSize; - const char *args; - int errorCode; -}; - -BootDevice detectBootPath(const char *elfPath, char *bootPath); -int loadIrxModules(int device, const char *irxPath, IrxReference **modules); - -#endif // __IRXBOOT_H__ - diff --git a/backends/ps2/ps2input.cpp b/backends/ps2/ps2input.cpp deleted file mode 100644 index b3835ef648..0000000000 --- a/backends/ps2/ps2input.cpp +++ /dev/null @@ -1,547 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include -#include "backends/ps2/rpckbd.h" -#include "backends/ps2/ps2input.h" -#include "backends/ps2/ps2pad.h" -#include "backends/ps2/systemps2.h" -#include "backends/ps2/sdlkeys.h" -#include "common/system.h" - -Ps2Input::Ps2Input(OSystem_PS2 *system, bool mouseLoaded, bool kbdLoaded) { - _system = system; - _mouseLoaded = mouseLoaded; - _kbdLoaded = kbdLoaded; - _pad = new Ps2Pad(system); - _lastPadCheck = 0; - _posX = _posY = _mButtons = _padLastButtons = 0; - _padAccel = 0; - _minx = _miny = 0; - _maxy = 239; - _maxx = 319; - _keyFlags = 0; - if (_mouseLoaded) { - if (PS2MouseInit() >= 0) { - PS2MouseSetReadMode(PS2MOUSE_READMODE_ABS); - printf("PS2Mouse initialized\n"); - } else { // shouldn't happen if the drivers were correctly loaded - printf("unable to initialize PS2Mouse!\n"); - _mouseLoaded = false; - } - } - if (_kbdLoaded) { - if (PS2KbdInit() >= 0) { - PS2KbdSetReadmode(PS2KBD_READMODE_RAW); - printf("PS2Kbd initialized\n"); - } else { - printf("unable to initialize PS2Kbd!\n"); - _kbdLoaded = false; - } - } -} - -Ps2Input::~Ps2Input(void) { -} - -void Ps2Input::newRange(uint16 minx, uint16 miny, uint16 maxx, uint16 maxy) { - _minx = minx; - _miny = miny; - _maxx = maxx; - _maxy = maxy; - if (_mouseLoaded) - PS2MouseSetBoundary(minx, maxx, miny, maxy); - warpTo(_posX, _posY); -} - -void Ps2Input::warpTo(uint16 x, uint16 y) { - if ((x >= _minx) && (x <= _maxx) && (y >= _miny) && (y <= _maxy)) { - _posX = x; - _posY = y; - } else { - _posX = (x < _minx) ? (_minx) : ((x > _maxx) ? (_maxx) : (x)); - _posY = (y < _miny) ? (_miny) : ((y > _maxy) ? (_maxy) : (y)); - } - if (_mouseLoaded) - PS2MouseSetPosition(_posX, _posY); -} - -#define JOY_THRESHOLD 30 -#define PAD_CHECK_TIME 20 - -int Ps2Input::mapKey(int key, int mod) { // copied from sdl backend - if (key >= SDLK_F1 && key <= SDLK_F9) { - return key - SDLK_F1 + 315; - } else if (key >= SDLK_KP0 && key <= SDLK_KP9) { - return key - SDLK_KP0 + '0'; - } else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) { - return key; - } else if (key >= 'a' && key <= 'z' && mod & OSystem::KBD_SHIFT) { - return key & ~0x20; - } else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) { - return 0; - } - return key; -} - -bool Ps2Input::pollEvent(OSystem::Event *event) { - bool checkPadMouse, checkPadKbd; - checkPadMouse = checkPadKbd = _pad->padAlive(); - - if (_mouseLoaded && (PS2MouseEnum() > 0)) { // usb mouse connected - mouse_data mData; - PS2MouseRead(&mData); - if ((_posX != mData.x) || (_posY != mData.y)) { - event->mouse.x = _posX = mData.x; - event->mouse.y = _posY = mData.y; - event->type = OSystem::EVENT_MOUSEMOVE; - return true; - } - if (mData.buttons != _mButtons) { - uint16 change = _mButtons ^ mData.buttons; - _mButtons = mData.buttons; - if (change & (PS2MOUSE_BTN1 | PS2MOUSE_BTN2)) { - if (change & PS2MOUSE_BTN1) - event->type = (_mButtons & PS2MOUSE_BTN1) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; - else - event->type = (_mButtons & PS2MOUSE_BTN2) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; - event->mouse.x = _posX; - event->mouse.y = _posY; - return true; - } - } - checkPadMouse = false; - } - if (_kbdLoaded) { // there's no way to tell if there's actually a keyboard connected - PS2KbdRawKey key; - if (PS2KbdReadRaw(&key) == 1) { - if (_usbToSdlk[key.key]) { - if ((_usbToSdlk[key.key] == SDLK_LSHIFT) || (_usbToSdlk[key.key] == SDLK_RSHIFT)) { - if (key.state & 1) - _keyFlags |= OSystem::KBD_SHIFT; - else - _keyFlags &= ~OSystem::KBD_SHIFT; - } else if ((_usbToSdlk[key.key] == SDLK_LCTRL) || (_usbToSdlk[key.key] == SDLK_RCTRL)) { - if (key.state & 1) - _keyFlags |= OSystem::KBD_CTRL; - else - _keyFlags &= ~OSystem::KBD_CTRL; - } else if ((_usbToSdlk[key.key] == SDLK_LALT) || (_usbToSdlk[key.key] == SDLK_RALT)) { - if (key.state & 1) - _keyFlags |= OSystem::KBD_ALT; - else - _keyFlags &= ~OSystem::KBD_ALT; - } - if (key.state & 1) // down - event->type = OSystem::EVENT_KEYDOWN; - else - event->type = OSystem::EVENT_KEYUP; - event->kbd.flags = 0; - event->kbd.keycode = _usbToSdlk[key.key]; - event->kbd.ascii = mapKey(_usbToSdlk[key.key], _keyFlags); - return true; - } else - printf("unknown keycode %02X - %02X\n", key.state, key.key); - } - } - if (checkPadMouse || checkPadKbd) { - // no usb mouse, simulate it using the pad - uint16 buttons; - int16 joyh, joyv; - _pad->readPad(&buttons, &joyh, &joyv); - uint16 btnChange = buttons ^ _padLastButtons; - - if (checkPadMouse) { - if (btnChange & (PAD_CROSS | PAD_CIRCLE)) { - if (btnChange & PAD_CROSS) - event->type = (buttons & PAD_CROSS) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; - else - event->type = (buttons & PAD_CIRCLE) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; - event->mouse.x = _posX; - event->mouse.y = _posY; - _padLastButtons = buttons; - return true; - } - uint32 time = _system->getMillis(); - if (time - _lastPadCheck > PAD_CHECK_TIME) { - _lastPadCheck = time; - int16 newX = _posX; - int16 newY = _posY; - if ((ABS(joyh) > JOY_THRESHOLD) || (ABS(joyv) > JOY_THRESHOLD)) { - newX += joyh / 20; - newY += joyv / 20; - } else if (buttons & PAD_DIR_MASK) { - if (_padLastButtons & PAD_DIR_MASK) { - if (_padAccel < 16) - _padAccel++; - } else - _padAccel = 0; - _padLastButtons = buttons; - if (buttons & PAD_LEFT) - newX -= _padAccel >> 2; - if (buttons & PAD_RIGHT) - newX += _padAccel >> 2; - if (buttons & PAD_UP) - newY -= _padAccel >> 2; - if (buttons & PAD_DOWN) - newY += _padAccel >> 2; - } - newX = ((newX < (int16)_minx) ? (_minx) : ((newX > (int16)_maxx) ? (_maxx) : ((int16)newX))); - newY = ((newY < (int16)_miny) ? (_miny) : ((newY > (int16)_maxy) ? (_maxy) : ((int16)newY))); - if ((_posX != newX) || (_posY != newY)) { - event->type = OSystem::EVENT_MOUSEMOVE; - event->mouse.x = _posX = newX; - event->mouse.y = _posY = newY; - return true; - } - } - } - if (checkPadKbd) { - if (getKeyEvent(event, btnChange, (btnChange & buttons) != 0)) { - _padLastButtons = buttons; - return true; - } - } - } - return false; -} - -bool Ps2Input::getKeyEvent(OSystem::Event *event, uint16 buttonCode, bool down) { - // for simulating key presses with the pad - if (buttonCode) { - uint8 entry = 0; - while (!(buttonCode & 1)) { - entry++; - buttonCode >>= 1; - } - if (_padCodes[entry]) { - event->type = (down) ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; - event->kbd.keycode = _padCodes[entry]; - event->kbd.flags = _padFlags[entry]; - event->kbd.ascii = mapKey(_padCodes[entry], _padFlags[entry]); - return true; - } - } - return false; -} - -const int Ps2Input::_usbToSdlk[0x100] = { - /* 00 */ 0, - /* 01 */ 0, - /* 02 */ 0, - /* 03 */ 0, - /* 04 */ SDLK_a, - /* 05 */ SDLK_b, - /* 06 */ SDLK_c, - /* 07 */ SDLK_d, - /* 08 */ SDLK_e, - /* 09 */ SDLK_f, - /* 0A */ SDLK_g, - /* 0B */ SDLK_h, - /* 0C */ SDLK_i, - /* 0D */ SDLK_j, - /* 0E */ SDLK_k, - /* 0F */ SDLK_l, - /* 10 */ SDLK_m, - /* 11 */ SDLK_n, - /* 12 */ SDLK_o, - /* 13 */ SDLK_p, - /* 14 */ SDLK_q, - /* 15 */ SDLK_r, - /* 16 */ SDLK_s, - /* 17 */ SDLK_t, - /* 18 */ SDLK_u, - /* 19 */ SDLK_v, - /* 1A */ SDLK_w, - /* 1B */ SDLK_x, - /* 1C */ SDLK_y, - /* 1D */ SDLK_z, - /* 1E */ SDLK_1, - /* 1F */ SDLK_2, - /* 20 */ SDLK_3, - /* 21 */ SDLK_4, - /* 22 */ SDLK_5, - /* 23 */ SDLK_6, - /* 24 */ SDLK_7, - /* 25 */ SDLK_8, - /* 26 */ SDLK_9, - /* 27 */ SDLK_0, - /* 28 */ SDLK_RETURN, - /* 29 */ SDLK_ESCAPE, - /* 2A */ SDLK_BACKSPACE, - /* 2B */ SDLK_TAB, - /* 2C */ SDLK_SPACE, - /* 2D */ SDLK_MINUS, - /* 2E */ SDLK_EQUALS, - /* 2F */ SDLK_LEFTBRACKET, - /* 30 */ SDLK_RIGHTBRACKET, - /* 31 */ SDLK_BACKSLASH, - /* 32 */ SDLK_HASH, - /* 33 */ SDLK_SEMICOLON, - /* 34 */ SDLK_QUOTE, - /* 35 */ SDLK_BACKQUOTE, - /* 36 */ SDLK_COMMA, - /* 37 */ SDLK_PERIOD, - /* 38 */ SDLK_SLASH, - /* 39 */ SDLK_CAPSLOCK, - /* 3A */ SDLK_F1, - /* 3B */ SDLK_F2, - /* 3C */ SDLK_F3, - /* 3D */ SDLK_F4, - /* 3E */ SDLK_F5, - /* 3F */ SDLK_F6, - /* 40 */ SDLK_F7, - /* 41 */ SDLK_F8, - /* 42 */ SDLK_F9, - /* 43 */ SDLK_F10, - /* 44 */ SDLK_F11, - /* 45 */ SDLK_F12, - /* 46 */ SDLK_PRINT, - /* 47 */ SDLK_SCROLLOCK, - /* 48 */ SDLK_PAUSE, - /* 49 */ SDLK_INSERT, - /* 4A */ SDLK_HOME, - /* 4B */ SDLK_PAGEUP, - /* 4C */ SDLK_DELETE, - /* 4D */ SDLK_END, - /* 4E */ SDLK_PAGEDOWN, - /* 4F */ SDLK_RIGHT, - /* 50 */ SDLK_LEFT, - /* 51 */ SDLK_DOWN, - /* 52 */ SDLK_UP, - /* 53 */ SDLK_NUMLOCK, - /* 54 */ SDLK_KP_DIVIDE, - /* 55 */ SDLK_KP_MULTIPLY, - /* 56 */ SDLK_KP_MINUS, - /* 57 */ SDLK_KP_PLUS, - /* 58 */ SDLK_KP_ENTER, - /* 59 */ SDLK_KP1, - /* 5A */ SDLK_KP2, - /* 5B */ SDLK_KP3, - /* 5C */ SDLK_KP4, - /* 5D */ SDLK_KP5, - /* 5E */ SDLK_KP6, - /* 5F */ SDLK_KP7, - /* 60 */ SDLK_KP8, - /* 61 */ SDLK_KP9, - /* 62 */ SDLK_KP0, - /* 63 */ SDLK_KP_PERIOD, - /* 64 */ 0, - /* 65 */ 0, - /* 66 */ 0, - /* 67 */ SDLK_KP_EQUALS, - /* 68 */ 0, - /* 69 */ 0, - /* 6A */ 0, - /* 6B */ 0, - /* 6C */ 0, - /* 6D */ 0, - /* 6E */ 0, - /* 6F */ 0, - /* 70 */ 0, - /* 71 */ 0, - /* 72 */ 0, - /* 73 */ 0, - /* 74 */ 0, - /* 75 */ 0, - /* 76 */ 0, - /* 77 */ 0, - /* 78 */ 0, - /* 79 */ 0, - /* 7A */ 0, - /* 7B */ 0, - /* 7C */ 0, - /* 7D */ 0, - /* 7E */ 0, - /* 7F */ 0, - /* 80 */ 0, - /* 81 */ 0, - /* 82 */ 0, - /* 83 */ 0, - /* 84 */ 0, - /* 85 */ 0, - /* 86 */ 0, - /* 87 */ 0, - /* 88 */ 0, - /* 89 */ 0, - /* 8A */ 0, - /* 8B */ 0, - /* 8C */ 0, - /* 8D */ 0, - /* 8E */ 0, - /* 8F */ 0, - /* 90 */ 0, - /* 91 */ 0, - /* 92 */ 0, - /* 93 */ 0, - /* 94 */ 0, - /* 95 */ 0, - /* 96 */ 0, - /* 97 */ 0, - /* 98 */ 0, - /* 99 */ 0, - /* 9A */ 0, - /* 9B */ 0, - /* 9C */ 0, - /* 9D */ 0, - /* 9E */ 0, - /* 9F */ 0, - /* A0 */ 0, - /* A1 */ 0, - /* A2 */ 0, - /* A3 */ 0, - /* A4 */ 0, - /* A5 */ 0, - /* A6 */ 0, - /* A7 */ 0, - /* A8 */ 0, - /* A9 */ 0, - /* AA */ 0, - /* AB */ 0, - /* AC */ 0, - /* AD */ 0, - /* AE */ 0, - /* AF */ 0, - /* B0 */ 0, - /* B1 */ 0, - /* B2 */ 0, - /* B3 */ 0, - /* B4 */ 0, - /* B5 */ 0, - /* B6 */ 0, - /* B7 */ 0, - /* B8 */ 0, - /* B9 */ 0, - /* BA */ 0, - /* BB */ 0, - /* BC */ 0, - /* BD */ 0, - /* BE */ 0, - /* BF */ 0, - /* C0 */ 0, - /* C1 */ 0, - /* C2 */ 0, - /* C3 */ 0, - /* C4 */ 0, - /* C5 */ 0, - /* C6 */ 0, - /* C7 */ 0, - /* C8 */ 0, - /* C9 */ 0, - /* CA */ 0, - /* CB */ 0, - /* CC */ 0, - /* CD */ 0, - /* CE */ 0, - /* CF */ 0, - /* D0 */ 0, - /* D1 */ 0, - /* D2 */ 0, - /* D3 */ 0, - /* D4 */ 0, - /* D5 */ 0, - /* D6 */ 0, - /* D7 */ 0, - /* D8 */ 0, - /* D9 */ 0, - /* DA */ 0, - /* DB */ 0, - /* DC */ 0, - /* DD */ 0, - /* DE */ 0, - /* DF */ 0, - /* E0 */ SDLK_LCTRL, - /* E1 */ SDLK_LSHIFT, - /* E2 */ SDLK_LALT, - /* E3 */ 0, - /* E4 */ SDLK_RCTRL, - /* E5 */ SDLK_RSHIFT, - /* E6 */ SDLK_RALT, - /* E7 */ 0, - /* E8 */ 0, - /* E9 */ 0, - /* EA */ 0, - /* EB */ 0, - /* EC */ 0, - /* ED */ 0, - /* EE */ 0, - /* EF */ 0, - /* F0 */ 0, - /* F1 */ 0, - /* F2 */ 0, - /* F3 */ 0, - /* F4 */ 0, - /* F5 */ 0, - /* F6 */ 0, - /* F7 */ 0, - /* F8 */ 0, - /* F9 */ 0, - /* FA */ 0, - /* FB */ 0, - /* FC */ 0, - /* FD */ 0, - /* FE */ 0, - /* FF */ 0 -}; - -const int Ps2Input::_padCodes[16] = { - SDLK_1, // Select - 0, // L3 - 0, // R3 - SDLK_F5, // Start - 0, // Up - 0, // Right - 0, // Down - 0, // Left - SDLK_KP0, // L2 - 0, // R2 - SDLK_n, // L1 - SDLK_y, // R1 - SDLK_ESCAPE, // Triangle - 0, // Circle => Right mouse button - 0, // Cross => Left mouse button - SDLK_RETURN // Square -}; - -const int Ps2Input::_padFlags[16] = { - 0, // Select - 0, // L3 - 0, // R3 - 0, // Start - 0, // Up - 0, // Right - 0, // Down - 0, // Left - 0, // L2 - 0, // R2 - 0, // L1 - 0, // R1 - 0, // Triangle - 0, // Circle - 0, // Cross - 0 // Square -}; - - diff --git a/backends/ps2/ps2input.h b/backends/ps2/ps2input.h deleted file mode 100644 index c7a29c7bfd..0000000000 --- a/backends/ps2/ps2input.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __PS2INPUT_H__ -#define __PS2INPUT_H__ - -#include "common/system.h" - -class OSystem_PS2; -class Ps2Pad; - -class Ps2Input { -public: - Ps2Input(OSystem_PS2 *system, bool mouseLoaded, bool kbdLoaded); - ~Ps2Input(void); - void newRange(uint16 minx, uint16 miny, uint16 maxx, uint16 maxy); - bool pollEvent(OSystem::Event *event); - void warpTo(uint16 x, uint16 y); -private: - int mapKey(int key, int mod); - bool getKeyEvent(OSystem::Event *event, uint16 buttonCode, bool down); - OSystem_PS2 *_system; - Ps2Pad *_pad; - - uint16 _minx, _maxx, _miny, _maxy; - - uint16 _posX, _posY; - uint16 _mButtons; - uint16 _padLastButtons; - uint32 _lastPadCheck; - uint16 _padAccel; - - bool _mouseLoaded, _kbdLoaded; - int _keyFlags; - static const int _padCodes[16], _padFlags[16]; - static const int _usbToSdlk[0x100]; -}; - -#endif // __PS2INPUT_H__ - diff --git a/backends/ps2/ps2mutex.cpp b/backends/ps2/ps2mutex.cpp deleted file mode 100644 index 6ae9a3a005..0000000000 --- a/backends/ps2/ps2mutex.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "backends/ps2/systemps2.h" - -OSystem::MutexRef OSystem_PS2::createMutex(void) { - WaitSema(_mutexSema); - Ps2Mutex *mutex = NULL; - for (int i = 0; i < MAX_MUTEXES; i++) - if (_mutex[i].sema < 0) { - mutex = _mutex + i; - break; - } - if (mutex) { - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - mutex->sema = CreateSema(&newSema); - mutex->owner = mutex->count = 0; - } else - printf("OSystem_PS2::createMutex: ran out of Mutex slots!\n"); - SignalSema(_mutexSema); - return (OSystem::MutexRef)mutex; -} - -void OSystem_PS2::lockMutex(MutexRef mutex) { - WaitSema(_mutexSema); - Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; - int tid = GetThreadId(); - assert(tid != 0); - if (sysMutex->owner && (sysMutex->owner == tid)) - sysMutex->count++; - else { - SignalSema(_mutexSema); - WaitSema(sysMutex->sema); - WaitSema(_mutexSema); - sysMutex->owner = tid; - sysMutex->count = 0; - } - SignalSema(_mutexSema); -} - -void OSystem_PS2::unlockMutex(MutexRef mutex) { - WaitSema(_mutexSema); - Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; - int tid = GetThreadId(); - if (sysMutex->owner && sysMutex->count && (sysMutex->owner == tid)) - sysMutex->count--; - else { - assert(sysMutex->count == 0); - SignalSema(sysMutex->sema); - sysMutex->owner = 0; - } - SignalSema(_mutexSema); -} - -void OSystem_PS2::deleteMutex(MutexRef mutex) { - WaitSema(_mutexSema); - Ps2Mutex *sysMutex = (Ps2Mutex*)mutex; - if (sysMutex->owner || sysMutex->count) - printf("WARNING: Deleting LOCKED mutex!\n"); - DeleteSema(sysMutex->sema); - sysMutex->sema = -1; - SignalSema(_mutexSema); -} - diff --git a/backends/ps2/ps2pad.cpp b/backends/ps2/ps2pad.cpp deleted file mode 100644 index 8394a421db..0000000000 --- a/backends/ps2/ps2pad.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include "backends/ps2/systemps2.h" -#include "backends/ps2/ps2pad.h" - -Ps2Pad::Ps2Pad(OSystem_PS2 *system) { - _system = system; - _padBuf = (uint8*)memalign(64, 256); - _padStatus = STAT_NONE; - - padInit(0); // initialize library - _port = _slot = 0; // first controller, no multitap - initPad(); -} - -void Ps2Pad::initPad(void) { - int modes = 0; - if (_padStatus == STAT_NONE) { - if (padPortOpen(_port, _slot, _padBuf) == 1) { - _padStatus = STAT_OPEN; - _padInitTime = _system->getMillis(); - } else { - padPortClose(_port, _slot); - printf("Unable to open port (%d/%d)!\n", _port, _slot); - } - } else { - if (checkPadReady(_port, _slot)) { - switch (_padStatus) { - case STAT_OPEN: - _padStatus = STAT_DETECT; - break; - case STAT_DETECT: - _isDualShock = false; - modes = padInfoMode(_port, _slot, PAD_MODETABLE, -1); - - // Verify that the controller has a DUAL SHOCK mode - for (int cnt = 0; cnt < modes; cnt++) - if (padInfoMode(_port, _slot, PAD_MODETABLE, cnt) == PAD_TYPE_DUALSHOCK) - _isDualShock = true; - - // If ExId != 0x0 => This controller has actuator engines - // This check should always pass if the Dual Shock test above passed - if (_isDualShock) - if (padInfoMode(_port, _slot, PAD_MODECUREXID, 0) == 0) - _isDualShock = false; - - if (_isDualShock) { - // When using MMODE_LOCK, user cant change mode with Select button - padSetMainMode(_port, _slot, PAD_MMODE_DUALSHOCK, PAD_MMODE_LOCK); - _padStatus = STAT_INIT_DSHOCK; - } else - _padStatus = STAT_WAIT_READY; - break; - case STAT_INIT_DSHOCK: - padEnterPressMode(_port, _slot); - _padStatus = STAT_CHECK_ACT; - break; - case STAT_CHECK_ACT: - _actuators = padInfoAct(_port, _slot, -1, 0); - if (_actuators != 0) - _padStatus = STAT_INIT_ACT; - else { - _isDualShock = false; - _padStatus = STAT_WAIT_READY; - } - break; - case STAT_INIT_ACT: - char actAlign[6]; - actAlign[0] = 0; - actAlign[1] = 1; - actAlign[2] = actAlign[3] = actAlign[4] = actAlign[5] = 0xff; - padSetActAlign(_port, _slot, actAlign); - _padStatus = STAT_WAIT_READY; - break; - case STAT_WAIT_READY: - _padStatus = STAT_OKAY; - break; - case STAT_OKAY: - // pad is already initialized - break; - } - } else { - // check for timeout... - if (_system->getMillis() - _padInitTime > 5000) { - // still no pad, give up. - if (padPortClose(_port, _slot) != 1) - printf("WARNING: can't close port: %d/%d\n", _port, _slot); - printf("looking for pad, gave up and closed port\n"); - _padStatus = STAT_NONE; - } - } - } -} - -bool Ps2Pad::checkPadReady(int port, int slot) { - int state = padGetState(port, slot); - return (state == PAD_STATE_STABLE) || (state == PAD_STATE_FINDCTP1); -} - -bool Ps2Pad::padAlive(void) { - if ((_padStatus == STAT_OKAY) && checkPadReady(_port, _slot)) - return true; - initPad(); - return false; -} - -bool Ps2Pad::isDualShock(void) { - return _isDualShock; -} - -void Ps2Pad::readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv) { - if (padAlive()) { - struct padButtonStatus buttons; - padRead(_port, _slot, &buttons); - *pbuttons = ~buttons.btns; - if (_isDualShock) { - *joyh = (int16)buttons.ljoy_h - 128; - *joyv = (int16)buttons.ljoy_v - 128; - } else - *joyh = *joyv = 0; - } else { - *joyh = *joyv = 0; - *pbuttons = 0; - } -} - - diff --git a/backends/ps2/ps2pad.h b/backends/ps2/ps2pad.h deleted file mode 100644 index 0e2994aafe..0000000000 --- a/backends/ps2/ps2pad.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __PS2PAD_H__ -#define __PS2PAD_H__ - -enum PadStatus { - STAT_NONE, - STAT_OPEN, - STAT_DETECT, - STAT_INIT_DSHOCK, - STAT_CHECK_ACT, - STAT_INIT_ACT, - STAT_WAIT_READY, - STAT_OKAY -}; - -#include "common/system.h" -#include - -#define PAD_DIR_MASK (PAD_LEFT | PAD_DOWN | PAD_RIGHT | PAD_UP) -#define PAD_BUTTON_MASK (PAD_START | PAD_SELECT | PAD_SQUARE | PAD_CROSS | PAD_CIRCLE | PAD_TRIANGLE) - -class OSystem_PS2; - -class Ps2Pad { -public: - Ps2Pad(OSystem_PS2 *system); - bool padAlive(void); - bool isDualShock(void); - void readPad(uint16 *pbuttons, int16 *joyh, int16 *joyv); -private: - void initPad(void); - bool checkPadReady(int port, int slot); - - OSystem_PS2 *_system; - int _port, _slot; - - uint32 _padInitTime; - PadStatus _padStatus; - bool _isDualShock; - uint8 *_padBuf; - char _actuators; -}; - -#endif //__PS2PAD_H__ - diff --git a/backends/ps2/ps2time.cpp b/backends/ps2/ps2time.cpp deleted file mode 100644 index bfccfe1300..0000000000 --- a/backends/ps2/ps2time.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "backends/ps2/systemps2.h" -#include "eecodyvdfs.h" -#include -#define FROM_BCD(a) ((a >> 4) * 10 + (a & 0xF)) - -static int g_timeSecs; -static int g_day, g_month, g_year; -static int g_lastTimeCheck; -extern volatile uint32 msecCount; - -void buildNewDate(int dayDiff) { - static int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - if (((g_year % 4) == 0) && (((g_year % 100) != 0) || ((g_year % 1000) == 0))) - daysPerMonth[1] = 29; - else - daysPerMonth[1] = 28; - - if (dayDiff == -1) { - g_day--; - if (g_day == 0) { - g_month--; - if (g_month == 0) { - g_year--; - g_month = 12; - } - g_day = daysPerMonth[g_month - 1]; - } - } else if (dayDiff == 1) { - g_day++; - if (g_day > daysPerMonth[g_month - 1]) { - g_day = 1; - g_month++; - if (g_month > 12) { - g_month = 1; - g_year++; - } - } - } -} - -#define SECONDS_PER_DAY (24 * 60 * 60) - -void OSystem_PS2::readRtcTime(void) { - struct CdClock cdClock; - readRTC(&cdClock); - - g_lastTimeCheck = getMillis(); - - if (cdClock.stat) { - msgPrintf(5000, "Unable to read RTC time, EC: %d\n", cdClock.stat); - g_day = g_month = 1; - g_year = 0; - g_timeSecs = 0; - } else { - int gmtOfs = configGetTimezone(); - if (configIsDaylightSavingEnabled()) - gmtOfs += 60; - - int timeSecs = (FROM_BCD(cdClock.hour) * 60 + FROM_BCD(cdClock.minute)) * 60 + FROM_BCD(cdClock.second); - timeSecs -= 9 * 60 * 60; // minus 9 hours, JST -> GMT conversion - timeSecs += gmtOfs * 60; // GMT -> timezone the user selected - - g_day = FROM_BCD(cdClock.day); - g_month = FROM_BCD(cdClock.month); - g_year = FROM_BCD(cdClock.year); - - if (timeSecs < 0) { - buildNewDate(-1); - timeSecs += SECONDS_PER_DAY; - } else if (timeSecs >= SECONDS_PER_DAY) { - buildNewDate(+1); - timeSecs -= SECONDS_PER_DAY; - } - g_timeSecs = (uint32)timeSecs; - } - - sioprintf("Time: %d:%02d:%02d - %d.%d.%4d", g_timeSecs / (60 * 60), (g_timeSecs / 60) % 60, g_timeSecs % 60, - g_day, g_month, g_year + 2000); -} - -extern "C" time_t time(time_t *p) { - return (time_t)g_timeSecs; -} - -extern "C" struct tm *localtime(const time_t *p) { - uint32 currentSecs = g_timeSecs + (msecCount - g_lastTimeCheck) / 1000; - if (currentSecs >= SECONDS_PER_DAY) { - buildNewDate(+1); - g_lastTimeCheck += SECONDS_PER_DAY * 1000; - currentSecs = g_timeSecs + (msecCount - g_lastTimeCheck) / 1000; - } - - static struct tm retStruct; - memset(&retStruct, 0, sizeof(retStruct)); - - retStruct.tm_hour = currentSecs / (60 * 60); - retStruct.tm_min = (currentSecs / 60) % 60; - retStruct.tm_sec = currentSecs % 60; - retStruct.tm_year = g_year + 100; - retStruct.tm_mday = g_day; - retStruct.tm_mon = g_month - 1; - // tm_wday, tm_yday and tm_isdst are zero for now - return &retStruct; -} diff --git a/backends/ps2/savefile.cpp b/backends/ps2/savefile.cpp deleted file mode 100644 index 495fc556b3..0000000000 --- a/backends/ps2/savefile.cpp +++ /dev/null @@ -1,801 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "backends/ps2/savefile.h" -#include "backends/ps2/Gs2dScreen.h" -#include "backends/ps2/systemps2.h" -#include "common/scummsys.h" - -extern void *_gp; - -#define UCL_MAGIC 0x314C4355 - -#define PORT 0 -#define SLOT 0 -// port 0, slot 0: memory card in first slot. - -void sioprintf(const char *zFormat, ...); - -class McAccess { -public: - McAccess(int port, int slot); - ~McAccess(void); - int open(const char *name, int mode); - int close(int fd); - int size(int fd); - int read(int fd, void *buf, int size); - int write(int fd, const void *buf, int size); - int mkDir(const char *name); - int getDir(const char *name, unsigned int mode, int max, void *dest); - int getInfo(int *type, int *free, int *format); - int remove(const char *name); -private: - int _sema; - int _port, _slot; -}; - -McAccess::McAccess(int port, int slot) { - _port = port; - _slot = slot; - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - _sema = CreateSema(&newSema); - - assert(mcInit(MC_TYPE_MC) >= 0); -} - -McAccess::~McAccess(void) { - DeleteSema(_sema); -} - -int McAccess::open(const char *name, int mode) { - int res; - WaitSema(_sema); - mcOpen(_port, _slot, name, mode); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::close(int fd) { - int res; - WaitSema(_sema); - mcClose(fd); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::size(int fd) { - int res, size; - WaitSema(_sema); - mcSeek(fd, 0, SEEK_END); - mcSync(0, NULL, &size); - mcSeek(fd, 0, SEEK_SET); - mcSync(0, NULL, &res); - SignalSema(_sema); - assert(res == 0); - return size; -} - -int McAccess::read(int fd, void *buf, int size) { - int res; - WaitSema(_sema); - mcRead(fd, buf, size); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::write(int fd, const void *buf, int size) { - int res; - WaitSema(_sema); - mcWrite(fd, buf, size); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::mkDir(const char *name) { - int res; - WaitSema(_sema); - mcMkDir(_port, _slot, name); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::remove(const char *name) { - int res; - WaitSema(_sema); - mcDelete(_port, _slot, name); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::getDir(const char *name, unsigned int mode, int max, void *dest) { - int res; - WaitSema(_sema); - mcGetDir(_port, _slot, name, mode, max, (mcTable*)dest); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -int McAccess::getInfo(int *type, int *free, int *format) { - int res; - WaitSema(_sema); - mcGetInfo(_port, _slot, type, free, format); - mcSync(0, NULL, &res); - SignalSema(_sema); - return res; -} - -class UclOutSaveFile : public Common::OutSaveFile { -public: - UclOutSaveFile(const char *filename, OSystem_PS2 *system, Gs2dScreen *screen, McAccess *mc); - virtual ~UclOutSaveFile(void); - virtual uint32 write(const void *ptr, uint32 size); - virtual void flush(void); - virtual bool ioFailed(void) const; - virtual void clearIOFailed(void); -private: - OSystem_PS2 *_system; - Gs2dScreen *_screen; - McAccess *_mc; - int _fd; - uint8 *_buf; - uint32 _bufSize, _bufPos; - bool _ioFailed, _wasFlushed; - char _fileName[128]; -}; - -class UclInSaveFile : public Common::InSaveFile { -public: - UclInSaveFile(const char *filename, Gs2dScreen *screen, McAccess *mc); - virtual ~UclInSaveFile(void); - virtual bool eos(void) const; - virtual uint32 read(void *ptr, uint32 size); - virtual bool ioFailed(void) const; - virtual void clearIOFailed(void); - virtual void skip(uint32 offset); - - virtual uint32 pos(void) const; - virtual uint32 size(void) const; - virtual void seek(int pos, int whence = SEEK_SET); -private: - Gs2dScreen *_screen; - McAccess *_mc; - uint8 *_buf; - uint32 _bufSize, _bufPos; - bool _ioFailed; -}; - -class AutoSaveFile : public Common::OutSaveFile { -public: - AutoSaveFile(Ps2SaveFileManager *saveMan, const char *filename); - ~AutoSaveFile(void); - virtual uint32 write(const void *ptr, uint32 size); - virtual void flush(void) { }; - virtual bool ioFailed(void) { return false; }; - virtual void clearIOFailed(void) {}; -private: - Ps2SaveFileManager *_saveMan; - char _fileName[256]; - uint8 *_buf; - uint32 _bufSize, _bufPos; -}; - -AutoSaveFile::AutoSaveFile(Ps2SaveFileManager *saveMan, const char *filename) { - strcpy(_fileName, filename); - _saveMan = saveMan; - _bufSize = 65536; - _buf = (uint8*)memalign(64, _bufSize); - _bufPos = 0; -} - -AutoSaveFile::~AutoSaveFile(void) { - _saveMan->writeSaveNonblocking(_fileName, _buf, _bufPos); - free(_buf); -} - -uint32 AutoSaveFile::write(const void *ptr, uint32 size) { - uint32 bytesFree = _bufSize - _bufPos; - if (bytesFree < size) { - uint32 allocBytes = (size > 32 * 1024) ? size : 32 * 1024; - _bufSize += allocBytes; - _buf = (uint8*)realloc(_buf, _bufSize); - bytesFree = _bufSize - _bufPos; - } - memcpy(_buf + _bufPos, ptr, size); - _bufPos += size; - return size; -} - -#define MAX_MC_ENTRIES 16 - -void runSaveThread(Ps2SaveFileManager *param); - -Ps2SaveFileManager::Ps2SaveFileManager(OSystem_PS2 *system, Gs2dScreen *screen) { - _system = system; - _screen = screen; - _mc = new McAccess(0, 0); - - _mcDirList = (mcTable*)memalign(64, MAX_MC_ENTRIES * sizeof(mcTable)); - _mcDirName[0] = '\0'; - _mcCheckTime = 0; - _mcNeedsUpdate = true; - - for (int mcCheckCount = 0; mcCheckCount < 3; mcCheckCount++) { - /* retry mcGetInfo 3 times. It slows down startup without mc considerably, - but cheap 3rd party memory cards apparently fail to get detected once in a while */ - - int mcType, mcFree, mcFormat; - int res = _mc->getInfo(&mcType, &mcFree, &mcFormat); - - if ((res == 0) || (res == -1)) { // mc okay - _mcPresent = true; - printf("MC okay, result = %d. Type %d, Free %d, Format %d\n", res, mcType, mcFree, mcFormat); - checkMainDirectory(); - break; - } else { - _mcPresent = false; - printf("MC failed, not present or not formatted, code %d\n", res); - } - } - - // create save thread - ee_sema_t newSema; - newSema.init_count = 0; - newSema.max_count = 1; - _autoSaveSignal = CreateSema(&newSema); - _autoSaveBuf = NULL; - _autoSaveSize = 0; - _systemQuit = false; - - ee_thread_t saveThread, thisThread; - ReferThreadStatus(GetThreadId(), &thisThread); - - saveThread.initial_priority = thisThread.current_priority + 1; - saveThread.stack_size = 8 * 1024; - _autoSaveStack = malloc(saveThread.stack_size); - saveThread.stack = _autoSaveStack; - saveThread.func = (void *)runSaveThread; - saveThread.gp_reg = &_gp; - - _autoSaveTid = CreateThread(&saveThread); - assert(_autoSaveTid >= 0); - StartThread(_autoSaveTid, this); -} - -Ps2SaveFileManager::~Ps2SaveFileManager(void) { -} - -void Ps2SaveFileManager::checkMainDirectory(void) { - // verify that the main directory (scummvm config + icon) exists - int ret, fd; - _mcNeedsUpdate = true; - ret = _mc->getDir("/ScummVM/*", 0, MAX_MC_ENTRIES, _mcDirList); - printf("/ScummVM/* res = %d\n", ret); - if (ret <= 0) { // assume directory doesn't exist - printf("Dir doesn't exist\n"); - ret = _mc->mkDir("/ScummVM"); - if (ret >= 0) { - fd = _mc->open("/ScummVM/scummvm.icn", O_WRONLY | O_CREAT); - if (fd >= 0) { - uint16 icoSize; - uint16 *icoBuf = decompressIconData(&icoSize); - ret = _mc->write(fd, icoBuf, icoSize * 2); - _mc->close(fd); - free(icoBuf); - - printf(".icn written\n"); - setupIcon("/ScummVM/icon.sys", "scummvm.icn", "ScummVM", "Configuration"); - } else - printf("Can't create icon file: %d\n", fd); - } else - printf("can't create scummvm directory: %d\n", ret); - } -} - -void Ps2SaveFileManager::splitPath(const char *fileName, char *dir, char *name) { - strcpy(dir, fileName); - char *ext = strchr(dir, '.'); - if (ext) { - *ext = '\0'; - ext++; - } - if (ext && *ext) - sprintf(name, "%s.ucl", ext); - else - strcpy(name, "save.ucl"); -} - -bool Ps2SaveFileManager::mcReadyForDir(const char *dir) { - if (_mcNeedsUpdate || ((_system->getMillis() - _mcCheckTime) > 2000) || !_mcPresent) { - // check if memory card was exchanged/removed in the meantime - int mcType, mcFree, mcFormat, mcResult; - mcResult = _mc->getInfo(&mcType, &mcFree, &mcFormat); - if (mcResult != 0) { // memory card was exchanged - _mcNeedsUpdate = true; - if (mcResult == -1) { // yes, it was exchanged - checkMainDirectory(); // make sure ScummVM dir and icon are there - } else { // no memorycard in slot or not formatted or something like that - _mcPresent = false; - printf("MC not found, error code %d\n", mcResult); - return false; - } - } - _mcPresent = true; - _mcCheckTime = _system->getMillis(); - } - if (_mcNeedsUpdate || strcmp(_mcDirName, dir)) { - strcpy(_mcDirName, dir); - char dirStr[256]; - sprintf(dirStr, "/ScummVM-%s/*", dir); - _mcEntries = _mc->getDir(dirStr, 0, MAX_MC_ENTRIES, _mcDirList); - _mcNeedsUpdate = false; - } - return (_mcEntries >= 0); -} - -Common::InSaveFile *Ps2SaveFileManager::openForLoading(const char *filename) { - _screen->wantAnim(true); - - char dir[256], name[256]; - splitPath(filename, dir, name); - if (mcReadyForDir(dir)) { - bool fileExists = false; - for (int i = 0; i < _mcEntries; i++) - if (strcmp(name, (char*)_mcDirList[i].name) == 0) - fileExists = true; - if (fileExists) { - char fullName[256]; - sprintf(fullName, "/ScummVM-%s/%s", dir, name); - UclInSaveFile *file = new UclInSaveFile(fullName, _screen, _mc); - if (file) { - if (!file->ioFailed()) - return file; - else - delete file; - } - } else - printf("file %s (%s) doesn't exist\n", filename, name); - } - _screen->wantAnim(false); - return NULL; -} - -Common::OutSaveFile *Ps2SaveFileManager::openForSaving(const char *filename) { - int res; - char dir[256], name[256]; - - _screen->wantAnim(true); - splitPath(filename, dir, name); - - if (!mcReadyForDir(dir)) { - if (_mcPresent) { // directory doesn't seem to exist yet - char fullPath[256]; - sprintf(fullPath, "/ScummVM-%s", dir); - res = _mc->mkDir(fullPath); - - char icoSysDest[256], saveDesc[256]; - sprintf(icoSysDest, "%s/icon.sys", fullPath); - strcpy(saveDesc, dir); - if ((saveDesc[0] >= 'a') && (saveDesc[0] <= 'z')) - saveDesc[0] += 'A' - 'a'; - setupIcon(icoSysDest, "../ScummVM/scummvm.icn", saveDesc, "Savegames"); - } - } - - if (_mcPresent) { - char fullPath[256]; - sprintf(fullPath, "/ScummVM-%s/%s", dir, name); - if (strstr(filename, ".s00") || strstr(filename, ".ASD") || strstr(filename, ".asd")) { - // this is an autosave - AutoSaveFile *file = new AutoSaveFile(this, fullPath); - return file; - } else { - UclOutSaveFile *file = new UclOutSaveFile(fullPath, _system, _screen, _mc); - if (!file->ioFailed()) { - // we're creating a file, mc will have to be updated next time - _mcNeedsUpdate = true; - return file; - } else - delete file; - } - } - - _screen->wantAnim(false); - return NULL; -} - -void Ps2SaveFileManager::listSavefiles(const char *prefix, bool *marks, int num) { - _screen->wantAnim(true); - - int mcType, mcFree, mcFormat, mcResult; - mcResult = _mc->getInfo(&mcType, &mcFree, &mcFormat); - - memset(marks, false, num * sizeof(bool)); - - if ((mcResult == 0) || (mcResult == -1)) { - // there's a memory card in the slot. - if (mcResult == -1) - _mcNeedsUpdate = true; - - mcTable *mcEntries = (mcTable*)memalign(64, sizeof(mcTable) * MAX_MC_ENTRIES); - - char dirStr[256], ext[256], mcSearchStr[256]; - strcpy(dirStr, prefix); - char *pos = strchr(dirStr, '.'); - if (pos) { - strcpy(ext, pos + 1); - *pos = '\0'; - } else - ext[0] = '\0'; - sprintf(mcSearchStr, "/ScummVM-%s/%s*", dirStr, ext); - - int numEntries = _mc->getDir(mcSearchStr, 0, MAX_MC_ENTRIES, mcEntries); - - int searchLen = strlen(ext); - for (int i = 0; i < numEntries; i++) - if ((((char*)mcEntries[i].name)[0] != '.') && stricmp((char*)mcEntries[i].name, "icon.sys")) { - char *stopCh; - int destNum = (int)strtoul((char*)mcEntries[i].name + searchLen, &stopCh, 10); - if ((!stopCh) || strcmp(stopCh, ".ucl")) - printf("unexpected end %s in name %s, search %s\n", stopCh, (char*)mcEntries[i].name, prefix); - if (destNum < num) - marks[destNum] = true; - } - free(mcEntries); - } - _screen->wantAnim(false); -} - -const char *Ps2SaveFileManager::getSavePath(void) const { - return "mc0:"; -} - -bool Ps2SaveFileManager::setupIcon(const char *dest, const char *ico, const char *descr1, const char *descr2) { - mcIcon icon_sys; - memset(&icon_sys, 0, sizeof(mcIcon)); - memcpy(icon_sys.head, "PS2D", 4); - char title[256]; - if (!stricmp("SAVEGAME", descr1)) { // these are broken sword 1 savegames - sprintf(title, "BSword1\n%s", descr2); - icon_sys.nlOffset = 8; - } else { - sprintf(title, "%s\n%s", descr1, descr2); - icon_sys.nlOffset = strlen(descr1) + 1; - } - strcpy_sjis((short*)&(icon_sys.title), title); - icon_sys.trans = 0x10; - memcpy(icon_sys.bgCol, _bgcolor, sizeof(_bgcolor)); - memcpy(icon_sys.lightDir, _lightdir, sizeof(_lightdir)); - memcpy(icon_sys.lightCol, _lightcol, sizeof(_lightcol)); - memcpy(icon_sys.lightAmbient, _ambient, sizeof(_ambient)); - strcpy((char*)icon_sys.view, ico); - strcpy((char*)icon_sys.copy, ico); - strcpy((char*)icon_sys.del, ico); - - int fd, res; - fd = _mc->open(dest, O_WRONLY | O_CREAT); - if (fd >= 0) { - res = _mc->write(fd, &icon_sys, sizeof(icon_sys)); - _mc->close(fd); - return (res == sizeof(icon_sys)); - } else - return false; -} - -uint16 *Ps2SaveFileManager::decompressIconData(uint16 *size) { - uint16 inPos = 1; - uint16 *rleData = (uint16*)_rleIcoData; - uint16 resSize = rleData[0]; - uint16 *resData = (uint16*)malloc(resSize * sizeof(uint16)); - uint16 outPos = 0; - while (outPos < resSize) { - uint16 len = rleData[inPos++]; - while (len--) - resData[outPos++] = 0x7FFF; - len = rleData[inPos++]; - while (len--) - resData[outPos++] = rleData[inPos++]; - } - *size = resSize; - assert(outPos == resSize); - return resData; -} - -void runSaveThread(Ps2SaveFileManager *param) { - param->saveThread(); -} - -void Ps2SaveFileManager::writeSaveNonblocking(char *name, void *buf, uint32 size) { - if (buf && size && !_systemQuit) { - strcpy(_autoSaveName, name); - assert(!_autoSaveBuf); - _autoSaveBuf = (uint8*)malloc(size); - memcpy(_autoSaveBuf, buf, size); - _autoSaveSize = size; - SignalSema(_autoSaveSignal); - } -} - -void Ps2SaveFileManager::saveThread(void) { - while (!_systemQuit) { - WaitSema(_autoSaveSignal); - if (_autoSaveBuf && _autoSaveSize) { - UclOutSaveFile *outSave = new UclOutSaveFile(_autoSaveName, _system, _screen, _mc); - if (!outSave->ioFailed()) { - outSave->write(_autoSaveBuf, _autoSaveSize); - outSave->flush(); - } - if (outSave->ioFailed()) - _system->msgPrintf(5000, "Writing autosave to %s failed", _autoSaveName); - delete outSave; - free(_autoSaveBuf); - _autoSaveBuf = NULL; - _autoSaveSize = 0; - _mcNeedsUpdate = true; // we've created a file, mc will have to be updated - _screen->wantAnim(false); - } - } - ExitThread(); -} - -void Ps2SaveFileManager::quit(void) { - _systemQuit = true; - ee_thread_t statSave, statThis; - ReferThreadStatus(GetThreadId(), &statThis); - ChangeThreadPriority(_autoSaveTid, statThis.current_priority - 1); - - do { // wait until thread called ExitThread() - SignalSema(_autoSaveSignal); - ReferThreadStatus(_autoSaveTid, &statSave); - } while (statSave.status != 0x10); - - DeleteThread(_autoSaveTid); - free(_autoSaveStack); -} - -UclInSaveFile::UclInSaveFile(const char *filename, Gs2dScreen *screen, McAccess *mc) { - _screen = screen; - _mc = mc; - int fd = _mc->open(filename, O_RDONLY); - _buf = NULL; - _bufSize = _bufPos = 0; - _ioFailed = false; - - if (fd >= 0) { - int srcSize = _mc->size(fd); - if (srcSize > 8) { - int res; - uint8 *tmpBuf = (uint8*)memalign(64, srcSize); - res = _mc->read(fd, tmpBuf, srcSize); - if ((res == srcSize) && (*(uint32*)tmpBuf == UCL_MAGIC)) { - uint32 resLen = _bufSize = *(uint32*)(tmpBuf + 4); - _buf = (uint8*)malloc(_bufSize + 2048); - res = ucl_nrv2e_decompress_8(tmpBuf + 8, srcSize - 8, _buf, &resLen, NULL); - if ((res < 0) || (resLen != _bufSize)) { - printf("Unable to decompress file %s (%d -> %d) error code %d\n", filename, srcSize, _bufSize, res); - free(_buf); - _buf = NULL; - _bufSize = 0; - } - } - free(tmpBuf); - } - _mc->close(fd); - } - if (!_buf) { - printf("Invalid savegame %s\n", filename); - _ioFailed = true; - } -} - -UclInSaveFile::~UclInSaveFile(void) { - if (_buf) - free(_buf); - _screen->wantAnim(false); -} - -bool UclInSaveFile::ioFailed(void) const { - return _ioFailed; -} - -void UclInSaveFile::clearIOFailed(void) { - _ioFailed = false; -} - -bool UclInSaveFile::eos(void) const { - return _bufPos == _bufSize; -} - -uint32 UclInSaveFile::pos(void) const { - return _bufPos; -} - -uint32 UclInSaveFile::size(void) const { - return _bufSize; -} - -void UclInSaveFile::seek(int pos, int whence) { - int destPos; - switch (whence) { - case SEEK_SET: - destPos = pos; - break; - case SEEK_CUR: - destPos = _bufPos + pos; - break; - case SEEK_END: - destPos = _bufSize + pos; - break; - default: - return; - } - if ((destPos >= 0) && (destPos <= (int)_bufSize)) - _bufPos = (uint32)destPos; -} - -uint32 UclInSaveFile::read(void *ptr, uint32 size) { - if (_buf) { - uint32 bytesRemain = _bufSize - _bufPos; - if (size > bytesRemain) { - size = bytesRemain; - _ioFailed = true; - } - memcpy(ptr, _buf + _bufPos, size); - _bufPos += size; - return size; - } else { - _ioFailed = true; - return 0; - } -} - -void UclInSaveFile::skip(uint32 offset) { - if (_buf) { - if (_bufPos + offset <= _bufSize) - _bufPos += offset; - else - _bufPos = _bufSize; - } -} - -UclOutSaveFile::UclOutSaveFile(const char *filename, OSystem_PS2 *system, Gs2dScreen *screen, McAccess *mc) { - _screen = screen; - _system = system; - _mc = mc; - _bufPos = 0; - _fd = _mc->open(filename, O_WRONLY | O_CREAT); - if (_fd >= 0) { - _bufSize = 65536; - _buf = (uint8*)malloc(_bufSize); - _ioFailed = false; - strcpy(_fileName, filename); - } else { - _ioFailed = true; - _bufSize = 0; - _buf = NULL; - } - _wasFlushed = false; -} - -UclOutSaveFile::~UclOutSaveFile(void) { - if (_buf) { - if (_bufPos) { - printf("Engine didn't call SaveFile::flush()\n"); - flush(); - if (ioFailed()) { - // unable to save to memory card and it's too late to return an error code to the engine - _system->msgPrintf(5000, "!WARNING!\nCan't write to memory card.\nGame was NOT saved."); - printf("~UclOutSaveFile: Flush failed!\n"); - } - } - free(_buf); - } - if (_fd >= 0) - _mc->close(_fd); - _screen->wantAnim(false); -} - -bool UclOutSaveFile::ioFailed(void) const { - return _ioFailed; -} - -void UclOutSaveFile::clearIOFailed(void) { - _ioFailed = false; -} - -void UclOutSaveFile::flush(void) { - int res; - - if (_bufPos) { - if (_wasFlushed) { - // the engine flushed this file and afterwards wrote more data. - // this is unsupported because it results in savefiles that consist - // of two or more compressed segments. - printf("Error: 2nd call to UclOutSaveFile::flush!\n"); - res = -1; - } else { - uint32 compSize = _bufPos * 2; - uint8 *compBuf = (uint8*)memalign(64, compSize + 8); - *(uint32*)(compBuf + 0) = UCL_MAGIC; - *(uint32*)(compBuf + 4) = _bufPos; // uncompressed size - res = ucl_nrv2e_99_compress(_buf, _bufPos, compBuf + 8, &compSize, NULL, 10, NULL, NULL); - if (res >= 0) { - res = _mc->write(_fd, compBuf, compSize + 8); - if (res != (int)compSize + 8) { - printf("flush: write failed, %d != %d\n", res, compSize + 8); - res = -1; - } - } else - printf("Unable to compress %d bytes of savedata, errorcode %d\n", _bufPos, res); - free(compBuf); - _bufPos = 0; - } - - if (res < 0) { - _ioFailed = true; - printf("UclOutSaveFile::flush failed!\n"); - if (_fd >= 0) { - // the file is broken; delete it - _mc->close(_fd); - res = _mc->remove(_fileName); - if (res == 0) - printf("File %s: remove ok\n", _fileName); - else - printf("File %s: remove error %d\n", _fileName, res); - _fd = -1; - } - } - } -} - -uint32 UclOutSaveFile::write(const void *ptr, uint32 size) { - assert(_bufPos <= _bufSize); - uint32 bytesFree = _bufSize - _bufPos; - if (bytesFree < size) { - uint32 allocBytes = (size > 32 * 1024) ? size : 32 * 1024; - _bufSize += allocBytes; - _buf = (uint8*)realloc(_buf, _bufSize); - bytesFree = _bufSize - _bufPos; - } - assert(bytesFree >= size); - memcpy(_buf + _bufPos, ptr, size); - _bufPos += size; - return size; -} - - diff --git a/backends/ps2/savefile.h b/backends/ps2/savefile.h deleted file mode 100644 index aafb124ad0..0000000000 --- a/backends/ps2/savefile.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __PS2_SAVEFILE__ -#define __PS2_SAVEFILE__ - -#include -#include "common/savefile.h" - -class Gs2dScreen; -class OSystem_PS2; -class McAccess; - -class Ps2SaveFileManager : public Common::SaveFileManager { -public: - Ps2SaveFileManager(OSystem_PS2 *system, Gs2dScreen *screen); - virtual ~Ps2SaveFileManager(); - - virtual Common::InSaveFile *openForLoading(const char *filename); - virtual Common::OutSaveFile *openForSaving(const char *filename); - virtual void listSavefiles(const char *prefix, bool *marks, int num); - - /** Get the path to the save game directory. */ - virtual const char *getSavePath() const; - - void writeSaveNonblocking(char *name, void *buf, uint32 size); - void saveThread(void); - void quit(void); -private: - bool setupIcon(const char *dest, const char *ico, const char *descr1, const char *descr2); - - bool mcReadyForDir(const char *dir); - - void checkMainDirectory(void); - void splitPath(const char *fileName, char *dir, char *name); - uint16 *decompressIconData(uint16 *size); - - Gs2dScreen *_screen; - OSystem_PS2 *_system; - McAccess *_mc; - - int _autoSaveTid; - int _autoSaveSignal; - void *_autoSaveStack; - volatile bool _systemQuit; - uint8 *_autoSaveBuf; - uint32 _autoSaveSize; - char _autoSaveName[256]; - - mcTable *_mcDirList; - int _mcEntries; - char _mcDirName[256]; - bool _mcNeedsUpdate, _mcPresent; - uint32 _mcCheckTime; - - static const uint8 _rleIcoData[14018]; - static const iconIVECTOR _bgcolor[4]; - static const iconFVECTOR _lightdir[3], _lightcol[3], _ambient; -}; - -#endif // __PS2_SAVEFILE__ diff --git a/backends/ps2/sdlkeys.h b/backends/ps2/sdlkeys.h deleted file mode 100644 index b2f783cedd..0000000000 --- a/backends/ps2/sdlkeys.h +++ /dev/null @@ -1,264 +0,0 @@ -/* copied from SDK_keysym.h */ - -#ifndef __SDLKEYS_H__ -#define __SDLKEYS_H__ - -enum SdlKeyCodes { - SDLK_UNKNOWN = 0, - SDLK_FIRST = 0, - SDLK_BACKSPACE = 8, - SDLK_TAB = 9, - SDLK_CLEAR = 12, - SDLK_RETURN = 13, - SDLK_PAUSE = 19, - SDLK_ESCAPE = 27, - SDLK_SPACE = 32, - SDLK_EXCLAIM = 33, - SDLK_QUOTEDBL = 34, - SDLK_HASH = 35, - SDLK_DOLLAR = 36, - SDLK_AMPERSAND = 38, - SDLK_QUOTE = 39, - SDLK_LEFTPAREN = 40, - SDLK_RIGHTPAREN = 41, - SDLK_ASTERISK = 42, - SDLK_PLUS = 43, - SDLK_COMMA = 44, - SDLK_MINUS = 45, - SDLK_PERIOD = 46, - SDLK_SLASH = 47, - SDLK_0 = 48, - SDLK_1 = 49, - SDLK_2 = 50, - SDLK_3 = 51, - SDLK_4 = 52, - SDLK_5 = 53, - SDLK_6 = 54, - SDLK_7 = 55, - SDLK_8 = 56, - SDLK_9 = 57, - SDLK_COLON = 58, - SDLK_SEMICOLON = 59, - SDLK_LESS = 60, - SDLK_EQUALS = 61, - SDLK_GREATER = 62, - SDLK_QUESTION = 63, - SDLK_AT = 64, - /* - Skip uppercase letters - */ - SDLK_LEFTBRACKET = 91, - SDLK_BACKSLASH = 92, - SDLK_RIGHTBRACKET = 93, - SDLK_CARET = 94, - SDLK_UNDERSCORE = 95, - SDLK_BACKQUOTE = 96, - SDLK_a = 97, - SDLK_b = 98, - SDLK_c = 99, - SDLK_d = 100, - SDLK_e = 101, - SDLK_f = 102, - SDLK_g = 103, - SDLK_h = 104, - SDLK_i = 105, - SDLK_j = 106, - SDLK_k = 107, - SDLK_l = 108, - SDLK_m = 109, - SDLK_n = 110, - SDLK_o = 111, - SDLK_p = 112, - SDLK_q = 113, - SDLK_r = 114, - SDLK_s = 115, - SDLK_t = 116, - SDLK_u = 117, - SDLK_v = 118, - SDLK_w = 119, - SDLK_x = 120, - SDLK_y = 121, - SDLK_z = 122, - SDLK_DELETE = 127, - /* End of ASCII mapped keysyms */ - - /* International keyboard syms */ - SDLK_WORLD_0 = 160, /* 0xA0 */ - SDLK_WORLD_1 = 161, - SDLK_WORLD_2 = 162, - SDLK_WORLD_3 = 163, - SDLK_WORLD_4 = 164, - SDLK_WORLD_5 = 165, - SDLK_WORLD_6 = 166, - SDLK_WORLD_7 = 167, - SDLK_WORLD_8 = 168, - SDLK_WORLD_9 = 169, - SDLK_WORLD_10 = 170, - SDLK_WORLD_11 = 171, - SDLK_WORLD_12 = 172, - SDLK_WORLD_13 = 173, - SDLK_WORLD_14 = 174, - SDLK_WORLD_15 = 175, - SDLK_WORLD_16 = 176, - SDLK_WORLD_17 = 177, - SDLK_WORLD_18 = 178, - SDLK_WORLD_19 = 179, - SDLK_WORLD_20 = 180, - SDLK_WORLD_21 = 181, - SDLK_WORLD_22 = 182, - SDLK_WORLD_23 = 183, - SDLK_WORLD_24 = 184, - SDLK_WORLD_25 = 185, - SDLK_WORLD_26 = 186, - SDLK_WORLD_27 = 187, - SDLK_WORLD_28 = 188, - SDLK_WORLD_29 = 189, - SDLK_WORLD_30 = 190, - SDLK_WORLD_31 = 191, - SDLK_WORLD_32 = 192, - SDLK_WORLD_33 = 193, - SDLK_WORLD_34 = 194, - SDLK_WORLD_35 = 195, - SDLK_WORLD_36 = 196, - SDLK_WORLD_37 = 197, - SDLK_WORLD_38 = 198, - SDLK_WORLD_39 = 199, - SDLK_WORLD_40 = 200, - SDLK_WORLD_41 = 201, - SDLK_WORLD_42 = 202, - SDLK_WORLD_43 = 203, - SDLK_WORLD_44 = 204, - SDLK_WORLD_45 = 205, - SDLK_WORLD_46 = 206, - SDLK_WORLD_47 = 207, - SDLK_WORLD_48 = 208, - SDLK_WORLD_49 = 209, - SDLK_WORLD_50 = 210, - SDLK_WORLD_51 = 211, - SDLK_WORLD_52 = 212, - SDLK_WORLD_53 = 213, - SDLK_WORLD_54 = 214, - SDLK_WORLD_55 = 215, - SDLK_WORLD_56 = 216, - SDLK_WORLD_57 = 217, - SDLK_WORLD_58 = 218, - SDLK_WORLD_59 = 219, - SDLK_WORLD_60 = 220, - SDLK_WORLD_61 = 221, - SDLK_WORLD_62 = 222, - SDLK_WORLD_63 = 223, - SDLK_WORLD_64 = 224, - SDLK_WORLD_65 = 225, - SDLK_WORLD_66 = 226, - SDLK_WORLD_67 = 227, - SDLK_WORLD_68 = 228, - SDLK_WORLD_69 = 229, - SDLK_WORLD_70 = 230, - SDLK_WORLD_71 = 231, - SDLK_WORLD_72 = 232, - SDLK_WORLD_73 = 233, - SDLK_WORLD_74 = 234, - SDLK_WORLD_75 = 235, - SDLK_WORLD_76 = 236, - SDLK_WORLD_77 = 237, - SDLK_WORLD_78 = 238, - SDLK_WORLD_79 = 239, - SDLK_WORLD_80 = 240, - SDLK_WORLD_81 = 241, - SDLK_WORLD_82 = 242, - SDLK_WORLD_83 = 243, - SDLK_WORLD_84 = 244, - SDLK_WORLD_85 = 245, - SDLK_WORLD_86 = 246, - SDLK_WORLD_87 = 247, - SDLK_WORLD_88 = 248, - SDLK_WORLD_89 = 249, - SDLK_WORLD_90 = 250, - SDLK_WORLD_91 = 251, - SDLK_WORLD_92 = 252, - SDLK_WORLD_93 = 253, - SDLK_WORLD_94 = 254, - SDLK_WORLD_95 = 255, /* 0xFF */ - - /* Numeric keypad */ - SDLK_KP0 = 256, - SDLK_KP1 = 257, - SDLK_KP2 = 258, - SDLK_KP3 = 259, - SDLK_KP4 = 260, - SDLK_KP5 = 261, - SDLK_KP6 = 262, - SDLK_KP7 = 263, - SDLK_KP8 = 264, - SDLK_KP9 = 265, - SDLK_KP_PERIOD = 266, - SDLK_KP_DIVIDE = 267, - SDLK_KP_MULTIPLY = 268, - SDLK_KP_MINUS = 269, - SDLK_KP_PLUS = 270, - SDLK_KP_ENTER = 271, - SDLK_KP_EQUALS = 272, - - /* Arrows + Home/End pad */ - SDLK_UP = 273, - SDLK_DOWN = 274, - SDLK_RIGHT = 275, - SDLK_LEFT = 276, - SDLK_INSERT = 277, - SDLK_HOME = 278, - SDLK_END = 279, - SDLK_PAGEUP = 280, - SDLK_PAGEDOWN = 281, - - /* Function keys */ - SDLK_F1 = 282, - SDLK_F2 = 283, - SDLK_F3 = 284, - SDLK_F4 = 285, - SDLK_F5 = 286, - SDLK_F6 = 287, - SDLK_F7 = 288, - SDLK_F8 = 289, - SDLK_F9 = 290, - SDLK_F10 = 291, - SDLK_F11 = 292, - SDLK_F12 = 293, - SDLK_F13 = 294, - SDLK_F14 = 295, - SDLK_F15 = 296, - - /* Key state modifier keys */ - SDLK_NUMLOCK = 300, - SDLK_CAPSLOCK = 301, - SDLK_SCROLLOCK = 302, - SDLK_RSHIFT = 303, - SDLK_LSHIFT = 304, - SDLK_RCTRL = 305, - SDLK_LCTRL = 306, - SDLK_RALT = 307, - SDLK_LALT = 308, - SDLK_RMETA = 309, - SDLK_LMETA = 310, - SDLK_LSUPER = 311, /* Left "Windows" key */ - SDLK_RSUPER = 312, /* Right "Windows" key */ - SDLK_MODE = 313, /* "Alt Gr" key */ - SDLK_COMPOSE = 314, /* Multi-key compose key */ - - /* Miscellaneous function keys */ - SDLK_HELP = 315, - SDLK_PRINT = 316, - SDLK_SYSREQ = 317, - SDLK_BREAK = 318, - SDLK_MENU = 319, - SDLK_POWER = 320, /* Power Macintosh power key */ - SDLK_EURO = 321, /* Some european keyboards */ - SDLK_UNDO = 322, /* Atari keyboard has Undo */ - - /* Add any other keys here */ - - SDLK_LAST -}; - -#endif - - diff --git a/backends/ps2/sysdefs.h b/backends/ps2/sysdefs.h deleted file mode 100644 index 086c75162c..0000000000 --- a/backends/ps2/sysdefs.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef __SYSDEFS_H__ -#define __SYSDEFS_H__ - -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef unsigned long uint64; -typedef signed char int8; -typedef signed short int16; -typedef signed int int32; -typedef signed long int64; - -enum Interrupts { - INT_GS = 0, - INT_VBLANK_START = 2, - INT_VBLANK_END = 3, - INT_TIMER0 = 9 -}; - -// dma 2 registers -#define D2_CHCR (*(volatile uint32*)0x1000A000) -#define D2_QWC (*(volatile uint32*)0x1000A020) -#define D2_TADR (*(volatile uint32*)0x1000A030) -#define D2_MADR (*(volatile uint32*)0x1000A010) -#define D2_ASR1 (*(volatile uint32*)0x1000A050) -#define D2_ASR0 (*(volatile uint32*)0x1000A040) - -#define D_CTRL (*(volatile uint32*)0x1000E000) -#define D_STAT (*(volatile uint32*)0x1000E010) -#define D_PCR (*(volatile uint32*)0x1000E020) -#define D_SQWC (*(volatile uint32*)0x1000E030) -#define D_RBSR (*(volatile uint32*)0x1000E040) -#define D_RBOR (*(volatile uint32*)0x1000E050) -#define D_STADR (*(volatile uint32*)0x1000E060) - -#define CIM2 (1 << 18) -#define CIS2 (1 << 2) - - -// timer 0 registers -#define T0_COUNT (*(volatile uint32*)0x10000000) -#define T0_MODE (*(volatile uint32*)0x10000010) -#define T0_COMP (*(volatile uint32*)0x10000020) -#define T0_HOLD (*(volatile uint32*)0x10000030) - -#define TIMER_MODE(clks, gate, gates, gatem, zeroret, cue, cmpe, ovfe, equf, ovff) \ - ((clks) | ((gate) << 2) | ((gates) << 3) | ((gatem) << 4) | ((zeroret) << 6) | \ - ((cue) << 7) | ((cmpe) << 8) | ((ovfe) << 9) | ((equf) << 10) | ((ovff) << 11)) - -#endif // __SYSDEFS_H__ diff --git a/backends/ps2/systemps2.cpp b/backends/ps2/systemps2.cpp deleted file mode 100644 index df16990032..0000000000 --- a/backends/ps2/systemps2.cpp +++ /dev/null @@ -1,798 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "common/scummsys.h" -#include "../intern.h" -#include "base/engine.h" -#include "backends/ps2/systemps2.h" -#include "backends/ps2/Gs2dScreen.h" -#include "backends/ps2/ps2input.h" -#include "backends/ps2/irxboot.h" -#include -#include -#include "backends/ps2/savefile.h" -#include "common/file.h" -#include "backends/ps2/sysdefs.h" -#include -#include -#include "backends/ps2/cd.h" -#include -#include -#include "backends/ps2/asyncfio.h" -#include "eecodyvdfs.h" -#include "graphics/surface.h" -#include "graphics/font.h" - -// asm("mfc0 %0, $9\n" : "=r"(tickStart)); - -extern void *_gp; - -#define TIMER_STACK_SIZE (1024 * 32) -#define SOUND_STACK_SIZE (1024 * 32) -#define SMP_PER_BLOCK 800 -#define BUS_CLOCK 147456000 // bus clock, a little less than 150 mhz -#define CLK_DIVIS 5760 // the timer IRQ handler gets called (BUS_CLOCK / 256) / CLK_DIVIS times per second (100 times) - -static int g_TimerThreadSema = -1, g_SoundThreadSema = -1; -static int g_MainWaitSema = -1, g_TimerWaitSema = -1; -static volatile int32 g_MainWakeUp = 0, g_TimerWakeUp = 0; -volatile uint32 msecCount = 0; - -OSystem_PS2 *g_systemPs2; - -int gBitFormat = 555; - -#define FOREVER 2147483647 - -namespace Graphics { - extern const NewFont g_sysfont; -}; - -extern AsyncFio fio; - -void sioprintf(const char *zFormat, ...) { - va_list ap; - char resStr[2048]; - - va_start(ap,zFormat); - vsnprintf(resStr, 2048, zFormat, ap); - va_end(ap); - - sio_puts(resStr); -} - -extern "C" int scummvm_main(int argc, char *argv[]); - -extern "C" int main(int argc, char *argv[]) { - SifInitRpc(0); - - ee_thread_t thisThread; - int tid = GetThreadId(); - ReferThreadStatus(tid, &thisThread); - - sioprintf("Thread Start Priority = %d\n", thisThread.current_priority); - if ((thisThread.current_priority < 5) || (thisThread.current_priority > 80)) { - /* Depending on the way ScummVM is run, we may get here with different - thread priorities. - The PS2 BIOS executes it with priority = 0, ps2link uses priority 64. - Don't know about NapLink, etc. - The priority doesn't matter too much, but we need to be at least at prio 3, - so we can have the timer thread run at prio 2 and the sound thread at prio 1 */ - sioprintf("Changing thread priority"); - int res = ChangeThreadPriority(tid, 20); - sioprintf("Result = %d", res); - } - - sioprintf("Creating system"); - g_system = g_systemPs2 = new OSystem_PS2(argv[0]); - - sioprintf("init done. starting ScummVM."); - return scummvm_main(argc, argv); -} - -s32 timerInterruptHandler(s32 cause) { - T0_MODE = 0xDC2; // same value as in initialization. - msecCount += 10; - - iSignalSema(g_SoundThreadSema); - iSignalSema(g_TimerThreadSema); - - if (g_MainWakeUp) { - g_MainWakeUp -= 10; - if (g_MainWakeUp <= 0) { - iSignalSema(g_MainWaitSema); - g_MainWakeUp = 0; - } - } - if (g_TimerWakeUp) { - g_TimerWakeUp -= 10; - if (g_TimerWakeUp <= 0) { - iSignalSema(g_TimerWaitSema); - g_TimerWakeUp = 0; - } - } - return 0; -} - -void systemTimerThread(OSystem_PS2 *system) { - system->timerThread(); -} - -void systemSoundThread(OSystem_PS2 *system) { - system->soundThread(); -} - -void gluePowerOffCallback(void *system) { - ((OSystem_PS2*)system)->powerOffCallback(); -} - -void mass_connect_cb(void *pkt, void *system) { - ((OSystem_PS2*)system)->setUsbMassConnected(true); -} - -void mass_disconnect_cb(void *pkt, void *system) { - ((OSystem_PS2*)system)->setUsbMassConnected(false); -} - -void OSystem_PS2::startIrxModules(int numModules, IrxReference *modules) { - - _usbMassLoaded = _useMouse = _useKbd = _useHdd = false; - - int res = 0, rv = 0; - for (int i = 0; i < numModules; i++) { - if (modules[i].loc == IRX_FILE) { - res = SifLoadModule(modules[i].path, modules[i].argSize, modules[i].args); - sioprintf("Module \"%s\": %d", modules[i].path, res); - if (res < 0) { - msgPrintf(FOREVER, "\"%s\"\nnot found: %d", modules[i].path, res); - delayMillis(5000); - quit(); - } - } else if (modules[i].loc == IRX_BUFFER) { - if (modules[i].errorCode == 0) { - res = SifExecModuleBuffer(modules[i].buffer, modules[i].size, modules[i].argSize, modules[i].args, &rv); - sioprintf("Module \"%s\": EE=%d, IOP=%d", modules[i].path, res, rv); - if ((res >= 0) && (rv >= 0)) { - switch (modules[i].fileRef->purpose) { - case MASS_DRIVER: - _usbMassLoaded = true; - break; - case MOUSE_DRIVER: - _useMouse = true; - break; - case KBD_DRIVER: - _useKbd = true; - break; - case HDD_DRIVER: - _useHdd = true; - break; - default: - break; - } - } - } else - sioprintf("Module \"%s\" wasn't found: %d", modules[i].path, modules[i].errorCode); - - if ((modules[i].errorCode < 0) || (res < 0) || (rv < 0)) { - if (!(modules[i].fileRef->flags & OPTIONAL)) { - if (modules[i].errorCode < 0) - msgPrintf(FOREVER, "\"%s\"\nnot found: %d", modules[i].path, modules[i].errorCode); - else - msgPrintf(FOREVER, "Couldn't start\n\"%s\"\nEE=%d IOP=%d", modules[i].path, res, rv); - delayMillis(5000); - quit(); - } - } - - if (modules[i].buffer); - free(modules[i].buffer); - } else { - sioprintf("module %d of %d damaged, loc %d, path %s", i, numModules, modules[i].loc, modules[i].path); - } - free(modules[i].path); - } - free(modules); - sioprintf("done"); - sioprintf("UsbMass: %sloaded", _usbMassLoaded ? "" : "not "); - sioprintf("Mouse: %sloaded", _useMouse ? "" : "not "); - sioprintf("Kbd: %sloaded", _useKbd ? "" : "not "); - sioprintf("Hdd: %sloaded", _useHdd ? "" : "not "); -} - -OSystem_PS2::OSystem_PS2(const char *elfPath) { - _soundStack = _timerStack = NULL; - _scummTimerProc = NULL; - _scummSoundProc = NULL; - _scummSoundParam = NULL; - _printY = 0; - _msgClearTime = 0; - _systemQuit = false; - _usbMassConnected = false; - - _screen = new Gs2dScreen(320, 200, TV_DONT_CARE); - - sioprintf("Initializing system..."); - initTimer(); - - _screen->wantAnim(true); - - char irxPath[256]; - _bootDevice = detectBootPath(elfPath, irxPath); - - IrxReference *modules; - int numModules = loadIrxModules(_bootDevice, irxPath, &modules); - - if (_bootDevice != HOST) { - sio_puts("Resetting IOP."); - cdvdInit(CDVD_EXIT); - cdvdExit(); - SifExitIopHeap(); - SifLoadFileExit(); - SifExitRpc(); - SifIopReset("rom0:UDNL rom0:EELOADCNF", 0); - while (!SifIopSync()) - ; - sio_puts("IOP synced."); - SifInitRpc(0); - SifLoadFileInit(); - cdvdInit(CDVD_INIT_WAIT); - } - startIrxModules(numModules, modules); - - int res; - if ((res = fileXioInit()) < 0) { - msgPrintf(FOREVER, "FXIO Init failed: %d", res); - quit(); - } - - if ((res = initCdvdFs()) < 0) { - msgPrintf(FOREVER, "CoDyVDfs bind failed: %d", res); - quit(); - } - - if ((res = SjPCM_Init(0)) < 0) { - msgPrintf(FOREVER, "SjPCM Bind failed: %d\n", res); - quit(); - } - - if (_useHdd) { - if ((hddCheckPresent() < 0) || (hddCheckFormatted() < 0)) - _useHdd = false; - - hddPreparePoweroff(); - hddSetUserPoweroffCallback(gluePowerOffCallback, this); - } - - fileXioSetBlockMode(FXIO_NOWAIT); - - _mouseVisible = false; - - sioprintf("reading RTC"); - readRtcTime(); - - if (_useHdd) { - if (fio.mount("pfs0:", "hdd0:+ScummVM", 0) >= 0) - printf("Successfully mounted!\n"); - else - _useHdd = false; - } - - sioprintf("Starting SavefileManager"); - _saveManager = new Ps2SaveFileManager(this, _screen); - - sioprintf("Initializing ps2Input"); - _input = new Ps2Input(this, _useMouse, _useKbd); - - ee_sema_t newSema; - newSema.init_count = 1; - newSema.max_count = 1; - _mutexSema = CreateSema(&newSema); - for (int i = 0; i < MAX_MUTEXES; i++) { - _mutex[i].sema = -1; - _mutex[i].count = _mutex[i].owner = 0; - } - - _screen->wantAnim(false); - _screen->clearScreen(); -} - -OSystem_PS2::~OSystem_PS2(void) { -} - -void OSystem_PS2::initTimer(void) { - // first setup the two threads that get activated by the timer: - // the timerthread and the soundthread - ee_sema_t threadSema; - threadSema.init_count = 0; - threadSema.max_count = 255; - g_TimerThreadSema = CreateSema(&threadSema); - g_SoundThreadSema = CreateSema(&threadSema); - assert((g_TimerThreadSema >= 0) && (g_SoundThreadSema >= 0)); - - ee_thread_t timerThread, soundThread, thisThread; - ReferThreadStatus(GetThreadId(), &thisThread); - - _timerStack = (uint8*)malloc(TIMER_STACK_SIZE); - _soundStack = (uint8*)malloc(SOUND_STACK_SIZE); - - // give timer thread a higher priority than main thread - timerThread.initial_priority = thisThread.current_priority - 1; - timerThread.stack = _timerStack; - timerThread.stack_size = TIMER_STACK_SIZE; - timerThread.func = (void *)systemTimerThread; - timerThread.gp_reg = &_gp; - - // soundthread's priority is higher than main- and timerthread - soundThread.initial_priority = thisThread.current_priority - 2; - soundThread.stack = _soundStack; - soundThread.stack_size = SOUND_STACK_SIZE; - soundThread.func = (void *)systemSoundThread; - soundThread.gp_reg = &_gp; - - _timerTid = CreateThread(&timerThread); - _soundTid = CreateThread(&soundThread); - - assert((_timerTid >= 0) && (_soundTid >= 0)); - - StartThread(_timerTid, this); - StartThread(_soundTid, this); - - // these semaphores are used for OSystem::delayMillis() - threadSema.init_count = 0; - threadSema.max_count = 1; - g_MainWaitSema = CreateSema(&threadSema); - g_TimerWaitSema = CreateSema(&threadSema); - assert((g_MainWaitSema >= 0) && (g_TimerWaitSema >= 0)); - - // threads done, start the interrupt handler - _intrId = AddIntcHandler( INT_TIMER0, timerInterruptHandler, 0); // 0=first handler - assert(_intrId >= 0); - EnableIntc(INT_TIMER0); - T0_HOLD = 0; - T0_COUNT = 0; - T0_COMP = CLK_DIVIS; // (BUS_CLOCK / 256) / CLK_DIVIS = 100 - T0_MODE = TIMER_MODE( 2, 0, 0, 0, 1, 1, 1, 0, 1, 1); - - DI(); - SifAddCmdHandler(0x12, mass_connect_cb, this); - SifAddCmdHandler(0x13, mass_disconnect_cb, this); - EI(); -} - -void OSystem_PS2::timerThread(void) { - while (!_systemQuit) { - WaitSema(g_TimerThreadSema); - if (_scummTimerProc) - _scummTimerProc(0); - } - ExitThread(); -} - -void OSystem_PS2::soundThread(void) { - ee_sema_t soundSema; - soundSema.init_count = 1; - soundSema.max_count = 1; - _soundSema = CreateSema(&soundSema); - assert(_soundSema >= 0); - int16 *soundBufL = (int16*)memalign(64, SMP_PER_BLOCK * sizeof(int16) * 2); - int16 *soundBufR = soundBufL + SMP_PER_BLOCK; - - int bufferedSamples = 0; - int cycles = 0; - - while (!_systemQuit) { - WaitSema(g_SoundThreadSema); - - if (!(cycles & 31)) - bufferedSamples = SjPCM_Buffered(); - else - bufferedSamples -= 480; - cycles++; - - WaitSema(_soundSema); - if (_scummSoundProc) { - if (bufferedSamples <= 8 * SMP_PER_BLOCK) { - // we have to produce more samples, call sound mixer - // the scratchpad at 0x70000000 is used as temporary soundbuffer - _scummSoundProc(_scummSoundParam, (uint8*)0x70000000, SMP_PER_BLOCK * 2 * sizeof(int16)); - - // demux data into 2 buffers, L and R - __asm__ ( - "move $t2, %1\n\t" // dest buffer right - "move $t3, %0\n\t" // dest buffer left - "lui $t8, 0x7000\n\t" // muxed buffer, fixed at 0x70000000 - "addiu $t9, $0, 100\n\t" // number of loops - "mtsab $0, 2\n\t" // set qword shift = 2 byte - - "loop:\n\t" - " lq $t4, 0($t8)\n\t" // load 8 muxed samples - " lq $t5, 16($t8)\n\t" // load 8 more muxed samples - - " qfsrv $t6, $0, $t4\n\t" // shift right for second - " qfsrv $t7, $0, $t5\n\t" // packing step (right channel) - - " ppach $t4, $t5, $t4\n\t" // combine left channel data - " ppach $t6, $t7, $t6\n\t" // right channel data - - " sq $t4, 0($t3)\n\t" // write back - " sq $t6, 0($t2)\n\t" // - - " addiu $t9, -1\n\t" // decrement loop counter - " addiu $t2, 16\n\t" // increment pointers - " addiu $t3, 16\n\t" - " addiu $t8, 32\n\t" - " bnez $t9, loop\n\t" // loop - : // outputs - : "r"(soundBufL), "r"(soundBufR) // inputs - // : "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "$t9" // destroyed - : "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25" // destroyed - ); - // and feed it into the SPU - // non-blocking call, the function will return before the buffer's content - // was transferred. - SjPCM_Enqueue((short int*)soundBufL, (short int*)soundBufR, SMP_PER_BLOCK, 0); - bufferedSamples += SMP_PER_BLOCK; - } - } - SignalSema(_soundSema); - } - free(soundBufL); - DeleteSema(_soundSema); - ExitThread(); -} - -bool OSystem_PS2::hddPresent(void) { - return _useHdd; -} - -void OSystem_PS2::setUsbMassConnected(bool stat) { - _usbMassConnected = stat; -} - -bool OSystem_PS2::usbMassPresent(void) { - return _usbMassConnected; -} - -void OSystem_PS2::initSize(uint width, uint height) { - printf("initializing new size: (%d/%d)...", width, height); - _screen->newScreenSize(width, height); - _screen->setMouseXy(width / 2, height / 2); - _input->newRange(0, 0, width - 1, height - 1); - _input->warpTo(width / 2, height / 2); - - _oldMouseX = width / 2; - _oldMouseY = height / 2; - printf("done\n"); -} - -void OSystem_PS2::setPalette(const byte *colors, uint start, uint num) { - _screen->setPalette((const uint32*)colors, (uint8)start, (uint16)num); -} - -void OSystem_PS2::grabPalette(byte *colors, uint start, uint num) { - _screen->grabPalette((uint32*)colors, (uint8)start, (uint16)num); -} - -void OSystem_PS2::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { - _screen->copyScreenRect((const uint8*)buf, pitch, x, y, w, h); -} - -bool OSystem_PS2::grabRawScreen(Graphics::Surface *surf) { - _screen->grabScreen(surf); - return true; -} - -void OSystem_PS2::updateScreen(void) { - if (_msgClearTime && (_msgClearTime < getMillis())) { - _screen->clearPrintfOverlay(); - _msgClearTime = 0; - } - _screen->updateScreen(); -} - -uint32 OSystem_PS2::getMillis(void) { - return msecCount; -} - -void OSystem_PS2::delayMillis(uint msecs) { - if (msecs == 0) - return; - - int tid = GetThreadId(); - if (tid == _soundTid) { - sioprintf("ERROR: delayMillis() from sound thread!"); - return; - } - - if (tid == _timerTid) { - g_TimerWakeUp = (int32)msecs; - WaitSema(g_TimerWaitSema); - } else { - g_MainWakeUp = (int32)msecs; - WaitSema(g_MainWaitSema); - } -} - -void OSystem_PS2::setTimerCallback(OSystem::TimerProc callback, int interval) { - if (callback && (interval != 10)) - sioprintf("unhandled timer interval: %d\n", interval); - _scummTimerProc = callback; -} - -int OSystem_PS2::getOutputSampleRate(void) const { - return 48000; -} - -bool OSystem_PS2::setSoundCallback(SoundProc proc, void *param) { - assert(proc != NULL); - - WaitSema(_soundSema); - _scummSoundProc = proc; - _scummSoundParam = param; - SignalSema(_soundSema); - return true; -} - -void OSystem_PS2::clearSoundCallback(void) { - WaitSema(_soundSema); - _scummSoundProc = NULL; - _scummSoundParam = NULL; - SignalSema(_soundSema); -} - -Common::SaveFileManager *OSystem_PS2::getSavefileManager(void) { - return _saveManager; -} - -void OSystem_PS2::setShakePos(int shakeOffset) { - _screen->setShakePos(shakeOffset); -} - -bool OSystem_PS2::showMouse(bool visible) { - bool retVal = _mouseVisible; - _screen->showMouse(visible); - _mouseVisible = visible; - return retVal; -} - -void OSystem_PS2::warpMouse(int x, int y) { - _input->warpTo((uint16)x, (uint16)y); - _screen->setMouseXy(x, y); -} - -void OSystem_PS2::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale) { - _screen->setMouseOverlay(buf, w, h, hotspot_x, hotspot_y, keycolor); -} - -bool OSystem_PS2::openCD(int drive) { - return false; -} - -bool OSystem_PS2::pollCD(void) { - return false; -} - -void OSystem_PS2::playCD(int track, int num_loops, int start_frame, int duration) { -} - -void OSystem_PS2::stopCD(void) { -} - -void OSystem_PS2::updateCD(void) { -} - -void OSystem_PS2::showOverlay(void) { - _screen->showOverlay(); -} - -void OSystem_PS2::hideOverlay(void) { - _screen->hideOverlay(); -} - -void OSystem_PS2::clearOverlay(void) { - _screen->clearOverlay(); -} - -void OSystem_PS2::grabOverlay(OverlayColor *buf, int pitch) { - _screen->grabOverlay((uint16*)buf, (uint16)pitch); -} - -void OSystem_PS2::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { - _screen->copyOverlayRect((uint16*)buf, (uint16)pitch, (uint16)x, (uint16)y, (uint16)w, (uint16)h); -} - -const OSystem::GraphicsMode OSystem_PS2::_graphicsMode = { NULL, NULL, 0 }; - -const OSystem::GraphicsMode *OSystem_PS2::getSupportedGraphicsModes(void) const { - return &_graphicsMode; -} - -bool OSystem_PS2::setGraphicsMode(int mode) { - return (mode == 0); -} - -int OSystem_PS2::getGraphicsMode(void) const { - return 0; -} - -int OSystem_PS2::getDefaultGraphicsMode(void) const { - return 0; -} - -bool OSystem_PS2::pollEvent(Event &event) { - bool res = _input->pollEvent(&event); - if (res && (event.type == EVENT_MOUSEMOVE)) - _screen->setMouseXy(event.mouse.x, event.mouse.y); - return res; -} - -OverlayColor OSystem_PS2::RGBToColor(uint8 r, uint8 g, uint8 b) { - return (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10); -} - -void OSystem_PS2::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { - r = (color & 0x1F) << 3; - g = ((color >> 5) & 0x1F) << 3; - b = ((color >> 10) & 0x1F) << 3; -} - -int16 OSystem_PS2::getHeight(void) { - return _screen->getHeight(); -} - -int16 OSystem_PS2::getWidth(void) { - return _screen->getWidth(); -} - -void OSystem_PS2::msgPrintf(int millis, char *format, ...) { - va_list ap; - char resStr[1024]; - memset(resStr, 0, 1024); - - va_start(ap, format); - vsnprintf(resStr, 1023, format, ap); - va_end(ap); - - uint16 posY = 2; - int maxWidth = 0; - - Graphics::Surface surf; - surf.create(300, 200, 1); - - char *lnSta = resStr; - while (*lnSta && (posY < 180)) { - char *lnEnd = lnSta; - while ((*lnEnd) && (*lnEnd != '\n')) - lnEnd++; - *lnEnd = '\0'; - - Common::String str(lnSta); - int width = Graphics::g_sysfont.getStringWidth(str); - if (width > maxWidth) - maxWidth = width; - int posX = (300 - width) / 2; - Graphics::g_sysfont.drawString(&surf, str, posX, posY, 300 - posX, 1); - posY += 14; - - lnSta = lnEnd + 1; - } - - uint8 *scrBuf = (uint8*)memalign(64, 320 * 200); - memset(scrBuf, 4, 320 * 200); - - uint8 *dstPos = scrBuf + ((200 - posY) >> 1) * 320 + (320 - maxWidth) / 2; - for (int y = 0; y < posY; y++) { - uint8 *srcPos = (uint8*)surf.getBasePtr((300 - maxWidth) / 2, y); - for (int x = 0; x < maxWidth; x++) - dstPos[x] = srcPos[x] + 5; - dstPos += 320; - } - surf.free(); - _screen->copyPrintfOverlay(scrBuf); - free(scrBuf); - _msgClearTime = millis + getMillis(); -} - -void OSystem_PS2::powerOffCallback(void) { - sioprintf("powerOffCallback"); - _saveManager->quit(); - if (_useHdd) { - sioprintf("umount"); - fio.umount("pfs0:"); - } - sioprintf("fxio"); - // enable blocking FXIO so libhdd will correctly close drive, etc. - fileXioSetBlockMode(FXIO_WAIT); - sioprintf("done"); -} - -void OSystem_PS2::quit(void) { - if (_bootDevice == HOST) { - printf("OSystem_PS2::quit\n"); - SleepThread(); - } else { - sioprintf("OSystem_PS2::quit"); - if (_useHdd) { - driveStandby(); - fio.umount("pfs0:"); - } - clearSoundCallback(); - setTimerCallback(NULL, 0); - _screen->wantAnim(false); - _systemQuit = true; - ee_thread_t statSound, statTimer; - do { // wait until both threads called ExitThread() - ReferThreadStatus(_timerTid, &statTimer); - ReferThreadStatus(_soundTid, &statSound); - } while ((statSound.status != 0x10) || (statTimer.status != 0x10)); - DeleteThread(_timerTid); - DeleteThread(_soundTid); - free(_timerStack); - free(_soundStack); - DisableIntc(INT_TIMER0); - RemoveIntcHandler(INT_TIMER0, _intrId); - - _saveManager->quit(); - _screen->quit(); - - padEnd(); // stop pad library - cdvdInit(CDVD_EXIT); - sioprintf("resetting iop"); - SifIopReset(NULL, 0); - SifExitRpc(); - while (!SifIopSync()); - SifInitRpc(0); - cdvdExit(); - SifExitRpc(); - FlushCache(0); - SifLoadFileExit(); - sioprintf("Restarting ScummVM"); - LoadExecPS2("cdrom0:\\SCUMMVM.ELF", 0, NULL); // resets the console and executes the ELF - } -} - -void OSystem_PS2::makeConfigPath(char *dest) { - FILE *handle; - strcpy(dest, "cdfs:/ScummVM.ini"); - handle = ps2_fopen(dest, "r"); - if (_usbMassConnected && !handle) { - strcpy(dest, "mass:/ScummVM.ini"); - handle = ps2_fopen(dest, "r"); - } - if (handle) - ps2_fclose(handle); - else - strcpy(dest, "mc0:ScummVM/scummvm.ini"); -} - - diff --git a/backends/ps2/systemps2.h b/backends/ps2/systemps2.h deleted file mode 100644 index 4c51e78c66..0000000000 --- a/backends/ps2/systemps2.h +++ /dev/null @@ -1,148 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef SYSTEMPS2_H -#define SYSTEMPS2_H - -#include "common/stdafx.h" -#include "common/system.h" - -class Gs2dScreen; -class Ps2Input; -class Ps2SaveFileManager; -struct IrxReference; - -extern void sioprintf(const char *zFormat, ...); - -#define MAX_MUTEXES 16 - -struct Ps2Mutex { - int sema; - int owner; - int count; -}; - -class OSystem_PS2 : public OSystem { -public: - OSystem_PS2(const char *elfPath); - virtual ~OSystem_PS2(void); - virtual void initSize(uint width, uint height); - - virtual int16 getHeight(void); - virtual int16 getWidth(void); - virtual void setPalette(const byte *colors, uint start, uint num); - virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); - virtual void setShakePos(int shakeOffset); - virtual void grabPalette(byte *colors, uint start, uint num); - virtual bool grabRawScreen(Graphics::Surface *surf); - virtual void updateScreen(); - - virtual void showOverlay(); - virtual void hideOverlay(); - virtual void clearOverlay(); - virtual void grabOverlay(OverlayColor *buf, int pitch); - virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); - - virtual bool showMouse(bool visible); - - virtual void warpMouse(int x, int y); - virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale = 1); - - virtual uint32 getMillis(); - virtual void delayMillis(uint msecs); - virtual void setTimerCallback(TimerProc callback, int interval); - virtual bool pollEvent(Event &event); - - virtual bool setSoundCallback(SoundProc proc, void *param); - virtual void clearSoundCallback(); - virtual int getOutputSampleRate(void) const; - - virtual bool openCD(int drive); - virtual bool pollCD(); - virtual void playCD(int track, int num_loops, int start_frame, int duration); - virtual void stopCD(); - virtual void updateCD(); - - virtual MutexRef createMutex(void); - virtual void lockMutex(MutexRef mutex); - virtual void unlockMutex(MutexRef mutex); - virtual void deleteMutex(MutexRef mutex); - - virtual const GraphicsMode *getSupportedGraphicsModes() const; - virtual int getDefaultGraphicsMode() const; - virtual bool setGraphicsMode(int mode); - virtual int getGraphicsMode() const; - - virtual void quit(); - - virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); - - virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); - - virtual Common::SaveFileManager *getSavefileManager(); - - void timerThread(void); - void soundThread(void); - void msgPrintf(int millis, char *format, ...); - void makeConfigPath(char *dest); - - void powerOffCallback(void); - bool hddPresent(void); - bool usbMassPresent(void); - void setUsbMassConnected(bool stat); - -private: - void startIrxModules(int numModules, IrxReference *modules); - - volatile OSystem::TimerProc _scummTimerProc; - volatile OSystem::SoundProc _scummSoundProc; - void *_scummSoundParam; - int _soundSema; - - void initTimer(void); - void readRtcTime(void); - - bool _mouseVisible; - bool _useMouse, _useKbd, _useHdd, _usbMassLoaded, _usbMassConnected; - - Ps2SaveFileManager *_saveManager; - - Gs2dScreen *_screen; - Ps2Input *_input; - uint16 _oldMouseX, _oldMouseY; - uint32 _msgClearTime; - uint16 _printY; - - int _mutexSema; - Ps2Mutex _mutex[MAX_MUTEXES]; - - uint8 *_timerStack, *_soundStack; - int _timerTid, _soundTid; - int _intrId; - volatile bool _systemQuit; - static const GraphicsMode _graphicsMode; - - int _bootDevice; -}; - -#endif // SYSTEMPS2_H - diff --git a/backends/symbian/.placeholder b/backends/symbian/.placeholder deleted file mode 100644 index dcf4d34a62..0000000000 --- a/backends/symbian/.placeholder +++ /dev/null @@ -1 +0,0 @@ ->> SumthinWicked *grins* << \ No newline at end of file diff --git a/backends/symbian/AdaptAllMMPs.pl b/backends/symbian/AdaptAllMMPs.pl deleted file mode 100644 index 48b100b2ee..0000000000 --- a/backends/symbian/AdaptAllMMPs.pl +++ /dev/null @@ -1,382 +0,0 @@ - -use Cwd; - -$buildDir = getcwd(); -chdir("../../"); - -# list of project files to process -@mmp_files = ( - "mmp/scummvm_scumm.mmp", - "mmp/scummvm_queen.mmp", - "mmp/scummvm_simon.mmp", - "mmp/scummvm_sky.mmp", - "mmp/scummvm_gob.mmp", - "mmp/scummvm_saga.mmp", - "mmp/scummvm_kyra.mmp", - "mmp/scummvm_sword1.mmp", - "mmp/scummvm_sword2.mmp", - "mmp/scummvm_lure.mmp", - "mmp/scummvm_cine.mmp", - "mmp/scummvm_agi.mmp", - "S60/ScummVM_S60.mmp", - "S60v3/ScummVM_S60v3.mmp", - "S80/ScummVM_S80.mmp", - "S90/ScummVM_S90.mmp", - "UIQ2/ScummVM_UIQ2.mmp", - "UIQ3/ScummVM_UIQ3.mmp" -); - -# do this first to set all *.mmp & *.inf files to *.*.in states -ResetProjectFiles(); - -print " -======================================================================================= -Updating slave MACRO settings in MMP files from master 'scummvm_base.mmp' -======================================================================================= - -"; - -# do this first so we have @DisableDefines for correct inclusion of SOURCE files later -UpdateSlaveMacros(); - -print " -======================================================================================= -Preparing to update all the Symbian MMP project files with objects from module.mk files -======================================================================================= - -"; - -my @section_empty = (""); # section standard: no #ifdef's in module.mk files -my @sections_scumm = ("", "DISABLE_SCUMM_7_8", "DISABLE_HE"); # special sections for engine SCUMM - -# files excluded from build, case insensitive, will be matched in filename string only -my @excludes_snd = ( - "mt32", - "fluidsynth", - "i386", - "part.cpp", - "partial.cpp", - "partialmanager.cpp", - "synth.cpp", - "tables.cpp", - "freeverb.cpp" -); -my @excludes_gui = ( -); - -#arseModule(mmpStr, dirStr, ifdefArray, [exclusionsArray]) -ParseModule("_base", "base", \@section_empty); # now in ./TRG/ScummVM_TRG.mmp, these never change anyways... -ParseModule("_base", "common", \@section_empty); -ParseModule("_base", "gui", \@section_empty, \@excludes_gui); -ParseModule("_base", "graphics", \@section_empty); -ParseModule("_base", "sound", \@section_empty, \@excludes_snd); - -chdir("engines/"); -ParseModule("_scumm", "scumm", \@sections_scumm); -ParseModule("_queen", "queen", \@section_empty); -ParseModule("_simon", "simon", \@section_empty); -ParseModule("_sky", "sky", \@section_empty); -ParseModule("_gob", "gob", \@section_empty); -ParseModule("_saga", "saga", \@section_empty); - -ParseModule("_kyra", "kyra", \@section_empty); -ParseModule("_sword1", "sword1", \@section_empty); -ParseModule("_sword2", "sword2", \@section_empty); -ParseModule("_lure", "lure", \@section_empty); -ParseModule("_cine", "cine", \@section_empty); -ParseModule("_agi", "agi", \@section_empty); -print " -======================================================================================= -Done. Enjoy :P -======================================================================================= -"; - -################################################################################################################## -################################################################################################################## - -# parses multiple sections per mmp/module -sub ParseModule -{ - my ($mmp,$module,$sections,$exclusions) = @_; - my @sections = @{$sections}; - my @exclusions = @{$exclusions}; - - foreach $section (@sections) - { - CheckForModuleMK($module, $section, @exclusions); - UpdateProjectFile($mmp, $module, $section); - } -} - -################################################################################################################## - -# parses all module.mk files in a dir and its subdirs -sub CheckForModuleMK -{ - my ($item,$section,@exclusions) = @_; - - # if dir: check subdirs too - if (-d $item) - { - #print "$item\n"; - - opendir DIR, $item; - #my @Files = readdir DIR; - my @Files = grep s/^([^\.].*)$/$1/, readdir DIR; - closedir DIR; - - foreach $entry (@Files) - { - CheckForModuleMK("$item/$entry", $section, @exclusions); - } - } - - # if this is a module.mk file - if (-f $item and $item =~ /.*\/module.mk$/) - { - my $sec = ""; - my $ObjectsSelected = 0; - my $ObjectsTotal = 0; - - print "$item for section '$section' ... "; - - open FILE, $item; - my @lines = ; - close FILE; - - my $count = @lines; - print "$count lines"; - - A: foreach $line (@lines) - { - # found a section? reset - if ($line =~ /^ifndef (.*)/) - { - $sec = $1; - } - # found an object? Not uncommented! - if (!($line =~ /^#/) && $line =~ s/\.o/.cpp/) - { - # handle this section? - if ($sec eq $section) - { - $ObjectsTotal++; - - $line =~ s/^\s*//g; # remove possible leading whitespace - $line =~ s/ \\//; # remove possible trailing ' \' - $line =~ s/\//\\/g; # replace / with \ - chop($line); # remove \n - - # do we need to skip this file? According to our own @exclusions array - foreach $exclusion (@exclusions) - { - if ($line =~ /$exclusion/i) - { - print "\n ! $line (excluded, \@exclusions[$exclusion])"; - next A; - } - } - - # do we need to skip this file? According to MACROs in .MMPs - foreach $DisableDefine (@DisableDefines) - { - if ($DisableDefine eq $section && $section ne '') - { - print "\n !$line (excluded, MACRO $DisableDefine)"; - next A; - } - } - - $ObjectsSelected++; - #print "\n $line"; - $output .= "SOURCE $line\n"; - } - } - } - print " -- $ObjectsSelected/$ObjectsTotal objects selected\n"; - } -} - -################################################################################################################## - -# update an MMP project file with the new objects -sub UpdateProjectFile -{ - my ($mmp,$module,$section) = @_; - my $n = "AUTO_OBJECTS_".uc($module)."_$section"; - my $a = "\/\/START_$n\/\/"; - my $b = "\/\/STOP_$n\/\/"; - my $updated = " Updated @ ".localtime(); - my $name; - my @mmp_files_plus_one = @mmp_files; - unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp"; - - foreach $name (@mmp_files_plus_one) - { - my $file = "$buildDir/$name"; - - open FILE, "$file"; - my @lines = ; - close FILE; - - my $onestr = join("",@lines); - - if ($onestr =~ /$n/) - { - - print " - $name @ $n updating ... "; - - $onestr =~ s/$a.*$b/$a$updated\n$output$b/s; - open FILE, ">$file"; - print FILE $onestr; - close FILE; - - print "done.\n"; - } - } - - $output = ""; -} - -################################################################################################################## - -sub UpdateSlaveMacros -{ - my $updated = " Updated @ ".localtime(); - - my $name = "mmp/scummvm_base.mmp"; - my $file = "$buildDir/$name"; - print "Reading master MACROS from backends/symbian/$name ... "; - - open FILE, "$file"; - my @lines = ; - close FILE; - my $onestr = join("",@lines); - - my $n = "AUTO_MACROS_MASTER"; - my $a = "\/\/START_$n\/\/"; - my $b = "\/\/STOP_$n\/\/"; - $onestr =~ /$a(.*)$b/s; - my $macros = $1; - - my $libs_first = "\n// automagically enabled static libs from macros above\n"; - my $libs_second = "STATICLIBRARY scummvm_base.lib // must be above USE_* .libs\n"; - my $macro_counter = 0; - my $macros2 = "\n"; # output for in *.mmp MACROS section - my $projects = "\n..\\mmp\\scummvm_base.mmp\n"; # output for in BLD.INF projects section - - foreach $line (split("\n", $macros)) - { - # do we need to add a static .lib? - if ($line =~ /^.*MACRO\s*([0-9A-Z_]*)\s*\/\/\s*LIB\:(.*)$/) - { - my $macro = $1; my $lib = $2; - - # this macro enabled? then also add the .lib - if ($line =~ /^\s*MACRO\s*$macro/m) - { - # these are the USE_ libs - $libs_second .= "STATICLIBRARY $lib\n" if ($macro =~ /^USE_/); - } - else - { - # these are the non DISABLED_ libs - $libs_first .= "STATICLIBRARY $lib\n" if ($macro =~ /^DISABLE_/); - - # add projects for BLD.INF's - my $projectname = substr("$lib",0,-4); - $projects .= "..\\mmp\\$projectname.mmp\n" if ($macro =~ /^DISABLE_/); - } - $macro_counter++; - } - # not commented out? then add the macro to output string - if ($line =~ /^\s*MACRO\s*([0-9A-Z_]*)\s*/) - { - my $macro = $1; - $macros2 .= "$line\n"; - push @DisableDefines, $macro; # used in CheckForModuleMK()!! - } - } - - print "$macro_counter macro lines.\n"; - - $n = "AUTO_MACROS_SLAVE"; - $a = "\/\/START_$n\/\/"; - $b = "\/\/STOP_$n\/\/"; - - $m = "AUTO_PROJECTS"; - $p = "\/\/START_$m\/\/"; - $q = "\/\/STOP_$m\/\/"; - - foreach $name (@mmp_files) - { - $file = "$buildDir/$name"; - $fileBLDINF = $buildDir .'/'. substr($name, 0, rindex($name, "/")) . "/BLD.INF"; - print "Updating macros in $file ... "; - #print "Updating macros in backends/symbian/$name ... "; - - open FILE, "$file"; @lines = ; close FILE; - $onestr = join("",@lines); - - my $extralibs = ""; # output - # slash in name means it's a phone specific build file: add LIBs - $extralibs .= "$libs_first$libs_second" if (-e $fileBLDINF); - - $onestr =~ s/$a.*$b/$a$updated$macros2$extralibs$b/s; - - open FILE, ">$file"; print FILE $onestr; close FILE; - - my $count = @lines; - print "wrote $count lines.\n"; - - if (-e $fileBLDINF) - { - # slash in name means it's a phone specific build file: - # this also means we need to update a BLD.INF file here! - print "Updating projects in $fileBLDINF ... \n"; - - open FILE, "$fileBLDINF"; @lines = ; close FILE; - $onestr = join("",@lines); - - $onestr =~ s/$p.*$q/$p$updated$projects$q/s; - - open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE; - } - } -} - -################################################################################################################## - -sub ResetProjectFiles() -{ - my $onestr, @lines; - my @mmp_files_plus_one = @mmp_files; -# unshift @mmp_files_plus_one, "mmp/scummvm_base.mmp"; - - print "Resetting project files: "; - - # we don't need to do mmp/scummvm_base.mmp", it was done in BuildPackageUpload.pl before the call to this script - foreach $name (@mmp_files_plus_one) - { - my $file = "$buildDir/$name"; - - print "$name "; - open FILE, "$file.in"; @lines = ; close FILE; - $onestr = join("",@lines); - open FILE, ">$file"; print FILE $onestr; close FILE; - - # also do BLD.INF if it is there... - my $fileBLDINF = $buildDir .'/'. substr($name, 0, rindex($name, "/")) . "/BLD.INF"; - if (-e "$fileBLDINF.in") - { - print substr($name, 0, rindex($name, "/")) . "/BLD.INF "; - open FILE, "$fileBLDINF.in"; @lines = ; close FILE; - $onestr = join("",@lines); - open FILE, ">$fileBLDINF"; print FILE $onestr; close FILE; - } - } - - print "... done.\n"; -} - -################################################################################################################## diff --git a/backends/symbian/BuildPackageUpload_AllVersions.pl b/backends/symbian/BuildPackageUpload_AllVersions.pl deleted file mode 100644 index 7a4d6e21e2..0000000000 --- a/backends/symbian/BuildPackageUpload_AllVersions.pl +++ /dev/null @@ -1,637 +0,0 @@ - -use Cwd; -use Switch; - -system("cls"); -require "BuildPackageUpload_LocalSettings.pl"; - -################################################################################################################## -# prep some vars - -$SDK_BuildDirs{'UIQ2'} = "UIQ2"; -$SDK_BuildDirs{'UIQ3'} = "UIQ3"; -$SDK_BuildDirs{'S60v1'} = "S60"; -$SDK_BuildDirs{'S60v2'} = "S60"; -$SDK_BuildDirs{'S60v3'} = "S60v3"; -$SDK_BuildDirs{'S80'} = "S80"; -$SDK_BuildDirs{'S90'} = "S90"; - -$SDK_TargetName{'UIQ2'} = "armi"; -$SDK_TargetName{'UIQ3'} = "gcce"; -$SDK_TargetName{'S60v1'}= "armi"; -$SDK_TargetName{'S60v2'}= "armi"; -$SDK_TargetName{'S60v3'}= "gcce"; -$SDK_TargetName{'S80'} = "armi"; -$SDK_TargetName{'S90'} = "armi"; - -$SDK_TargetDir{'UIQ2'} = "armi"; -$SDK_TargetDir{'UIQ3'} = "armv5"; -$SDK_TargetDir{'S60v1'} = "armi"; -$SDK_TargetDir{'S60v2'} = "armi"; -$SDK_TargetDir{'S60v3'} = "armv5"; -$SDK_TargetDir{'S80'} = "armi"; -$SDK_TargetDir{'S90'} = "armi"; - -$build_dir = getcwd(); -$output_dir = "$build_dir/Packages"; -chdir("../../"); -$base_dir = getcwd(); -chdir($build_dir); -$build_log_out = "$build_dir/Build.out.log"; -$build_log_err = "$build_dir/Build.err.log"; - -$initial_path = $ENV{'PATH'}; # so we can start with a fresh PATH for each Build - -($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); -$date = sprintf("%02d%02d%02d", $year-100, $mon+=1, $mday); -$file_tpl_pkg = "scummvm-CVS-Symbian%s.pkg"; -$file_tpl_sis = "scummvm-%s-Symbian%s%s.sis"; -$version_tpl_sis = "$date"; # "CVS$date" - -$PackagesQueued = 0; -$PackagesCreated = 0; -$PackagesUploaded = 0; -@ErrorMessages = (); -$ftp_url = "FTP://$FTP_User\@$FTP_Host/$FTP_Dir/"; - -$ExtraMacros = "MACRO NONSTANDARD_PORT\n"; -$ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n"; - -# prep nice list of SDKs -#while( ($SDK, $RootDir) = each(%SDK_RootDirs) ) -foreach $SDK (sort keys(%SDK_RootDirs)) -{ - $SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\n\t\t\t"; -} - -# prep nice list of Libraries -while( ($SDK, $Value) = each(%SDK_LibraryDirs) ) -{ - while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) ) - { - $PresentLibs{$Library} = $Path; - } -} -foreach $Library (sort keys(%PresentLibs)) -{ - $LIBs .= "$Library\t$PresentLibs{$Library}\n\t\t\t"; -} - -# prep nice list of Variations -while( ($SDK, $Value) = each(%SDK_Variations) ) -{ - while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) ) - { - $Extra = ($Variation ne '' ? "_$Variation" : ""); - if ($SDK eq "ALL") - { - while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) - { - if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently) - { - push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK2, $Extra); - $PackagesQueued++; - } - } - } - else - { - if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently) - { - push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra); - $PackagesQueued++; - } - } - } -} -foreach $Package (sort @Packages) -{ - $PackagesStr .= "$Package\n\t\t\t"; -} - -print " -======================================================================================= -Preparing to Build, Package & Upload $PackagesQueued SymbianOS ScummVM variations -======================================================================================= - - Producer \t$Producer (RedirE:$RedirectSTDERR HaltE:$HaltOnError Skip:$SkipExistingPackages Quiet:$ReallyQuiet) - - SDKs inst'd \t$SDKs ".( %SDK_LibraryDirs ? " - LIBs inst'd \t$LIBs " : "" )." - $PackagesQueued Variations \t$PackagesStr - DIR base \t$base_dir - build \t$build_dir - output \t$output_dir -".( $FTP_Host ne '' ? " - FTP host \t$FTP_Host - user \t$FTP_User - pass \t"."*" x length($FTP_Pass)." - dir \t$FTP_Dir -" : "" )." -======================================================================================= -Press Ctrl-C to abort or enter to continue Build, Package & Upload $PackagesQueued Variations... -======================================================================================= -"; - -$line = ; - -# make sure the output dir exists! -mkdir($output_dir, 0755) if (! -d $output_dir); - -unlink($build_log_out); -unlink($build_log_err); - -# init _base.mmp now, so we can start changing it without affecting the CVS version _base.mmp.in! -my $name = "mmp/scummvm_base.mmp"; -my $file = "$build_dir/$name"; -open FILE, "$file.in"; @lines = ; close FILE; -my $onestr = join("",@lines); -open FILE, ">$file"; print FILE $onestr; close FILE; - -################################################################################################################## -# do the actual deeds for all present libs - -while( ($SDK, $Value) = each(%SDK_LibraryDirs) ) -{ - while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) ) - { - if ($SDK eq "ALL") - { - while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) - { - if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently) - { - $LibrariesQueued++; - DoLibrary($SDK2, $Library, $Path); - } - } - } - else - { - if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently) - { - $LibrariesQueued++; - DoLibrary($SDK, $Library, $Path); - } - } - } -} - -#system('pause'); - -################################################################################################################## -# do the actual deeds for all configured variations - -while( ($SDK, $VariationsHash) = each(%SDK_Variations) ) -{ - while( ($Variation, $MacroBlock) = each(%{$SDK_Variations{$SDK}}) ) - { - if ($SDK eq "ALL") - { - while( ($SDK2, $RootDir) = each(%SDK_RootDirs) ) - { - if ($SDK_RootDirs{$SDK2} ne '') - { - DoVariation($SDK2, $Variation, $MacroBlock); - } - } - } - else - { - if ($SDK_RootDirs{$SDK} ne '') - { - DoVariation($SDK, $Variation, $MacroBlock); - } - } - } -} - -################################################################################################################## -# give report - -chdir($build_dir); - -print " -=======================================================================================".( %SDK_LibraryDirs ? " -Libraries selected: \t$LibrariesQueued - built: \t$LibrariesSucceeded " : "" )." -Packages selected: \t$PackagesQueued $base_dir ".( $PackagesExisted ? " - existed: \t$PackagesExisted $output_dir " : "" )." - created: \t$PackagesCreated $output_dir ".( $FTP_Host ne '' ? " - uploaded: \t$PackagesUploaded $ftp_url " : "" )." -======================================================================================= -"; - -my $count = @ErrorMessages; -if ($count) -{ - print "Hmm, unfortunately some ERRORs have occurred during the process:\n"; - foreach $Error (@ErrorMessages) - { - print "> $Error\n"; - } - print "=======================================================================================\n"; - print "\007\007"; -} - -# first clean up 'initial path' by removing possible old entries (in case of aborted builds) -#$initial_path_system_cleaned = CleanupPath($initial_path_system); - -# show them we cleaned up? -#if ($initial_path_system_cleaned ne $initial_path_system) -#{ -# PrintMessage("PATH cleaned up from:\n$initial_path_system\n\nto:\n$initial_path_system_cleaned"); -#} - -print " SumthinWicked wishes you a ridiculously good and optimally happy day :P\n======================================================================================="; - -################################################################################################################## -################################################################################################################## - -# Build, Package & Upload a single Variation -sub DoLibrary -{ - my ($SDK, $Library, $Path) = @_; - my $TargetName = $SDK_TargetName{$SDK}; - my $TargetDir = $SDK_TargetDir{$SDK}; - my $Target = "$SDK - $Library"; - my $TargetFilePath = $SDK_RootDirs{$SDK}."\\epoc32\\release\\$TargetDir\\urel\\$Library"; - #my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\".substr($Path, 3)); - # does this remove too much? - my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\"); - -my $header = " -======================================================================================= -======================================================================================= -======================================================================================= - Preparing to build library $Target -======================================================================================= -======================================================================================= -======================================================================================= -"; - print $header if (!$ReallyQuiet); - open FILE, ">>$build_log_out"; print FILE $header; close FILE; - open FILE, ">>$build_log_err"; print FILE $header; close FILE; - - # easy for error-handling: - $CurrentTarget = $Target; - my $OK = 1; - - PrepSdkPaths($SDK); - - chdir($Path) or $OK=0; - PrintErrorMessage("Changing to $Path failed!") if (!$OK); - return 0 if (!$OK); - - PrintMessage("Cleaning for $Target") if (!$ReallyQuiet); - system("bldmake bldfiles > NUL 2> NUL"); - PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8); - system("abld clean $TargetName urel > NUL 2> NUL"); - PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); - # remove file so we are sure that after .lib generation we have a fresh copy! - if (-e $TargetFilePath) { unlink($TargetFilePath) or PrintErrorMessage("Removing $TargetFilePath"); } - - my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen"); - my $Message = "Building $Target ($Redirection)"; - PrintMessage($Message) if (!$ReallyQuiet); - print(" $Message\n") if ($ReallyQuiet); - - my $OldSize = (-s $build_log_err); - $Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : ""); - system("abld build $TargetName urel $Redirection >> $build_log_out"); - $OK = 0 if ($? >> 8); -# print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err)); - PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); - return 0 if (!$OK); # ABLD always returns ok :( grr - PrintMessage("Done.") if (!$ReallyQuiet); - - # did it work? :) - if (-e $TargetFilePath) - { - $LibrariesSucceeded++; - - if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path! - { - system("del /S /Q $TargetIntermediatePath > NUL"); - } - return 1; - } - else - { - PrintErrorMessage("'abld build $TargetName urel' apparently failed."); - if ($HaltOnError) - { - PrintErrorMessage("Halting on error as requested!"); - exit 1; - } - return 0; - } -} - -################################################################################################################## - -# Build, Package & Upload a single Variation -sub DoVariation -{ - my ($SDK, $Variation, $MacroBlock) = @_; - my $Extra = ($Variation ne '' ? "_$Variation" : ""); - my $Package = sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra); - - if ($SkipExistingPackages && -f "$output_dir/$Package") - { - PrintMessage("Skipping $Package (already exists!)"); - $PackagesExisted++; - return; - } - -my $header = " -======================================================================================= -======================================================================================= -======================================================================================= - Preparing to build $Package -======================================================================================= -======================================================================================= -======================================================================================= -"; - print $header if (!$ReallyQuiet); - open FILE, ">>$build_log_out"; print FILE $header; close FILE; - open FILE, ">>$build_log_err"; print FILE $header; close FILE; - - # easy for error-handling: - $CurrentTarget = $Package; - my $OK; - - $OK = PrepVariation($SDK, $Variation, $Package, $MacroBlock); - - if ($OK) - { - $OK = BuildVariation($SDK, $Variation, $Package, $MacroBlock); - - if ($OK && $FTP_Host ne '') - { - UploadVariation($SDK, $Variation, $Package); - } - } -} - -################################################################################################################## - -sub PrepVariation() -{ - my ($SDK, $Variation, $Package, $MacroBlock) = @_; - my $OK = 1; - - PrepSdkPaths($SDK); - - chdir($build_dir) or $OK=0; - PrintErrorMessage("Changing to $build_dir failed!") if (!$OK); - return 0 if (!$OK); - - # insert $MacroBlock into AUTO_MACRO_MASTER in scummvm_base.mmp - PrintMessage("Setting new AUTO_MACROS_MASTER in scummvm_base.mmp for '$Variation'") if (!$ReallyQuiet); - my $n = "AUTO_MACROS_MASTER"; - my $a = "\/\/START_$n\/\/"; - my $b = "\/\/STOP_$n\/\/"; - my $name = "scummvm_base.mmp"; - my $file = "$build_dir/mmp/$name"; - my $updated = " Updated @ ".localtime(); - - open FILE, "$file" or $OK=0; - PrintErrorMessage("Reading file '$file'") if (!$OK); - return 0 if (!$OK); - my @lines = ; - close FILE; - - my $onestr = join("",@lines); - $MacroBlock =~ s/^\s*//gm; - $onestr =~ s/$a(.*)$b/$a$updated\n$ExtraMacros$MacroBlock$b/s; - - open FILE, ">$file" or $OK=0; - PrintErrorMessage("Writing file '$file'") if (!$OK); - return 0 if (!$OK); - print FILE $onestr; - close FILE; - - # running AdaptAllMMPs.pl to propagate changes - PrintMessage("Running AdaptAllMMPs.pl to propagate MACRO changes") if (!$ReallyQuiet); - system("perl AdaptAllMMPs.pl > NUL"); - $OK = 0 if ($? >> 8); - PrintErrorMessage("'AdaptAllMMPs.pl' exited with value " . ($? >> 8)) if ($? >> 8); - return 0 if (!$OK); - - # we are here: so all is ok :) - return 1; -} - -################################################################################################################## - -sub BuildVariation() -{ - my ($SDK, $Variation, $Package, $MacroBlock) = @_; - my $TargetName = $SDK_TargetName{$SDK}; - my $TargetDir = $SDK_TargetDir{$SDK}; - my $OK = 1; - - my $dir = $build_dir."/".$SDK_BuildDirs{$SDK}; - $dir =~ s#/#\\#g; - chdir($dir); - - #my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\".substr($dir, 3)); - # does this remove too much? - my $TargetIntermediatePath = uc($SDK_RootDirs{$SDK}."\\EPOC32\\BUILD\\"); - - PrintMessage("Cleaning for $Package") if (!$ReallyQuiet); - - # remove some files so we are sure that after .sis package generation we have a fresh copy! - my $UnlinkFile = "$output_dir/$Package"; - if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } - $UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.app"; - if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } - $UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.exe"; - if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); } - - system("bldmake bldfiles 2> NUL > NUL"); - PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8); - - system("abld clean $TargetName urel 2> NUL > NUL"); - PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); - - my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen"); - my $Message = "Building $Package ($Redirection)"; - PrintMessage($Message) if (!$ReallyQuiet); - print(" $Message\n") if ($ReallyQuiet); - - my $OldSize = (-s $build_log_err); - $Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : ""); - system("abld build $TargetName urel $Redirection >> $build_log_out"); - $OK = 0 if ($? >> 8); - print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err) && !$ReallyQuiet); - PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8); - return 0 if (!$OK); # ABLD always returns ok :( grr - PrintMessage("Done.") if (!$ReallyQuiet); - - # do we have an override suffix for the package name? - $MacroBlock =~ /^\s*\/\/\s*PKG_SUFFIX:\s*(\w+)\s*/gm; # using '@' as delimiter here instead of '/' for clarity - my $PkgSuffix = $1; # can be "" - my $PkgFile = sprintf($file_tpl_pkg, $SDK.$PkgSuffix); - - PrintMessage("Creating package $Package") if (!$ReallyQuiet); -## fix if (!$ReallyQuiet) for next: - system("makesis -d\"".$SDK_RootDirs{$SDK}."\" $PkgFile \"$output_dir/$Package\" $Redirection >> $build_log_out"); - $OK = 0 if ($? >> 8); - PrintErrorMessage("'makesis' $PkgFile exited with value " . ($? >> 8)) if (!$OK); - if ($HaltOnError && !$OK) - { - PrintErrorMessage("Halting on error as requested!"); - exit 1; - } - return 0 if (!$OK); - - # did it work? :) - if (-e "$output_dir/$Package") - { - $PackagesCreated++; - - if ($TargetIntermediatePath ne '' && $TargetIntermediatePath =~ /\\EPOC32\\BUILD\\/i) # make really sure it's a valid path! - { - #PrintMessage("Cleaning $TargetIntermediatePath"); - system("del /S /Q $TargetIntermediatePath > NUL"); - } - return 1; - } - else - { - PrintErrorMessage("'makesis' apparently failed. (?)"); - return 0; - } -} - -################################################################################################################## - -sub UploadVariation() -{ - my ($SDK, $Variation, $Package) = @_; - - use Net::FTP; - my $newerr; - - PrintMessage("Connecting to FTP $FTP_Host") if (!$ReallyQuiet); - - $ftp = Net::FTP->new($FTP_Host,Timeout=>240) or $newerr=1; - PrintErrorMessage("Connecting to FTP $FTP_Host! Aborting!") if $newerr; - if (!$newerr) - { - $ftp->login($FTP_User, $FTP_Pass) or $newerr=1; - PrintErrorMessage("Logging in with $FTP_User to $FTP_Host! Aborting!") if $newerr; - if (!$newerr) - { - if ($FTP_Dir ne '') # do we need to change dir? - { - PrintMessage("Changing to dir $FTP_Dir"); - $ftp->cwd($FTP_Dir) or $newerr=1; - - if ($newerr) - { - PrintErrorMessage("Changing to dir $FTP_Dir! Aborting!"); - $ftp->quit; - return; - } - } - -# leave this for possible auto-deletion of old files? -# @files = $ftp->dir or $newerr=1; -# push @ERRORS, "Can't get file list $!\n" if $newerr; -# print "Got file list\n"; -# foreach(@files) { -# print "$_\n"; -# } - - PrintMessage("Uploading $Package (".(-s "$output_dir/$Package")." bytes)"); - - $ftp->binary; - $ftp->put("$output_dir/$Package") or $newerr=1; - PrintErrorMessage("Uploading package! Aborting!") if $newerr; - $PackagesUploaded++ if (!$newerr); - } - - $ftp->quit; - } -} - -################################################################################################################## - -sub PrepSdkPaths() -{ - my ($SDK) = @_; - my $EPOCROOT = $SDK_RootDirs{$SDK}; - my $EPOC32RT = "$EPOCROOT\\epoc32"; - my $AdditionalPathEntries = ""; - my $OK = 1; - - # do the directories exist? - if (! -d $EPOCROOT) { PrintErrorMessage("$SDK Directory does not exist: '$EPOCROOT'"); return 0; } - if (! -d $EPOC32RT) { PrintErrorMessage("$SDK Directory does not exist: '$EPOC32RT'"); return 0; } - - # set env stuff - PrintMessage("Prepending $SDK specific paths to %PATH%") if (!$ReallyQuiet); - $AdditionalPathEntries .= "$ECompXL_BinDir;" if ($ECompXL_BinDir ne '' && $SDK eq 'UIQ2'); - $AdditionalPathEntries .= "$EPOC32RT\\include;"; - $AdditionalPathEntries .= "$EPOC32RT\\tools;"; - $AdditionalPathEntries .= "$EPOC32RT\\gcc\\bin;"; - $ENV{'EPOCROOT'} = substr($EPOCROOT,2)."\\"; # strips drive letter, needs to end with backslash! - $ENV{'PATH'} = "$AdditionalPathEntries$initial_path"; - - return 1; -} - -################################################################################################################## - -sub CleanupPath() -{ - my ($path) = @_; - - if ($ECompXL_BinDir ne '') - { - $path =~ s/\"\Q$ECompXL_BinDir\E\";//g; - } - - while( ($SDK, $RootDir) = each(%SDK_RootDirs) ) - { - if ($SDK_RootDirs{$SDK} ne '') - { - my $path_component = "\"".$SDK_RootDirs{$SDK}."\\epoc32\\"; - $path =~ s/\Q$path_component\E.*?\";//g; - } - } - - return $path; -} - -################################################################################################################## - -sub PrintErrorMessage() -{ - my ($msg) = @_; - - # add to array, so we can print it @ the end! - push @ErrorMessages, "$CurrentTarget: $msg"; - - print "+--------------------------------------------------------------------------------------\n"; - PrintMessage("ERROR: $CurrentTarget: $msg"); - print "\007" if (!$HaltOnError); - print "\007\007" if ($HaltOnError); # make more noise if halt-on-error -} - -sub PrintMessage() -{ - my ($msg) = @_; - - print "| $msg\n"; - print "+--------------------------------------------------------------------------------------\n"; -#$line = ; - - #print "\e[1,31m> $msg\e[0m\n"; -} - -################################################################################################################## - \ No newline at end of file diff --git a/backends/symbian/BuildPackageUpload_LocalSettings.pl b/backends/symbian/BuildPackageUpload_LocalSettings.pl deleted file mode 100644 index a357b836db..0000000000 --- a/backends/symbian/BuildPackageUpload_LocalSettings.pl +++ /dev/null @@ -1,292 +0,0 @@ - -################################################################################################################## - - # you can use these below for speed & clarity or override with custom settings - $DefaultTopMacros = " - MACRO USE_ZLIB // LIB:zlib.lib - MACRO USE_MAD // LIB:libmad.lib - //MACRO USE_TREMOR // LIB:libtremor.lib - "; - - $DefaultBottomMacros = " - MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib - MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib - MACRO DISABLE_LURE // LIB:scummvm_lure.lib - MACRO DISABLE_CINE // LIB:scummvm_cine.lib - "; - - ## - ## General system information: - ## - - # this way you can use the same LocalSettings.pl file on multiple machines! - if ($ENV{'COMPUTERNAME'} eq "MYCOMPUTER") - { - # might use this string for file/dir naming in the future :) - $Producer = "BUILDERNAME"; - $RedirectSTDERR = 0; - $HaltOnError = 1; - $SkipExistingPackages = 0; - $ReallyQuiet = 0; - - # specify an optional FTP server to upload to after each Build+Package (can leave empty) - #$FTP_Host = "ftp.myftp.net"; - #$FTP_User = "user"; - #$FTP_Pass = "pass"; - #$FTP_Dir = "directory"; - - # possible SDKs: ("UIQ2", UIQ3", "S60v1", "S60v2", "S60v3", "S80", "S90") - # Note1: the \epoc32 directory needs to be in these rootdirs - # Note2: these paths do NOT end in a backslash! - $SDK_RootDirs{'UIQ2'} = "C:\\S\\UIQ_21"; - $SDK_RootDirs{'S60v1'} = "C:\\S\\S60v1"; - $SDK_RootDirs{'S60v2'} = "C:\\S\\S60v2"; - $SDK_RootDirs{'S80'} = "C:\\S\\S80"; - $SDK_RootDirs{'S90'} = "C:\\S\\S90"; - $ECompXL_BinDir = "C:\\S\\ECompXL\\bin"; # only needed for UIQ - # you need to specify each of the SDKs used in the blocks below! - - # these supporting libraries get built first, then all the Variations - # Note: the string {'xxx.lib'} is used in checking in build success: so needs to be accurate! - if (0) # so we can turn them on/off easily - { - #$SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc"; - #$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group"; - #$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\S\\tremor\\epoc"; - $SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\UIQ"; - #$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S60"; - #$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S80"; - #$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90"; - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; - } - - # backup :P - #Path=C:\Progra~1\Active\Python24\.;C:\Program Files\Active\Tcl\bin;C:\Progra~1\Active\Perl\bin\;C:\WINDOWS\system32;C:\W - #INDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\GNU\cvsnt;C:\Progra - #m Files\WinSCP3\;"C:\Program Files\Common Files\Microsoft Shared\VSA\8.0\VsaEnv\";"c:\Program Files\Microsoft Visual Stu - #dio 8\VC\bin";"C:\Program Files\UltraEdit-32" - } - elsif ($ENV{'COMPUTERNAME'} eq "OTHERCOMPUTER") - { -#see previous section - # now you can add $SDK_Variations only built on this PC here :) - } - else - { - print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!"; - exit 1; - } - - ## - ## Variation defines: - ## - - # second hash index = literal string used in .sis file created. - # empty string also removes the trailing '_'. Some 051101 examples: - - # $SDK_Variations{'UIQ2'}{''} would produce: - # scummvm-051101-SymbianUIQ2.sis - - # $SDK_Variations{'S60v2'}{'simon'} would produce: - # scummvm-051101-SymbianS60v2_simon.sis - - # $SDK_Variations{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce: - # scummvm-051101-SymbianUIQ2_queen.sis - # scummvm-051101-SymbianUIQ3_queen.sis - # scummvm-051101-SymbianS60v1_queen.sis - # scummvm-051101-SymbianS60v2_queen.sis - # scummvm-051101-SymbianS60v3_queen.sis - # scummvm-051101-SymbianS80_queen.sis - # scummvm-051101-SymbianS90_queen.sis - - $SDK_Variations{'UIQ2'}{'test'} = "$DefaultTopMacro - MACRO USE_TREMOR // LIB:libtremor.lib - //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - //MACRO DISABLE_SKY // LIB:scummvm_sky.lib - //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - //MACRO DISABLE_GOB // LIB:scummvm_gob.lib - //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; -# $SDK_Variations{'S60v1'}{'test'} = $SDK_Variations{'UIQ2'}{'test'}; - -if (0) # all regular combo's -{ - # the first one includes all SDKs & engines - - $SDK_Variations{'ALL'}{'all'} = "$DefaultTopMacros - //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - //MACRO DISABLE_SKY // LIB:scummvm_sky.lib - //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - //MACRO DISABLE_GOB // LIB:scummvm_gob.lib - //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - # now one for each ready-for-release engine - - $SDK_Variations{'ALL'}{'scumm'} = "$DefaultTopMacros - //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'simon'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'sky'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - //MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'queen'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'gob'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - //MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'saga'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'kyra'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - $DefaultBottomMacros"; - - # below here you could specify weird & experimental combinations, non-ready engines - - $SDK_Variations{'ALL'}{'test_lure'} = "$DefaultTopMacros - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib - MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib - //MACRO DISABLE_LURE // LIB:scummvm_lure.lib - MACRO DISABLE_CINE - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'saga_mini'} = " - //MACRO USE_ZLIB // LIB:zlib.lib - //MACRO USE_MAD // LIB:libmad.lib - //MACRO USE_TREMOR // LIB:libtremor.lib - MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - MACRO DISABLE_CINE - $DefaultBottomMacros"; - - $SDK_Variations{'ALL'}{'scumm_no78he'} = " - MACRO USE_ZLIB // LIB:zlib.lib - MACRO USE_MAD // LIB:libmad.lib - //MACRO USE_TREMOR // LIB:libtremor.lib - //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - MACRO DISABLE_SKY // LIB:scummvm_sky.lib - MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - MACRO DISABLE_GOB // LIB:scummvm_gob.lib - MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - MACRO DISABLE_SCUMM_7_8 - MACRO DISABLE_SCUMM_HE - MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - MACRO DISABLE_CINE - $DefaultBottomMacros"; - -# $SDK_Variations{'ALL'}{'all_vorbis'} = " -# MACRO USE_ZLIB // LIB:zlib.lib -# MACRO USE_MAD // LIB:libmad.lib -# MACRO USE_TREMOR // LIB:libtremor.lib -# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib -# //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib -# //MACRO DISABLE_SKY // LIB:scummvm_sky.lib -# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib -# //MACRO DISABLE_GOB // LIB:scummvm_gob.lib -# //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib -# $DefaultBottomMacros"; -} - -# -# $SDK_Variations{'S60v2'}{'test_sword'} = "$DefaultTopMacros -# MACRO USE_MPEG2 // LIB:libmpeg2.lib -# MACRO USE_TREMOR // LIB:libtremor.lib -# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib -# MACRO DISABLE_SIMON // LIB:scummvm_simon.lib -# MACRO DISABLE_SKY // LIB:scummvm_sky.lib -# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib -# MACRO DISABLE_GOB // LIB:scummvm_gob.lib -# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib -# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib -# //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib -# //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib -# "; -# $SDK_Variations{'UIQ2'}{'test_sword'} = $SDK_Variations{'S60v2'}{'test_sword'} -# - -# for mega-fast-testing only plz! -# $SDK_Variations{'UIQ2'}{'(fast_empty)'} = " -# //MACRO USE_ZLIB // LIB:zlib.lib -# //MACRO USE_MAD // LIB:libmad.lib -# //MACRO USE_TREMOR // LIB:libtremor.lib -# MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib -# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib -# MACRO DISABLE_SIMON // LIB:scummvm_simon.lib -# MACRO DISABLE_SKY // LIB:scummvm_sky.lib -# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib -# MACRO DISABLE_GOB // LIB:scummvm_gob.lib -# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib -# $DefaultBottomMacros"; - -################################################################################################################## - -1; \ No newline at end of file diff --git a/backends/symbian/README b/backends/symbian/README deleted file mode 100644 index 3a4b6142ad..0000000000 --- a/backends/symbian/README +++ /dev/null @@ -1,135 +0,0 @@ - - ScummVM - ScummVM ported to EPOC/SymbianOS - - Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - Copyright (C) 2005 ScummVM Team - - $Id$ - - -About ScummVM --------------- - The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson. - The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam. - Jurgen and Lars are currently working together to finalize the transfer to CVS. - - -Nescessary components ---------------------- - Building ScummVM yourself using the UIQ 2.1/Nokia S60 SDK/Nokia S80 SDK/Nokia S90 SDK framework is not an easy task! - Lets just say the framework needs quite some time to set up and takes a while - to get used to. If you choose to continue you will need the following items: - - - UIQ 2.1 SDK (To build for UIQ devices); - http://www.symbian.com/developer/sdks_uiq.asp - - - Nokia S60 1st, 2nd edition (3rd edition has not been tested) SDK (To build for S60 devices) - - - Nokia S80 SDK (To build for S80 devices) - - - Nokia 7710 SDK (To build for the 7710/S90 device) - - - ECompXL, an EPOC application compression library - http://www.yipton.demon.co.uk/ecompxl/latest/readme.html (To build for UIQ devices) - - - libsdl, Simple Directmedia Layer, a cross-platform multimedia library - http://www.libsdl.org/ (see note about ESDL below) - - - libmad, a high-quality MPEG audio decoder - http://www.underbit.com/products/mad/ - - - zlib, a massively spiffy yet delicately unobtrusive compression library - http://www.zlib.net/ - - These are probably too heavy-duty for your phone: - - - libogg, the free media file container format - http://www.xiph.org/ogg/ - - - libvorbis, the free audio codec - http://www.vorbis.com/ - - - flac, the Free Lossless Audio Codec - http://flac.sourceforge.net/ - - - libmpeg2, a free MPEG-2 video stream decoder - http://libmpeg2.sourceforge.net/ - - -Building ScummVM ------------------ - ECompXL: this is a tool that will compress your executable with GZIP and glue - it to a predefined loader app. The app will uncompress your application at - runtime and run it without you even knowing it. A really interesting byproduct - of this method is that the general restriction of not having any writeable - static data (WSD) for Symbian APP executables no longer applies. This makes - the life of an EPOC porter a lot easier! To install this tool you need to add - its \bin path to your PATH above the sybmian epocs32\tools path, so that ECompXL's - PETRAN.EXE will be the executable that is started. - - SDL: the latest varsion of SDL at this point in time is 1.2.8. This version - works great for compiling on other platforms, but for EPOC it lacks some - features. There are two distributions that have the nescessary goods: The one - made for SuperWaba (http://www.newlc.com/article.php3?id_article=574 and - http://www.superwaba.com/) and ESDL, the one that Sprawl made for the P800/P900. I've - used Sprawl's version uptil now. If Sprawl feels ESDL is in such a state that - it can be released, he will post a source download on his site and I will - make it know through the scummvm.org site. In /sdl/epoc/ go: - > bldmake bldfiles - > abld build - - zlib: the zlib-x.x.x.tar.gz does not come with UIQ .mpp build files, that's why - I added them for you in epoc-zlib.zip. Extract in /zlib/ which will - create the epoc dir. In /zlib/epoc/ go: - > bldmake bldfiles - > abld build - - libmad: the libmad-x.x.x.tar.gz does not come with UIQ .mpp build files, that's - why I added them for you in epoc-libmad.zip. Extract in /libmad/ which - will create the epoc dir. In /libmad/epoc/ go: - > bldmake bldfiles - > abld build - - ScummVM: make sure the SYSTEMINCLUDE dirs in ScumVM.mmp are correct. For the - 'wins' platform also check the LIBRARY entries for the correct path to your MSVC - installation. Please note that you can only specify relative paths here, so every- - thing needs to be on the same physical drive! Another weird demand of the UIQ - platform... In /scummvm/backends/epoc/ go: - - > run 'unzip mmp\initial_mmps.zip' - > edit the scummvm_base.mmp to fit your needs (for supported target games and features, check the MACRO statements) - > run 'perl AdaptAllMMPs.pl' from the commandline, this will update all mmp and bld.inf files - > change to the directory for your designated target (uiq2 for UIQ 2.X, S60 for S60 v1 & V2 etc) - > 'bldmake bldfiles' to update and create the symbian build structure - > 'abld build armi urel' to build the target binaries - > makesis -d\sdkpath ScummVM_xxx.pkg to build the sis file for your target. - - Now you should have yourself a nice ScummVM_xxx.sis installer package for use - on your phone. Please note that for development it will be a lot faster if you - transfer the SCUMMVM.APP/Scummvm.EXE file directly to your !:\system\apps\ScummVM\ dir! - - Platforms can be one of: ARMi, ARM4, THUMB, WINS. The SE P900 uses the ARMi platform, - which is a combined ARM4/THUMB programming mode. Configurations can be one of: - UREL or UDEB. - - -Greetz & such -------------- - Kudos fly out to: - - Sprawl for having the nerve to start & carry this puppy for so long - - AnotherGuest for having the nerve to start & carry this puppy for so long - - Fingolfin for taking the time to go through 1000 patch versions with me - - Myself (SumthinWicked), for writing this entire README and adopting all sources together with Fingolfin :) - - the entire ScummVM Dev team for making a kicka$$ program - - the folks in #scummvm @ irc.freenode.net for their help, confort and support - - everybody else who wants to give me 'the look' for not including them here :P - - - it's been swell, - gotta go now, - - greetz, - SumthinWicked & Anotherguest - diff --git a/backends/symbian/S60/BLD.INF.in b/backends/symbian/S60/BLD.INF.in deleted file mode 100644 index b6cf8bbda6..0000000000 --- a/backends/symbian/S60/BLD.INF.in +++ /dev/null @@ -1,12 +0,0 @@ -PRJ_PLATFORMS -WINS ARMI // ARM4 THUMB - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_S60.mmp -.\ScummVM_S60_App.mmp diff --git a/backends/symbian/S60/ScummVM_S60.mmp.in b/backends/symbian/S60/ScummVM_S60.mmp.in deleted file mode 100644 index 3421cb306d..0000000000 --- a/backends/symbian/S60/ScummVM_S60.mmp.in +++ /dev/null @@ -1,104 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC S60 MMP makefile project for ScummVM -// - -// *** Definitions - -#if defined(WINS) - TARGET ScummVM.dll -#else - TARGET ScummVM.exe -#endif -TARGETPATH system\apps\ScummVM -TARGETTYPE EXEDLL - -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -#if !defined(WINS) -EPOCSTACKSIZE 0x00008000 -EPOCHEAPSIZE 2048000 8192000 -#endif - -MACRO S60 - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -#if !defined(WINS) -STATICLIBRARY egcc.lib // for __fixunsdfsi -#endif - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\.. - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries - -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib -LIBRARY gdi.lib hal.lib bitgdi.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib -library avkon.lib bafl.lib diff --git a/backends/symbian/S60/ScummVM_S60_App.mmp b/backends/symbian/S60/ScummVM_S60_App.mmp deleted file mode 100644 index 6caf91009b..0000000000 --- a/backends/symbian/S60/ScummVM_S60_App.mmp +++ /dev/null @@ -1,49 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// MAKEFILE.MMP S60 ScummVM Launcher -// - -TARGET ScummVM.app -TARGETPATH system\apps\ScummVM -TARGETTYPE app - -UID 0x100039ce 0x101f9b57 -sourcepath ..\res -RESOURCE SCUMMVM.rss - -USERINCLUDE ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc - -// app source -sourcepath ..\src -SOURCE ScummVMApp.cpp - -sourcepath .. -AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp - -// libraries -LIBRARY cone.lib EIKCORE.lib -LIBRARY euser.lib apparc.lib -LIBRARY efsrv.lib apgrfx.lib -LIBRARY avkon.lib diff --git a/backends/symbian/S60/scummvm-CVS-SymbianS60v1.pkg b/backends/symbian/S60/scummvm-CVS-SymbianS60v1.pkg deleted file mode 100644 index d95ea72456..0000000000 --- a/backends/symbian/S60/scummvm-CVS-SymbianS60v1.pkg +++ /dev/null @@ -1,27 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM S60v1"},(0x101f9b57),0,80,0 - -; Platform type -(0x101F6F88), 0, 0, 0, {"Series60ProductID"} - -; Launcher, Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" -"\epoc32\release\armi\urel\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\release\armi\urel\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/symbian/S60/scummvm-CVS-SymbianS60v2.pkg deleted file mode 100644 index b2eb086488..0000000000 --- a/backends/symbian/S60/scummvm-CVS-SymbianS60v2.pkg +++ /dev/null @@ -1,27 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM S60v2"},(0x101f9b57),0,80,3 - -; Platform type -(0x101F6F88), 0, 0, 0, {"Series60ProductID"} - -; Launcher, Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/S60v3/BLD.INF.in b/backends/symbian/S60v3/BLD.INF.in deleted file mode 100644 index f7b7090adf..0000000000 --- a/backends/symbian/S60v3/BLD.INF.in +++ /dev/null @@ -1,11 +0,0 @@ -PRJ_PLATFORMS -GCCE WINSCW - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_S60v3.mmp diff --git a/backends/symbian/S60v3/ScummVM_Loc.rss b/backends/symbian/S60v3/ScummVM_Loc.rss deleted file mode 100644 index 83a8cfcc4c..0000000000 --- a/backends/symbian/S60v3/ScummVM_Loc.rss +++ /dev/null @@ -1,22 +0,0 @@ -#include - -// This file localise the applications icons and caption -RESOURCE LOCALISABLE_APP_INFO - { - caption_and_icon = - { - CAPTION_AND_ICON_INFO - { - // The caption text is defined in the rls file - caption = "ScummVM"; - // Icons are used to represent applications in the - // application launcher and application title bar. - // The number_of_icons value identifies how many icons - // that exist in the icon_file. - number_of_icons = 3; - // Using the application icons. - icon_file = "\\Resource\\Apps\\ScummVM.mbm"; - } - }; - } - diff --git a/backends/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/symbian/S60v3/ScummVM_S60v3.mmp.in deleted file mode 100644 index 545eade06e..0000000000 --- a/backends/symbian/S60v3/ScummVM_S60v3.mmp.in +++ /dev/null @@ -1,123 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC S60 MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET ScummVM.exe -TARGETPATH sys\bin -TARGETTYPE EXE - -UID 0x100039ce 0xA0000657 - -START RESOURCE ScummVM_reg.rss -TARGETPATH \private\10003a3f\apps -END - -START RESOURCE ScummVM_loc.rss -TARGETPATH \Resource\Apps -LANG SC -END - -SOURCEPATH ..\res -START RESOURCE ScummVM.rss -HEADER -TARGETPATH \Resource\Apps -LANG SC -END - -START BITMAP ScummVM.mbm -TARGETPATH \Resource\Apps -SOURCEPATH ..\res -// Source Color-depth Source-bitmap-list -// c denotes whether the bitmap is a colour bitmap and the digits represent the -// colour-depth of the bitmap and the bitmap mask respectively -SOURCE c24 ScummSmall.bmp -SOURCE 8 ScummSmallMask.bmp -SOURCE c24 ScummLarge.bmp -SOURCE 8 ScummLargeMask.bmp -SOURCE c24 ScummxLarge.bmp -SOURCE 8 ScummxLargeMask.bmp -END - -EPOCSTACKSIZE 0x0000F000 -EPOCHEAPSIZE 2048000 16192000 - -MACRO S60 -MACRO S60V3 -MACRO EPOC_AS_APP -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\.. - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib -LIBRARY gdi.lib hal.lib bitgdi.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib -library avkon.lib bafl.lib diff --git a/backends/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg deleted file mode 100644 index d6a1e94c1f..0000000000 --- a/backends/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg +++ /dev/null @@ -1,33 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; -;Language - standard language definitions -&EN - -; List of localised vendor names - one per language. At least one must be provided (English [EN]). -; List must correspond to list of languages specified elsewhere in the .pkg -%{"ScummVM"} -; The non-localised, globally unique vendor name (mandatory) -:"ScummVM" - -; UID is the app's UID -#{"ScummVM S60v3"},(0xA0000657),0,90,0 - -;Supports Series 60 v 3.0 -[0x101F7961], 0, 0, 0, {"Series60ProductID"} - -; Launcher, Application, AIF & Resource file -"\s60v3\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" -"\s60v3\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" -"\s60v3\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" -"\s60v3\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" -"\s60v3\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"c:\private\A0000657\scummvm.ini",FILENULL -""-"c:\private\A0000657\scummvm.stdout.txt",FILENULL -""-"c:\private\A0000657\scummvm.stderr.txt",FILENULL -""-"c:\private\A0000657\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/S60v3/scummvm_reg.rss b/backends/symbian/S60v3/scummvm_reg.rss deleted file mode 100644 index df99094b2e..0000000000 --- a/backends/symbian/S60v3/scummvm_reg.rss +++ /dev/null @@ -1,18 +0,0 @@ -// All registration files need to #include appinfo.rh. -#include - -// All registration files must define UID2, which is always -// KUidAppRegistrationResourceFile, and UID3, which is the application's UID. -UID2 KUidAppRegistrationResourceFile -UID3 0xA0000657 // application UID - -// Registration file need to containo an APP_REGISTRATION_INFO resource that -// minimally needs to provide the name of the application binary (using the -// app_file statement). -RESOURCE APP_REGISTRATION_INFO - { - app_file = "ScummVM"; // filename of application binary (minus extension) - // Specify the location of the localisable icon/caption definition file - localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc"; - } - diff --git a/backends/symbian/S80/BLD.INF.in b/backends/symbian/S80/BLD.INF.in deleted file mode 100644 index 75ef20be12..0000000000 --- a/backends/symbian/S80/BLD.INF.in +++ /dev/null @@ -1,12 +0,0 @@ -PRJ_PLATFORMS -WINS ARMI // ARM4 THUMB - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_S80.mmp -.\ScummVM_S80_App.mmp diff --git a/backends/symbian/S80/ScummVM_S80.mmp.in b/backends/symbian/S80/ScummVM_S80.mmp.in deleted file mode 100644 index 6074439552..0000000000 --- a/backends/symbian/S80/ScummVM_S80.mmp.in +++ /dev/null @@ -1,102 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC S80 MMP makefile project for ScummVM -// - -// *** Definitions - -#if defined(WINS) - TARGET ScummVM.dll -#else - TARGET ScummVM.exe -#endif -TARGETPATH system\apps\ScummVM -TARGETTYPE EXEDLL - -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -EPOCSTACKSIZE 0x00008000 -EPOCHEAPSIZE 1024 8192000 - -MACRO S80 - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -#if !defined(WINS) -STATICLIBRARY egcc.lib // for __fixunsdfsi -#endif - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\.. - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries - -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib apgrfx.lib -LIBRARY gdi.lib hal.lib bitgdi.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib bafl.lib - diff --git a/backends/symbian/S80/ScummVM_S80_App.mmp b/backends/symbian/S80/ScummVM_S80_App.mmp deleted file mode 100644 index 09fa822bc7..0000000000 --- a/backends/symbian/S80/ScummVM_S80_App.mmp +++ /dev/null @@ -1,49 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// MAKEFILE.MMP S80 ScummVM Launcher -// - -TARGET ScummVM.app -TARGETPATH system\apps\ScummVM -TARGETTYPE app - -UID 0x100039ce 0x101f9b57 -sourcepath ..\res -RESOURCE SCUMMVM.rss - -SOURCEPATH . -USERINCLUDE ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc - -// app source -sourcepath ..\src -SOURCE ScummVMApp.cpp - -sourcepath .. -AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp - -// libraries -LIBRARY cone.lib EIKCORE.lib -LIBRARY euser.lib apparc.lib -LIBRARY efsrv.lib apgrfx.lib diff --git a/backends/symbian/S80/scummvm-CVS-SymbianS80.pkg b/backends/symbian/S80/scummvm-CVS-SymbianS80.pkg deleted file mode 100644 index e48d37b08e..0000000000 --- a/backends/symbian/S80/scummvm-CVS-SymbianS80.pkg +++ /dev/null @@ -1,27 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM S80"},(0x101f9b57),0,80,3 - -; Platform type -- disabled: seems to be causing trouble -;(0x101F8ED2), 0, 0, 0, {"Series80ProductID"} - -; Launcher, Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/S90/BLD.INF.in b/backends/symbian/S90/BLD.INF.in deleted file mode 100644 index d6e1ece012..0000000000 --- a/backends/symbian/S90/BLD.INF.in +++ /dev/null @@ -1,12 +0,0 @@ -PRJ_PLATFORMS -WINS ARMI // ARM4 THUMB - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_S90.mmp -.\ScummVM_S90_App.mmp diff --git a/backends/symbian/S90/Scummvm_S90.mmp.in b/backends/symbian/S90/Scummvm_S90.mmp.in deleted file mode 100644 index 2655a553a4..0000000000 --- a/backends/symbian/S90/Scummvm_S90.mmp.in +++ /dev/null @@ -1,102 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC S90 MMP makefile project for ScummVM -// - -// *** Definitions - -#if defined(WINS) - TARGET ScummVM.dll -#else - TARGET ScummVM.exe -#endif -TARGETPATH system\apps\ScummVM -TARGETTYPE EXEDLL - -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -EPOCSTACKSIZE 0x00008000 -EPOCHEAPSIZE 1024 8192000 - -MACRO S90 - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -#if !defined(WINS) -STATICLIBRARY egcc.lib // for __fixunsdfsi -#endif - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\.. - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries - -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib apgrfx.lib -LIBRARY gdi.lib hal.lib bitgdi.lib bafl.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib - diff --git a/backends/symbian/S90/Scummvm_S90_App.mmp b/backends/symbian/S90/Scummvm_S90_App.mmp deleted file mode 100644 index 62a045e146..0000000000 --- a/backends/symbian/S90/Scummvm_S90_App.mmp +++ /dev/null @@ -1,49 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// MAKEFILE.MMP S90 ScummVM Launcher -// - -TARGET ScummVM.app -TARGETPATH system\apps\ScummVM -TARGETTYPE app - -UID 0x100039ce 0x101f9b57 -sourcepath ..\res -RESOURCE SCUMMVM.rss - -SOURCEPATH . -USERINCLUDE . -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc - -// app source -sourcepath ..\src -SOURCE ScummVMApp.cpp - -sourcepath .. -AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp - -// libraries -LIBRARY cone.lib EIKCORE.lib -LIBRARY euser.lib apparc.lib -LIBRARY efsrv.lib apgrfx.lib \ No newline at end of file diff --git a/backends/symbian/S90/scummvm-CVS-SymbianS90.pkg b/backends/symbian/S90/scummvm-CVS-SymbianS90.pkg deleted file mode 100644 index a913bd15ec..0000000000 --- a/backends/symbian/S90/scummvm-CVS-SymbianS90.pkg +++ /dev/null @@ -1,27 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM S90"},(0x101f9b57),0,80,3 - -; Platform type -- disabled: seems to be causing trouble -;(0x101FBE04), 0, 0, 0, {"Series90ProductID"} - -; Launcher, Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\release\armi\urel\ScummVM.exe"-"!:\system\apps\ScummVM\ScummVM.exe" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/UIQ2/BLD.INF.in b/backends/symbian/UIQ2/BLD.INF.in deleted file mode 100644 index b607446a64..0000000000 --- a/backends/symbian/UIQ2/BLD.INF.in +++ /dev/null @@ -1,11 +0,0 @@ -PRJ_PLATFORMS -WINS ARMI // ARM4 THUMB - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_UIQ2.mmp diff --git a/backends/symbian/UIQ2/ScummVM.rss b/backends/symbian/UIQ2/ScummVM.rss deleted file mode 100644 index a55fabfc51..0000000000 --- a/backends/symbian/UIQ2/ScummVM.rss +++ /dev/null @@ -1,46 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -// ScummVM.RSS - -NAME SCUM - -// Include definitions of resource STRUCTS used by this -// resource script -#include -#include "..\src\Scummvm.hrh" -// Include the standard Eikon resource ids -#include - - -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF16 { buf=""; } - -RESOURCE EIK_APP_INFO - { - } - diff --git a/backends/symbian/UIQ2/ScummVM_UIQ2.mmp.in b/backends/symbian/UIQ2/ScummVM_UIQ2.mmp.in deleted file mode 100644 index 9b2e432b19..0000000000 --- a/backends/symbian/UIQ2/ScummVM_UIQ2.mmp.in +++ /dev/null @@ -1,106 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC UIQ MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET SCUMMVM.APP -TARGETPATH system\apps\ScummVM -TARGETTYPE app - -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -RESOURCE ScummVM.rss -EPOCSTACKSIZE 0x80008000 // this enables ECompXL app compression -AIF ScummVm.Aif ..\res\ ScummVmAif.rss c16 ScummL.bmp ScummLM.bmp ScummS.bmp ScummSM.bmp -UID 0x100039ce 0x101f9b57 - -MACRO UIQ -MACRO EPOC_AS_APP - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -#if !defined(WINS) -STATICLIBRARY egcc.lib // for __fixunsdfsi -#endif - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\..\ - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries - -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib apgrfx.lib -LIBRARY gdi.lib hal.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib -LIBRARY qikctl.lib bafl.lib - -START WINS -WIN32_LIBRARY lldiv.obj llmul.obj llshl.obj -END - diff --git a/backends/symbian/UIQ2/Vibration.sis b/backends/symbian/UIQ2/Vibration.sis deleted file mode 100644 index 7cd9d33f15..0000000000 Binary files a/backends/symbian/UIQ2/Vibration.sis and /dev/null differ diff --git a/backends/symbian/UIQ2/chkstk.obj b/backends/symbian/UIQ2/chkstk.obj deleted file mode 100644 index 1df42b21c3..0000000000 Binary files a/backends/symbian/UIQ2/chkstk.obj and /dev/null differ diff --git a/backends/symbian/UIQ2/lldiv.obj b/backends/symbian/UIQ2/lldiv.obj deleted file mode 100644 index 60d7c98660..0000000000 Binary files a/backends/symbian/UIQ2/lldiv.obj and /dev/null differ diff --git a/backends/symbian/UIQ2/llmul.obj b/backends/symbian/UIQ2/llmul.obj deleted file mode 100644 index c6416030a3..0000000000 Binary files a/backends/symbian/UIQ2/llmul.obj and /dev/null differ diff --git a/backends/symbian/UIQ2/llshl.obj b/backends/symbian/UIQ2/llshl.obj deleted file mode 100644 index 30c5749d83..0000000000 Binary files a/backends/symbian/UIQ2/llshl.obj and /dev/null differ diff --git a/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg b/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg deleted file mode 100644 index 2ebf7580f9..0000000000 --- a/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg +++ /dev/null @@ -1,26 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM UIQ2"},(0x101f9b57),0,80,3 - -; Platform type -(0x101F617B), 2, 0, 0, {"UIQ20ProductID"} - -; Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg b/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg deleted file mode 100644 index a07149b702..0000000000 --- a/backends/symbian/UIQ2/scummvm-CVS-SymbianUIQ2_SE.pkg +++ /dev/null @@ -1,31 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - -; Languages -;&EN - -; UID is the app's UID -#{"ScummVM SE"},(0x101f9b57),0,80,3 - -; Platform type -(0x101F617B), 2, 0, 0, {"UIQ20ProductID"} - -; Application, AIF & Resource file -"\epoc32\release\armi\urel\ScummVM.app"-"!:\system\apps\ScummVM\ScummVM.app" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.aif"-"!:\system\apps\ScummVM\ScummVM.aif" -"\epoc32\data\z\system\apps\ScummVM\ScummVM.rsc"-"!:\system\apps\ScummVM\ScummVM.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"!:\system\apps\ScummVM\scummvm.ini",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stdout.txt",FILENULL -""-"!:\system\apps\ScummVM\scummvm.stderr.txt",FILENULL -""-"!:\system\apps\ScummVM\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. - -; add extra Vibration lib for P800, will be ignored during all other installs -IF MachineUID = 0x101F408B -@"Vibration.sis", (0x101F94A3) -ENDIF \ No newline at end of file diff --git a/backends/symbian/UIQ3/BLD.INF.in b/backends/symbian/UIQ3/BLD.INF.in deleted file mode 100644 index 9782901d6a..0000000000 --- a/backends/symbian/UIQ3/BLD.INF.in +++ /dev/null @@ -1,11 +0,0 @@ -PRJ_PLATFORMS -WINS ARMI GCCE WINSCW THUMB - -PRJ_MMPFILES -//START_AUTO_PROJECTS// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_PROJECTS// - -.\ScummVM_UIQ3.mmp diff --git a/backends/symbian/UIQ3/ScummVM.rss b/backends/symbian/UIQ3/ScummVM.rss deleted file mode 100644 index 9430f4a2ba..0000000000 --- a/backends/symbian/UIQ3/ScummVM.rss +++ /dev/null @@ -1,49 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id: ScummVM.rss,v 1.1 2006/06/01 19:00:29 anotherguest Exp $ - */ - -// ScummVM.RSS - -NAME SCUM - -// Include definitions of resource STRUCTS used by this -// resource script -#include -#include -#include "..\src\Scummvm.hrh" -// Include the standard Eikon resource ids -#include - - -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF16 { buf=""; } - -RESOURCE EIK_APP_INFO - { - } - -#include - diff --git a/backends/symbian/UIQ3/ScummVM_UIQ3.mmp.in b/backends/symbian/UIQ3/ScummVM_UIQ3.mmp.in deleted file mode 100644 index 170140848f..0000000000 --- a/backends/symbian/UIQ3/ScummVM_UIQ3.mmp.in +++ /dev/null @@ -1,125 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -// -// EPOC UIQ MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET SCUMMVM.exe -//TARGETPATH sys\bin -TARGETTYPE exe - -START RESOURCE ScummVM_reg.rss -TARGETPATH \private\10003a3f\apps -END - -START RESOURCE ScummVM_loc.rss -TARGETPATH \Resource\Apps -LANG SC -END - -SOURCEPATH . -START RESOURCE ScummVM.rss -HEADER -TARGETPATH \Resource\Apps -LANG SC -END - -EPOCSTACKSIZE 0x0000FFFF -EPOCHEAPSIZE 0xFA000 0xfA0000 - -START BITMAP ScummVM.mbm -TARGETPATH \Resource\Apps -SOURCEPATH ..\res -// Source Color-depth Source-bitmap-list -// c denotes whether the bitmap is a colour bitmap and the digits represent the -// colour-depth of the bitmap and the bitmap mask respectively -SOURCE c24 ScummSmall.bmp -SOURCE 8 ScummSmallMask.bmp -SOURCE c24 ScummLarge.bmp -SOURCE 8 ScummLargeMask.bmp -SOURCE c24 ScummxLarge.bmp -SOURCE 8 ScummxLargeMask.bmp -END -UID 0x100039ce 0xA0000657 - -MACRO UIQ -MACRO UIQ3 -MACRO EPOC_AS_APP - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** Static Libraries - -STATICLIBRARY esdl.lib - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\engines -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl ..\..\..\sound - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\base - -//START_AUTO_OBJECTS_BASE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_BASE_// - -SOURCEPATH ..\..\..\ - -// backend EPOC/SDL/ESDL specific includes -SOURCE backends\sdl\events.cpp -SOURCE backends\sdl\graphics.cpp -SOURCE backends\sdl\sdl.cpp -SOURCE backends\fs\symbian\symbian-fs.cpp -SOURCE backends\symbian\src\SymbianOS.cpp -SOURCE backends\symbian\src\SymbianActions.cpp -SOURCE backends\symbian\src\ScummApp.cpp - -SOURCE gui\Key.cpp -SOURCE gui\KeysDialog.cpp -SOURCE gui\Actions.cpp - -// *** Dynamic Libraries - -LIBRARY cone.lib eikcore.lib -LIBRARY euser.lib apparc.lib fbscli.lib -LIBRARY estlib.lib apgrfx.lib -LIBRARY gdi.lib hal.lib bitgdi.lib -LIBRARY mediaclientaudiostream.lib efsrv.lib ws32.lib -LIBRARY qikctl.lib -library qikcore.lib bafl.lib eikcoctl.lib \ No newline at end of file diff --git a/backends/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg deleted file mode 100644 index 3a47591b0a..0000000000 --- a/backends/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg +++ /dev/null @@ -1,33 +0,0 @@ -;;; -;;; ScummVM .PKG file for .SIS gegeration -;;; - - -; List of localised vendor names - one per language. At least one must be provided (English [EN]). -; List must correspond to list of languages specified elsewhere in the .pkg -%{"ScummVM"} -; The non-localised, globally unique vendor name (mandatory) -:"ScummVM" - -; UID is the app's UID -#{"ScummVM UIQ3"},(0xA0000657),0,90,0 - -; ProductID for UIQ 3.0 -; Product/platform version UID, Major, Minor, Build, Product ID -(0x101F6300), 3, 0, 0, {"UIQ30ProductID"} - -; Application, AIF & Resource file -"\uiq3\epoc32\release\gcce\urel\ScummVM.exe"- "!:\sys\bin\ScummVM.exe" -"\uiq3\epoc32\data\z\resource\apps\ScummVM.rsc"- "!:\resource\apps\ScummVM.rsc" -"\uiq3\epoc32\Data\Z\resource\apps\scummvm_loc.rsc"- "!:\resource\apps\scummvm_loc.rsc" -"\uiq3\epoc32\data\Z\resource\APPS\scummvm.MBM"- "!:\resource\apps\scummvm.MBM" -"\uiq3\epoc32\data\z\private\10003a3f\apps\scummvm_reg.rsc"-"!:\private\10003a3f\import\apps\scummvm_reg.rsc" - -; Config/log files: 'empty' will automagically be removed on uninstall -""-"c:\private\A0000657\scummvm.ini",FILENULL -""-"c:\private\A0000657\scummvm.stdout.txt",FILENULL -""-"c:\private\A0000657\scummvm.stderr.txt",FILENULL -""-"c:\private\A0000657\sdl.ini",FILENULL - -; This install layout will let you upgrade to newer versions wihout loss of scummvm.ini. -; It will remove the config file, std***.txt files & dirs on uninstall. \ No newline at end of file diff --git a/backends/symbian/UIQ3/scummvm_loc.rss b/backends/symbian/UIQ3/scummvm_loc.rss deleted file mode 100644 index 1b068a1c2c..0000000000 --- a/backends/symbian/UIQ3/scummvm_loc.rss +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include - -// This file localise the applications icons and caption -RESOURCE LOCALISABLE_APP_INFO - { - caption_and_icon = - { - CAPTION_AND_ICON_INFO - { - // The caption text is defined in the rls file - caption = "ScummVM"; - // Icons are used to represent applications in the - // application launcher and application title bar. - // The number_of_icons value identifies how many icons - // that exist in the icon_file. - number_of_icons = 3; - // Using the application icons. - icon_file = "\\Resource\\Apps\\ScummVM.mbm"; - } - }; - - view_list = - { - VIEW_DATA - { - uid = 0x10000001; - screen_mode = 0; - caption_and_icon = CAPTION_AND_ICON_INFO - { - }; - }, - VIEW_DATA - { - uid = 0x10000001; - screen_mode = EQikScreenModeLandscape; - caption_and_icon = CAPTION_AND_ICON_INFO - { - }; - }, - VIEW_DATA - { - uid = 0x10000001; - screen_mode = EQikScreenModeSmallPortrait; - caption_and_icon = CAPTION_AND_ICON_INFO - { - }; - }, - VIEW_DATA - { - uid = 0x10000001; - screen_mode = EQikScreenModeSmallLandscape; - caption_and_icon = CAPTION_AND_ICON_INFO - { - }; - } - }; - } - diff --git a/backends/symbian/UIQ3/scummvm_reg.rss b/backends/symbian/UIQ3/scummvm_reg.rss deleted file mode 100644 index df99094b2e..0000000000 --- a/backends/symbian/UIQ3/scummvm_reg.rss +++ /dev/null @@ -1,18 +0,0 @@ -// All registration files need to #include appinfo.rh. -#include - -// All registration files must define UID2, which is always -// KUidAppRegistrationResourceFile, and UID3, which is the application's UID. -UID2 KUidAppRegistrationResourceFile -UID3 0xA0000657 // application UID - -// Registration file need to containo an APP_REGISTRATION_INFO resource that -// minimally needs to provide the name of the application binary (using the -// app_file statement). -RESOURCE APP_REGISTRATION_INFO - { - app_file = "ScummVM"; // filename of application binary (minus extension) - // Specify the location of the localisable icon/caption definition file - localisable_resource_file = "\\Resource\\Apps\\ScummVM_loc"; - } - diff --git a/backends/symbian/mmp/scummvm_agi.mmp.in b/backends/symbian/mmp/scummvm_agi.mmp.in deleted file mode 100644 index 8dcc52f05d..0000000000 --- a/backends/symbian/mmp/scummvm_agi.mmp.in +++ /dev/null @@ -1,55 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_agi.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\agi - -//START_AUTO_OBJECTS_AGI_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_AGI_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_base.mmp.in b/backends/symbian/mmp/scummvm_base.mmp.in deleted file mode 100644 index 3535621934..0000000000 --- a/backends/symbian/mmp/scummvm_base.mmp.in +++ /dev/null @@ -1,111 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_base.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them! -//START_AUTO_MACROS_MASTER// - - // empty base file, will be updated by Perl build scripts - - // list of possible MACROs: (will be replaced when generating scummvm_base.mmp) - //MACRO USE_ZLIB // LIB:zlib.lib - //MACRO USE_MAD // LIB:libmad.lib - //MACRO USE_TREMOR // LIB:libtremor.lib - //MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib - //MACRO DISABLE_SCUMM_7_8 - //MACRO DISABLE_SCUMM_HE - //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib - //MACRO DISABLE_SIMON // LIB:scummvm_simon.lib - //MACRO DISABLE_SKY // LIB:scummvm_sky.lib - //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib - //MACRO DISABLE_GOB // LIB:scummvm_gob.lib - //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib - //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib - //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib - //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib - //MACRO DISABLE_LURE // LIB:scummvm_lure.lib - //MACRO DISABLE_CINE // LIB:scummvm_cine.lib - //MACRO DISABLE_AGI // LIB:scummvm_cine.lib - -//STOP_AUTO_MACROS_MASTER// - -// *** Include paths - -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound -USERINCLUDE ..\..\..\backends\fs ..\src ..\..\..\backends\sdl - -SYSTEMINCLUDE \epoc32\include\ESDL -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include\tremor -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h - -// *** SOURCE files - -SOURCEPATH ..\..\..\common -//START_AUTO_OBJECTS_COMMON_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_COMMON_// - -SOURCEPATH ..\..\..\graphics -//START_AUTO_OBJECTS_GRAPHICS_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_GRAPHICS_// - -SOURCEPATH ..\..\..\gui -//START_AUTO_OBJECTS_GUI_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_GUI_// -// these next three will go into gui\modules.mk and will end up in START_AUTO_OBJECTS_GUI -// for now they are in the phone platform specific MMP files because of library dependency probs during linking -//SOURCE Key.cpp -//SOURCE KeysDialog.cpp -//SOURCE Actions.cpp - -SOURCEPATH ..\..\..\sound -//START_AUTO_OBJECTS_SOUND_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SOUND_// - -sourcepath ..\..\.. -// backend specific includes -SOURCE backends\fs\fs.cpp -// backend specific includes diff --git a/backends/symbian/mmp/scummvm_cine.mmp.in b/backends/symbian/mmp/scummvm_cine.mmp.in deleted file mode 100644 index 8385d93a5a..0000000000 --- a/backends/symbian/mmp/scummvm_cine.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM CINE -// - -// *** Definitions - -TARGET scummvm_CINE.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\cine - -//START_AUTO_OBJECTS_CINE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_CINE_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_gob.mmp.in b/backends/symbian/mmp/scummvm_gob.mmp.in deleted file mode 100644 index a99d900da0..0000000000 --- a/backends/symbian/mmp/scummvm_gob.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_gob.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\gob - -//START_AUTO_OBJECTS_GOB_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_GOB_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_kyra.mmp.in b/backends/symbian/mmp/scummvm_kyra.mmp.in deleted file mode 100644 index 60703336ca..0000000000 --- a/backends/symbian/mmp/scummvm_kyra.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM Kyra -// - -// *** Definitions - -TARGET scummvm_kyra.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\kyra - -//START_AUTO_OBJECTS_KYRA_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_KYRA_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_lure.mmp.in b/backends/symbian/mmp/scummvm_lure.mmp.in deleted file mode 100644 index 55445358bb..0000000000 --- a/backends/symbian/mmp/scummvm_lure.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_lure.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\lure - -//START_AUTO_OBJECTS_LURE_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_LURE_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_queen.mmp.in b/backends/symbian/mmp/scummvm_queen.mmp.in deleted file mode 100644 index c1b3c03a45..0000000000 --- a/backends/symbian/mmp/scummvm_queen.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_queen.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\queen - -//START_AUTO_OBJECTS_QUEEN_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_QUEEN_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_saga.mmp.in b/backends/symbian/mmp/scummvm_saga.mmp.in deleted file mode 100644 index 8ee0afd197..0000000000 --- a/backends/symbian/mmp/scummvm_saga.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM Saga -// - -// *** Definitions - -TARGET scummvm_saga.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\saga - -//START_AUTO_OBJECTS_SAGA_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SAGA_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_scumm.mmp.in b/backends/symbian/mmp/scummvm_scumm.mmp.in deleted file mode 100644 index fd9f6ccb6d..0000000000 --- a/backends/symbian/mmp/scummvm_scumm.mmp.in +++ /dev/null @@ -1,70 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_scumm.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\scumm - -//START_AUTO_OBJECTS_SCUMM_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SCUMM_// - -//START_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8// - -//START_AUTO_OBJECTS_SCUMM_DISABLE_HE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SCUMM_DISABLE_HE// - -// *** Include paths - -USERINCLUDE ..\..\..\engines ..\..\..\engines\scumm\smush ..\..\..\engines\scumm\insane -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src - -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include\libc -SYSTEMINCLUDE \epoc32\include -SYSTEMINCLUDE ..\src // for portdefs.h diff --git a/backends/symbian/mmp/scummvm_simon.mmp.in b/backends/symbian/mmp/scummvm_simon.mmp.in deleted file mode 100644 index 4587392b20..0000000000 --- a/backends/symbian/mmp/scummvm_simon.mmp.in +++ /dev/null @@ -1,55 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_simon.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\simon - -//START_AUTO_OBJECTS_SIMON_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SIMON_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include\ZLIB // before \epoc32\include because symbian already has older version -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_sky.mmp.in b/backends/symbian/mmp/scummvm_sky.mmp.in deleted file mode 100644 index 46097372a3..0000000000 --- a/backends/symbian/mmp/scummvm_sky.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_sky.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\sky - -//START_AUTO_OBJECTS_SKY_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SKY_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines ..\..\..\engines\sky\music -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_sword1.mmp.in b/backends/symbian/mmp/scummvm_sword1.mmp.in deleted file mode 100644 index 3d6cf3f501..0000000000 --- a/backends/symbian/mmp/scummvm_sword1.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_sword1.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\sword1 - -//START_AUTO_OBJECTS_SWORD1_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SWORD1_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/mmp/scummvm_sword2.mmp.in b/backends/symbian/mmp/scummvm_sword2.mmp.in deleted file mode 100644 index dbb0bce879..0000000000 --- a/backends/symbian/mmp/scummvm_sword2.mmp.in +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// -// EPOC MMP makefile project for ScummVM -// - -// *** Definitions - -TARGET scummvm_sword2.lib -TARGETTYPE lib -OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp -OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings - -//START_AUTO_MACROS_SLAVE// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_MACROS_SLAVE// - -// *** SOURCE files - -SOURCEPATH ..\..\..\engines\sword2 - -//START_AUTO_OBJECTS_SWORD2_// - - // empty base file, will be updated by Perl build scripts - -//STOP_AUTO_OBJECTS_SWORD2_// - -// *** Include paths - -USERINCLUDE ..\..\..\engines -USERINCLUDE ..\..\.. ..\..\..\common ..\..\..\gui ..\..\..\sound ..\src -SYSTEMINCLUDE \epoc32\include \epoc32\include\libc ..\src diff --git a/backends/symbian/res/ScummS.bmp b/backends/symbian/res/ScummS.bmp deleted file mode 100644 index 065b0ce74e..0000000000 Binary files a/backends/symbian/res/ScummS.bmp and /dev/null differ diff --git a/backends/symbian/res/ScummSmall.bmp b/backends/symbian/res/ScummSmall.bmp deleted file mode 100644 index ce8013ad2d..0000000000 Binary files a/backends/symbian/res/ScummSmall.bmp and /dev/null differ diff --git a/backends/symbian/res/ScummVmAif.rss b/backends/symbian/res/ScummVmAif.rss deleted file mode 100644 index ad222e550b..0000000000 --- a/backends/symbian/res/ScummVmAif.rss +++ /dev/null @@ -1,43 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include - - -RESOURCE AIF_DATA - { - app_uid= 0x101f9b57; - // - hidden=KAppNotHidden; - embeddability=KAppNotEmbeddable; - caption_list= - { - CAPTION { code=ELangEnglish; caption="ScummVM"; }, - CAPTION { code=ELangAmerican; caption="ScummVM"; }, - CAPTION { code=ELangOther; caption="ScummVM"; } - }; - // - num_icons=2; - } - - - diff --git a/backends/symbian/res/scummL.bmp b/backends/symbian/res/scummL.bmp deleted file mode 100644 index a47f3c9da4..0000000000 Binary files a/backends/symbian/res/scummL.bmp and /dev/null differ diff --git a/backends/symbian/res/scummLarge.bmp b/backends/symbian/res/scummLarge.bmp deleted file mode 100644 index 400dca6dcb..0000000000 Binary files a/backends/symbian/res/scummLarge.bmp and /dev/null differ diff --git a/backends/symbian/res/scummLargeMask.bmp b/backends/symbian/res/scummLargeMask.bmp deleted file mode 100644 index c13a546122..0000000000 Binary files a/backends/symbian/res/scummLargeMask.bmp and /dev/null differ diff --git a/backends/symbian/res/scummLm.bmp b/backends/symbian/res/scummLm.bmp deleted file mode 100644 index 2632b9111f..0000000000 Binary files a/backends/symbian/res/scummLm.bmp and /dev/null differ diff --git a/backends/symbian/res/scummSm.bmp b/backends/symbian/res/scummSm.bmp deleted file mode 100644 index 62957a8274..0000000000 Binary files a/backends/symbian/res/scummSm.bmp and /dev/null differ diff --git a/backends/symbian/res/scummSmallMask.bmp b/backends/symbian/res/scummSmallMask.bmp deleted file mode 100644 index b407894206..0000000000 Binary files a/backends/symbian/res/scummSmallMask.bmp and /dev/null differ diff --git a/backends/symbian/res/scummvm.rss b/backends/symbian/res/scummvm.rss deleted file mode 100644 index 684e42f4e5..0000000000 --- a/backends/symbian/res/scummvm.rss +++ /dev/null @@ -1,62 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - */ - -// ScummVM.RSS - -NAME SCUM - -// Include definitions of resource STRUCTS used by this -// resource script -#include -#include "..\src\Scummvm.hrh" -// Include the standard Eikon resource ids -#include - - -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF16 { buf=""; } - -RESOURCE EIK_APP_INFO - { - menubar = r_scum_menubar; - } - -RESOURCE MENU_BAR r_scum_menubar // *** Menu bar -{ - titles = - { - MENU_TITLE { menu_pane = r_scum_menu; txt = "ScummVM"; } - }; -} - -RESOURCE MENU_PANE r_scum_menu // *** Submenu -{ - items = - { - - MENU_ITEM{command = EEikCmdExit;txt = "Exit";} - }; -} diff --git a/backends/symbian/res/scummxLarge.bmp b/backends/symbian/res/scummxLarge.bmp deleted file mode 100644 index cf590d17d4..0000000000 Binary files a/backends/symbian/res/scummxLarge.bmp and /dev/null differ diff --git a/backends/symbian/res/scummxLargeMask.bmp b/backends/symbian/res/scummxLargeMask.bmp deleted file mode 100644 index 1c3de48e3e..0000000000 Binary files a/backends/symbian/res/scummxLargeMask.bmp and /dev/null differ diff --git a/backends/symbian/src/ScummApp.cpp b/backends/symbian/src/ScummApp.cpp deleted file mode 100644 index 4315c15065..0000000000 --- a/backends/symbian/src/ScummApp.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "backends/symbian/src/ScummApp.h" -#include "backends/symbian/src/ScummVM.hrh" - -#define _PAGESIZE_ 0x1000 - -#if defined (__WINS__) && !defined (__SERIES60_30__) && !defined (UIQ3) -extern "C" int _chkstk(int /*a*/) { -_asm { - push ecx - cmp eax,_PAGESIZE_ - lea ecx,[esp] + 8 - jb short lastpage - - probepages: - sub ecx,_PAGESIZE_ - sub eax,_PAGESIZE_ - - test dword ptr [ecx],eax - - cmp eax,_PAGESIZE_ - jae short probepages - - lastpage: - sub ecx,eax - mov eax,esp - - test dword ptr [ecx],eax - - mov esp,ecx - - mov ecx,dword ptr [eax] - mov eax,dword ptr [eax + 4] - - push eax - ret - } - return 1; -} -#endif - -#ifdef EPOC_AS_APP - -// this function is called automatically by the SymbianOS to deliver the new CApaApplication object -#if !defined (UIQ3) && !defined (S60V3) -EXPORT_C -#endif -CApaApplication* NewApplication() { - // Return pointer to newly created CQMApp - return new CScummApp; -} - -#if defined (UIQ3) || defined (S60V3) -#include -// E32Main() contains the program's start up code, the entry point for an EXE. -GLDEF_C TInt E32Main() { - return EikStart::RunApplication(NewApplication); -} -#endif - -#endif // EPOC_AS_APP - -#if !defined (UIQ3) && !defined (S60V3) -GLDEF_C TInt E32Dll(TDllReason) { - return KErrNone; -} -#endif - -CScummApp::CScummApp() { -} - -CScummApp::~CScummApp() { -} - -#if defined (UIQ3) -#include -/** - * Returns the resource id to be used to declare the views supported by this UIQ3 app - * @return TInt, resource id - */ -TInt CScummApp::ViewResourceId() { - return R_SDL_VIEW_UI_CONFIGURATIONS; -} -#endif - -/** - * Responsible for returning the unique UID of this application - * @return unique UID for this application in a TUid - **/ -TUid CScummApp::AppDllUid() const { - return TUid::Uid(ScummUid); -} - -///////////////////////////////////////////////////////////////////////////////////////////////// - - diff --git a/backends/symbian/src/ScummApp.h b/backends/symbian/src/ScummApp.h deleted file mode 100644 index bd81edaa83..0000000000 --- a/backends/symbian/src/ScummApp.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#ifndef ScummAPPH -#define ScummAPPH - -#include -#include -#include - -#if defined (EPOC_AS_APP) && !defined (UIQ3) && !defined (S60V3) -#include "ECompXL.h" -#endif - -class CScummApp : public CSDLApp { -public: - CScummApp(); - ~CScummApp(); -#if defined (UIQ3) - /** - * Returns the resource id to be used to declare the views supported by this UIQ3 app - * @return TInt, resource id - */ - TInt ViewResourceId(); -#endif - TUid AppDllUid() const; -#if defined (EPOC_AS_APP) && !defined (UIQ3) && !defined (S60V3) - TECompXL iECompXL; -#endif -}; -#endif - - diff --git a/backends/symbian/src/ScummVMApp.cpp b/backends/symbian/src/ScummVMApp.cpp deleted file mode 100644 index e30cb62e87..0000000000 --- a/backends/symbian/src/ScummVMApp.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "ScummVMapp.h" -#include -#include -#include -#include - -EXPORT_C CApaApplication *NewApplication() { - return (new CScummVM); -} - -CScummVM::CScummVM() { -} - -CScummVM::~CScummVM() { -} - -CApaDocument *CScummVM::CreateDocumentL() { - return new (ELeave)CScummVMDoc(*this); -} - -TUid CScummVM::AppDllUid() const { - return TUid::Uid(0x101f9b57); -} - -CScummVMDoc::CScummVMDoc(CEikApplication &aApp) : CEikDocument(aApp) { -} - -CScummVMDoc::~CScummVMDoc() { -} - -CEikAppUi *CScummVMDoc::CreateAppUiL() { - return new (ELeave)CScummVMUi; -} - -void CScummVMUi::HandleForegroundEventL(TBool aForeground) { - if(aForeground) { - BringUpEmulatorL(); - } -} - -CScummVMUi::CScummVMUi() { -} - -CScummVMUi::~CScummVMUi() { - if(iWatcher) { - iThreadWatch.LogonCancel(iWatcher->iStatus); - iWatcher->Cancel(); - } - - delete iWatcher; - - iThreadWatch.Close(); -} - -void CScummVMUi::ConstructL() { - BaseConstructL(); - TBuf<128> startFile; - startFile = iEikonEnv->EikAppUi()->Application()->AppFullName(); - TParse parser; - parser.Set(startFile,NULL,NULL); - - startFile = parser.DriveAndPath(); -#ifndef __WINS__ - startFile.Append( _L("ScummVM.exe")); -#else - startFile.Append( _L("ScummVM.dll")); -#endif - CApaCommandLine *cmdLine = CApaCommandLine::NewLC(startFile); - RApaLsSession lsSession; - - lsSession.Connect(); - CleanupClosePushL(lsSession); - lsSession.StartApp(*cmdLine, iThreadId); - - CleanupStack::PopAndDestroy();//close lsSession - CleanupStack::PopAndDestroy(cmdLine); - - User::After(500000);// Let the application start - - TApaTaskList taskList(iEikonEnv->WsSession()); - - TApaTask myTask = taskList.FindApp(TUid::Uid(0x101f9b57)); - myTask.SendToBackground(); - - TApaTask exeTask = taskList.FindByPos(0); - - iExeWgId=exeTask.WgId(); - exeTask.BringToForeground(); - - if(iExeWgId == myTask.WgId()) { // Should n't be the same - Exit(); - } - if(iThreadWatch.Open(iThreadId) == KErrNone) { - iWatcher = new (ELeave)CScummWatcher; - iWatcher->iAppUi = this; - iThreadWatch.Logon(iWatcher->iStatus); - } -} - -CScummWatcher::CScummWatcher() : CActive(EPriorityStandard) { - CActiveScheduler::Add(this); - - iStatus = KRequestPending; - SetActive(); -} - -CScummWatcher::~CScummWatcher() { -} - -void CScummWatcher::DoCancel() { -} - -void CScummWatcher::RunL() { - iAppUi->HandleCommandL(EEikCmdExit); -} - -void CScummVMUi::BringUpEmulatorL() { - RThread thread; - - if(thread.Open(iThreadId) == KErrNone) { - thread.Close(); - TApaTask apaTask(iEikonEnv->WsSession()); - apaTask.SetWgId(iExeWgId); - apaTask.BringToForeground(); - } else { - iExeWgId = -1; - Exit(); - } -} - -void CScummVMUi::HandleCommandL(TInt aCommand) { - switch(aCommand) { - case EEikCmdExit: - { - RThread thread; - if(thread.Open(iThreadId) == KErrNone) { - thread.Terminate(0); - thread.Close(); - } - Exit(); - } - break; - } -} - -GLDEF_C TInt E32Dll(TDllReason) { - return KErrNone; -} diff --git a/backends/symbian/src/ScummVMApp.h b/backends/symbian/src/ScummVMApp.h deleted file mode 100644 index 0c422ad178..0000000000 --- a/backends/symbian/src/ScummVMApp.h +++ /dev/null @@ -1,82 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef ScummVMapph -#define ScummVMapph - -#include -#include -#include -#include -#include -#include - -class CScummVM : public CEikApplication { -public: - CScummVM(); - ~CScummVM(); - - CApaDocument *CreateDocumentL(); - TUid AppDllUid() const; -}; - - -#include - -class CScummVMDoc : public CEikDocument { -public: - CScummVMDoc(CEikApplication &aApplicaiton); - ~CScummVMDoc(); - - CEikAppUi *CreateAppUiL(); - void ConstructL(); -}; - -#include -class CScummVMUi; -class CScummWatcher : public CActive { -public: - CScummWatcher(); - ~CScummWatcher(); - - void DoCancel(); - void RunL(); - CScummVMUi *iAppUi; -}; - -class CScummVMUi : public CEikAppUi { -public: - CScummVMUi(); - ~CScummVMUi(); - - void ConstructL(); - void HandleCommandL(TInt aCommand); - void HandleForegroundEventL(TBool aForeground); - void BringUpEmulatorL(); - -private: - TThreadId iThreadId; - TInt iExeWgId; - RThread iThreadWatch; - CScummWatcher *iWatcher; -}; -#endif diff --git a/backends/symbian/src/ScummVm.hrh b/backends/symbian/src/ScummVm.hrh deleted file mode 100644 index 4966b41e0b..0000000000 --- a/backends/symbian/src/ScummVm.hrh +++ /dev/null @@ -1,30 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef ScummHRH -#define ScummHRH -#if defined (UIQ3) || defined (S60V3) -#define ScummUid 0xA0000657 -#else -#define ScummUid 0x101f9b57 -#endif -#endif diff --git a/backends/symbian/src/SymbianActions.cpp b/backends/symbian/src/SymbianActions.cpp deleted file mode 100644 index ff85266af5..0000000000 --- a/backends/symbian/src/SymbianActions.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" -#include "backends/symbian/src/SymbianActions.h" - -#include "gui/message.h" -#include "scumm/scumm.h" -#include "common/config-manager.h" - -#include - -namespace GUI { - -// SumthinWicked says: we either split our Actions like WinCE did with Pocket/Smartphone -// or we put them in this file separated by #ifdefs, this one is up to you, AnotherGuest :) - -const Common::String actionNames[] = { - "Up", - "Down", - "Left", - "Right", - "Left Click", - "Right Click", - "Save", - "Skip", - "Zone", - "FT Cheat", - "Swap character", - "Skip text", - "Pause", - "Quit" -}; - -#ifdef UIQ -static const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, SDLK_F1, SDLK_F2, SDLK_F5, SDLK_PAGEDOWN, 0, 0, 0, SDLK_PAGEUP, 0, 0}; -#elif defined (S60) -const int ACTIONS_DEFAULT[ACTION_LAST] = { 0, 0, 0, 0, 0, 0, '*', '#', '9',0,0,0,0,0}; -#elif defined (S90) -const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, 0, 0, SDLK_MENU, SDLK_ESCAPE, 0, 0,0,0,0,0}; -#else -const int ACTIONS_DEFAULT[ACTION_LAST] = { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_F1, SDLK_F2, SDLK_MENU, SDLK_ESCAPE, 0, 0, 0, 0, 0, 0}; -#endif - -// creator function according to Factory Pattern -void SymbianActions::init() { - _instance = new SymbianActions(); -} - - -Common::String SymbianActions::actionName(ActionType action) { - return actionNames[action]; -} - -int SymbianActions::size() { - return ACTION_LAST; -} - -Common::String SymbianActions::domain() { - return Common::ConfigManager::kApplicationDomain; -} - -int SymbianActions::version() { - return ACTION_VERSION; -} - -SymbianActions::SymbianActions() - : Actions() { - int i; - - for (i = 0; i < ACTION_LAST; i++) { - _action_mapping[i] = ACTIONS_DEFAULT[i]; - _action_enabled[i] = false; - } - -} - -void SymbianActions::initInstanceMain(OSystem *mainSystem) { - Actions::initInstanceMain(mainSystem); - - // Mouse Up - _action_enabled[ACTION_UP] = true; - - // Mouse Down - _action_enabled[ACTION_DOWN] = true; - - // Mouse Left - _action_enabled[ACTION_LEFT] = true; - - // Mouse Right - _action_enabled[ACTION_RIGHT] = true; - - // Left Click - _action_enabled[ACTION_LEFTCLICK] = true; - - // Right Click - _action_enabled[ACTION_RIGHTCLICK] = true; - - // Skip - _action_enabled[ACTION_SKIP] = true; - _key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE); -} - -void SymbianActions::initInstanceGame() { - Common::String gameid(ConfMan.get("gameid")); - bool is_simon = (strncmp(gameid.c_str(), "simon", 5) == 0); - bool is_sky = (strncmp(gameid.c_str(), "sky", 3) == 0); - bool is_queen = (strncmp(gameid.c_str(), "queen", 5) == 0); - bool is_gob = (strncmp(gameid.c_str(), "gob", 3) == 0); - bool is_ite = ((strncmp(gameid.c_str(), "ite", 3) == 0) || - (strncmp(gameid.c_str(), "ihnm", 4) == 0)); - - Actions::initInstanceGame(); - - // See if a right click mapping could be needed - if (is_sky || gameid == "samnmax" || is_gob) - _right_click_needed = true; - - // Initialize keys for different actions - // Save - if (is_simon || is_gob) - _action_enabled[ACTION_SAVE] = false; - else if (is_queen || is_ite) { - _action_enabled[ACTION_SAVE] = true; - _key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ and ITE - } else if (is_sky) { - _action_enabled[ACTION_SAVE] = true; - _key_action[ACTION_SAVE].setAscii(63); - } else { - _action_enabled[ACTION_SAVE] = true; - _key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key - } - - // Swap character - _action_enabled[ACTION_SWAPCHAR] = true; - _key_action[ACTION_SWAPCHAR].setAscii('b'); // b - - // Zone - _action_enabled[ACTION_ZONE] = true; - - // FT Cheat - _action_enabled[ACTION_FT_CHEAT] = true; - _key_action[ACTION_FT_CHEAT].setAscii(86); // shift-V - - // Skip text - _action_enabled[ACTION_SKIP_TEXT] = true; - if (is_queen) { - _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE); - } else { - _key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD); - } - - // Pause - _key_action[ACTION_PAUSE].setAscii(' '); - _action_enabled[ACTION_PAUSE] = true; - - // Quit - _action_enabled[ACTION_QUIT] = true; -} - - -SymbianActions::~SymbianActions() { -} - -bool SymbianActions::perform(ActionType /*action*/, bool /*pushed*/) { - - return false; -} - -} // namespace GUI diff --git a/backends/symbian/src/SymbianActions.h b/backends/symbian/src/SymbianActions.h deleted file mode 100644 index 5f435d5912..0000000000 --- a/backends/symbian/src/SymbianActions.h +++ /dev/null @@ -1,77 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001-2006 The ScummVM project - * - * This program 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. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef SYMBIANACTIONS_H -#define SYMBIANACTIONS_H - -#include "common/stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" -#include "gui/Key.h" -#include "gui/Actions.h" - -namespace GUI { - -#define ACTION_VERSION 6 - -enum actionType { - ACTION_UP = 0, - ACTION_DOWN, - ACTION_LEFT, - ACTION_RIGHT, - ACTION_LEFTCLICK, - ACTION_RIGHTCLICK, - ACTION_SAVE, - ACTION_SKIP, - ACTION_ZONE, - ACTION_FT_CHEAT, - ACTION_SWAPCHAR, - ACTION_SKIP_TEXT, - ACTION_PAUSE, - ACTION_QUIT, - ACTION_LAST -}; - -class SymbianActions : public Actions { -public: - // Actions - bool perform(ActionType action, bool pushed = true); - Common::String actionName(ActionType action); - int size(); - static void init(); - void initInstanceMain(OSystem *mainSystem); - void initInstanceGame(); - - // Action domain - Common::String domain(); - int version(); - - ~SymbianActions(); - -private: - SymbianActions(); - bool _right_click_needed; -}; - -} // namespace GUI - -#endif diff --git a/backends/symbian/src/SymbianOS.cpp b/backends/symbian/src/SymbianOS.cpp deleted file mode 100644 index b0b4486418..0000000000 --- a/backends/symbian/src/SymbianOS.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "backends/symbian/src/SymbianOS.h" -#include "backends/symbian/src/SymbianActions.h" -#include "common/config-manager.h" -#include "gui/Actions.h" -#include "gui/Key.h" -#include "gui/message.h" - -#include // for CEikonEnv::Static() @ Symbian::FatalError() -#include "ESDL/sdlapp.h" // for CSDLApp::GetExecutablePathCStr() @ Symbian::GetExecutablePath() - -////////// extern "C" /////////////////////////////////////////////////// - -extern Common::ConfigManager *g_config; - -namespace Symbian { - -// Show a simple Symbian Info win with Msg & exit -void FatalError(const char *msg) { - TPtrC8 msgPtr((const TUint8 *)msg); - TBuf<512> msg16Bit; - msg16Bit.Copy(msgPtr); - CEikonEnv::Static()->InfoWinL(_L("ScummVM Fatal Error"), msg16Bit); - - if (g_system) - g_system->quit(); -} - -// make this easily available everywhere -char* GetExecutablePath() -{ - return CSDLApp::GetExecutablePathCStr(); -} - -} // namespace Symbian { - -////////// OSystem_SDL_Symbian ////////////////////////////////////////// - -static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { - {"1x", "Fullscreen", GFX_NORMAL}, - {0, 0, 0} -}; - -bool OSystem_SDL_Symbian::hasFeature(Feature f) { - switch(f) { - case kFeatureFullscreenMode: - case kFeatureAspectRatioCorrection: - case kFeatureAutoComputeDirtyRects: - case kFeatureCursorHasPalette: -#ifdef USE_VIBRA_SE_PXXX - case kFeatureVibration: -#endif - return true; - - default: - return false; - } -} - -OSystem_SDL_Symbian::zoneDesc OSystem_SDL_Symbian::_zones[TOTAL_ZONES] = { - { 0, 0, 320, 145 }, - { 0, 145, 150, 55 }, - { 150, 145, 170, 55 } -}; -OSystem_SDL_Symbian::OSystem_SDL_Symbian() :_channels(0),_stereo_mix_buffer(0) { -} - -void OSystem_SDL_Symbian::initBackend() { - ConfMan.setBool("FM_high_quality", false); -#if !defined(S60) || defined(S60V3) // S60 has low quality as default - ConfMan.setBool("FM_medium_quality", true); -#else - ConfMan.setBool("FM_medium_quality", false); -#endif - ConfMan.setInt("joystick_num", 0); // Symbian OS should have joystick_num set to 0 in the ini file , but uiq devices might refuse opening the joystick - ConfMan.flushToDisk(); - - GUI::Actions::init(); - - OSystem_SDL::initBackend(); - - // Initialize global key mapping for Smartphones - GUI::Actions* actions = GUI::Actions::Instance(); - - actions->initInstanceMain(this); - actions->loadMapping(); - initZones(); -} - -OSystem_SDL_Symbian::~OSystem_SDL_Symbian() { - delete []_stereo_mix_buffer; -} - -int OSystem_SDL_Symbian::getDefaultGraphicsMode() const { - return GFX_NORMAL; -} - -const OSystem::GraphicsMode *OSystem_SDL_Symbian::getSupportedGraphicsModes() const { - return s_supportedGraphicsModes; -} - -// make sure we always go to normal, even if the string might be set wrong! -bool OSystem_SDL_Symbian::setGraphicsMode(const char * /*name*/) { - // let parent OSystem_SDL handle it - return OSystem_SDL::setGraphicsMode(getDefaultGraphicsMode()); -} - -void OSystem_SDL_Symbian::quitWithErrorMsg(const char *msg) { - - CEikonEnv::Static()->AlertWin(_L("quitWithErrorMsg()")) ; - - if (g_system) - g_system->quit(); -} - -/* - * SumthinWicked says: the stuff below is copied from common/scaler.cpp, - * so we can skip compiling the scalers. ESDL still needs 1x and the scaler - * architecture because we inherit from OSystem_SDL. - */ -int gBitFormat = 565; -void InitScalers(uint32 /*BitFormat*/) {} // called by OSystem_SDL functions, not relevant for ESDL - -/** - * Trivial 'scaler' - in fact it doesn't do any scaling but just copies the - * source to the destination. - */ -void Normal1x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, - int width, int height) { - while (height--) { - memcpy(dstPtr, srcPtr, 2 * width); - srcPtr += srcPitch; - dstPtr += dstPitch; - } -} - -bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) { - - // First save the proc and param - _sound_proc_param = param; - _sound_proc = proc; - SDL_AudioSpec desired; - SDL_AudioSpec obtained; - - memset(&desired, 0, sizeof(desired)); - - _samplesPerSec = 0; - - if (ConfMan.hasKey("output_rate")) - _samplesPerSec = ConfMan.getInt("output_rate"); - - if (_samplesPerSec <= 0) - _samplesPerSec = SAMPLES_PER_SEC; - - // Originally, we always used 2048 samples. This loop will produce the - // same result at 22050 Hz, and should hopefully produce something - // sensible for other frequencies. Note that it must be a power of two. - - uint32 samples = 0x8000; - - for (;;) { - if ((1000 * samples) / _samplesPerSec < 100) - break; - samples >>= 1; - } - - desired.freq = _samplesPerSec; - desired.format = AUDIO_S16SYS; - desired.channels = 2; - desired.samples = (uint16)samples; -#ifdef S60 - desired.callback = symbianMixCallback; - desired.userdata = this; -#else - desired.callback = proc; - desired.userdata = param; -#endif - if (SDL_OpenAudio(&desired, &obtained) != 0) { - warning("Could not open audio device: %s", SDL_GetError()); - return false; - } - // Note: This should be the obtained output rate, but it seems that at - // least on some platforms SDL will lie and claim it did get the rate - // even if it didn't. Probably only happens for "weird" rates, though. - _samplesPerSec = obtained.freq; - _channels = obtained.channels; - - // Need to create mixbuffer for stereo mix to downmix - if(_channels != 2) { - _stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values - } - - SDL_PauseAudio(0); - return true; -} - -/** - * The mixer callback function, passed on to OSystem::setSoundCallback(). - * This simply calls the mix() method. - */ -void OSystem_SDL_Symbian::symbianMixCallback(void *s, byte *samples, int len) { - static_cast (s)->symbianMix(samples,len); -} - - -/** - * Actual mixing implementation - */ -void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) { - // If not stereo then we need to downmix - if (_channels != 2) { - _sound_proc(_sound_proc_param, _stereo_mix_buffer, len * 2); - int16 *bitmixDst = (int16 *)samples; - int16 *bitmixSrc = (int16 *)_stereo_mix_buffer; - - for (int loop = len / 2; loop >= 0; loop --) { - *bitmixDst = (*bitmixSrc + *(bitmixSrc + 1)) >> 1; - bitmixDst++; - bitmixSrc += 2; - } - } else - _sound_proc(_sound_proc_param, samples, len); -} - -/** - * This is an implementation by the remapKey function - * @param SDL_Event to remap - * @param ScumVM event to modify if special result is requested - * @return true if Event has a valid return status - */ -bool OSystem_SDL_Symbian::remapKey(SDL_Event &ev, Event &event) { - if (GUI::Actions::Instance()->mappingActive() || ev.key.keysym.sym <= SDLK_UNKNOWN) - return false; - - for (TInt loop = 0; loop < GUI::ACTION_LAST; loop++) { - if (GUI::Actions::Instance()->getMapping(loop) == ev.key.keysym.sym && - GUI::Actions::Instance()->isEnabled(loop)) { - // Create proper event instead - switch(loop) { - case GUI::ACTION_UP: - if (ev.type == SDL_KEYDOWN) { - _km.y_vel = -1; - _km.y_down_count = 1; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_DOWN: - if(ev.type == SDL_KEYDOWN) { - _km.y_vel = 1; - _km.y_down_count = 1; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_LEFT: - if(ev.type == SDL_KEYDOWN) { - _km.x_vel = -1; - _km.x_down_count = 1; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_RIGHT: - if(ev.type == SDL_KEYDOWN) { - _km.x_vel = 1; - _km.x_down_count = 1; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_LEFTCLICK: - event.type = (ev.type == SDL_KEYDOWN ? EVENT_LBUTTONDOWN : EVENT_LBUTTONUP); - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_RIGHTCLICK: - event.type = (ev.type == SDL_KEYDOWN ? EVENT_RBUTTONDOWN : EVENT_RBUTTONUP); - fillMouseEvent(event, _km.x, _km.y); - - return true; - - case GUI::ACTION_ZONE: - if(ev.type == SDL_KEYDOWN) { - int i; - - for (i=0; i < TOTAL_ZONES; i++) - if (_km.x >= _zones[i].x && _km.y >= _zones[i].y && - _km.x <= _zones[i].x + _zones[i].width && _km.y <= _zones[i].y + _zones[i].height - ) { - _mouseXZone[i] = _km.x; - _mouseYZone[i] = _km.y; - break; - } - _currentZone++; - if (_currentZone >= TOTAL_ZONES) - _currentZone = 0; - event.type = EVENT_MOUSEMOVE; - fillMouseEvent(event, _mouseXZone[_currentZone], _mouseYZone[_currentZone]); - SDL_WarpMouse(event.mouse.x, event.mouse.y); - } - - return true; - - case GUI::ACTION_SAVE: - case GUI::ACTION_SKIP: - case GUI::ACTION_FT_CHEAT: - case GUI::ACTION_SKIP_TEXT: - case GUI::ACTION_PAUSE: - { - GUI::Key &key = GUI::Actions::Instance()->getKeyAction(loop); - ev.key.keysym.sym = (SDLKey)key.ascii(); - ev.key.keysym.scancode= key.keycode(); - ev.key.keysym.mod = (SDLMod)key.flags(); - - return false; - } - - case GUI::ACTION_QUIT: - { - GUI::MessageDialog alert("Do you want to quit ?", "Yes", "No"); - if (alert.runModal() == GUI::kMessageOK) - quit(); - - return true; - } - } - } - } - - return false; -} - -void OSystem_SDL_Symbian::setWindowCaption(const char *caption) { - OSystem_SDL::setWindowCaption(caption); - check_mappings(); -} - -void OSystem_SDL_Symbian::check_mappings() { - if (ConfMan.get("gameid").empty() || GUI::Actions::Instance()->initialized()) - return; - - GUI::Actions::Instance()->initInstanceGame(); -} - -void OSystem_SDL_Symbian::initZones() { - int i; - - _currentZone = 0; - - for (i = 0; i < TOTAL_ZONES; i++) { - _mouseXZone[i] = (_zones[i].x + (_zones[i].width / 2)); - _mouseYZone[i] = (_zones[i].y + (_zones[i].height / 2)); - } -} - - -/** Vibration support */ -#ifdef USE_VIBRA_SE_PXXX -void OSystem_SDL_Symbian::initializeVibration() { - _vibrationApi = SonyEricsson::CVibration::NewL(); -} - -void OSystem_SDL_Symbian::vibrationOn(int vibraLength) { - // initialize? - if (!_vibrationApi) _vibrationApi = SonyEricsson::CVibration::NewL(); - // do it! - _vibrationApi->VibrationOn(1, 1, vibraLength); -} - -void OSystem_SDL_Symbian::vibrationOff() { - _vibrationApi->VibrationOff(); -} -#endif // USE_SE_PXX_VIBRA - diff --git a/backends/symbian/src/SymbianOS.h b/backends/symbian/src/SymbianOS.h deleted file mode 100644 index 955f59c59c..0000000000 --- a/backends/symbian/src/SymbianOS.h +++ /dev/null @@ -1,139 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#ifndef SDLSYMBIANH -#define SDLSYMBIANH - -#include "backends/platform/sdl/sdl-common.h" - -/** Vibration support */ -#ifdef USE_VIBRA_SE_PXXX -#include -#endif - -#define TOTAL_ZONES 3 - -class OSystem_SDL_Symbian : public OSystem_SDL { -public: - OSystem_SDL_Symbian(); - virtual ~OSystem_SDL_Symbian(); - -public: - /** - * The following method is called once, from main.cpp, after all - * config data (including command line params etc.) are fully loaded. - */ - virtual void initBackend(); - - int getDefaultGraphicsMode() const; - const OSystem::GraphicsMode *getSupportedGraphicsModes() const; - bool setGraphicsMode(const char *name); - void quitWithErrorMsg(const char *msg); - virtual bool hasFeature(Feature f); - - // Set function that generates samples - // - // This function is overridden by the symbian port in order to provide MONO audio - // downmix is done by supplying our own audiocallback - // - virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend - -protected: - // - // The mixer callback function, passed on to OSystem::setSoundCallback(). - // This simply calls the mix() method. - // and then does downmixing for symbian if needed - // - static void symbianMixCallback(void *s, byte *samples, int len); - - // - // Actual mixing implementation - // - void symbianMix(byte *samples, int len); - -public: - // vibration support -#ifdef USE_VIBRA_SE_PXXX - // - // Intialize the vibration api used if present and supported - // - void initializeVibration(); - - // - // Turn vibration on, repeat no time - // @param vibraLength number of repetitions - // - void vibrationOn(int vibraLength); - - // - // Turns the vibration off - // - void vibrationOff(); - -protected: - SonyEricsson::CVibration* _vibrationApi; -#endif // USE_VIBRA_SE_PXXX - -protected: - - // - // This is an implementation by the remapKey function - // @param SDL_Event to remap - // @param ScumVM event to modify if special result is requested - // @return true if Event has a valid return status - // - bool remapKey(SDL_Event &ev, Event &event); - - void setWindowCaption(const char *caption); - - // - // Used to intialized special game mappings - // - void check_mappings(); - - void initZones(); - - // Audio - int _channels; - - SoundProc _sound_proc; - void *_sound_proc_param; - byte *_stereo_mix_buffer; - - // Used to handle joystick navi zones - int _mouseXZone[TOTAL_ZONES]; - int _mouseYZone[TOTAL_ZONES]; - int _currentZone; - - typedef struct zoneDesc { - int x; - int y; - int width; - int height; - } zoneDesc; - - static zoneDesc _zones[TOTAL_ZONES]; -}; - -#endif diff --git a/backends/symbian/src/main_features.inl b/backends/symbian/src/main_features.inl deleted file mode 100644 index 2e0b008e68..0000000000 --- a/backends/symbian/src/main_features.inl +++ /dev/null @@ -1,66 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifdef USE_VIBRA_SE_PXXX - "Vibra " -#endif - "\n" - -// we want a list of supported engines visible in the program, -// because we also release special builds with only one engine -#ifndef DISABLE_SCUMM - "SCUMM " -#endif -#ifndef DISABLE_SIMON - "Simon " -#endif -#ifndef DISABLE_SKY - "Sky " -#endif -#ifndef DISABLE_QUEEN - "Queen " -#endif -#ifndef DISABLE_GOB - "Gob " -#endif -#ifndef DISABLE_SAGA - "Saga " -#endif -#ifndef DISABLE_KYRA - "Kyra " -#endif -#ifndef DISABLE_SWORD1 - "Sword1 " -#endif -#ifndef DISABLE_SWORD2 - "Sword2 " -#endif -#ifndef DISABLE_CINE - "Cine " -#endif -#ifndef DISABLE_LURE - "Lure " -#endif -#ifndef DISABLE_AGI - "AGI " -#endif - diff --git a/backends/symbian/src/portdefs.h b/backends/symbian/src/portdefs.h deleted file mode 100644 index 303fde726d..0000000000 --- a/backends/symbian/src/portdefs.h +++ /dev/null @@ -1,148 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Original EPOC port, ESDL - * Copyright (C) 2003-2005 Lars 'AnotherGuest' Persson - Original EPOC port, Audio System - * Copyright (C) 2005 Jurgen 'SumthinWicked' Braam - EPOC/CVS maintainer - * Copyright (C) 2005-2006 The ScummVM project - * - * This program 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#define DISABLE_SCALERS // we only need 1x - -#if defined(USE_TREMOR) && !defined(USE_VORBIS) -#define USE_VORBIS // make sure this one is defined together with USE_TREMOR! -#endif - -// hack in some tricks to work around not having these fcns for Symbian -// and we _really_ don't wanna link with any other windows LIBC library! -#if defined(__GCC32__) - - #define snprintf(buf,len,args...) sprintf(buf,args) - #define vsnprintf(buf,len,format,valist) vsprintf(buf,format,valist) - - // taken from public domain http://www.opensource.apple.com/darwinsource/WWDC2004/gcc_legacy-939/gcc/floatlib.c - #define SIGNBIT 0x80000000 - #define HIDDEN (1 << 23) - #define EXCESSD 1022 - #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF) - #define SIGND(fp) ((fp.l.upper) & SIGNBIT) - #define HIDDEND_LL ((long long)1 << 52) - #define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL) - - union double_long { - double d; - struct { - long upper; - unsigned long lower; - } l; - long long ll; - }; - - /* convert double float to double int (dfdi) */ - long long inline - scumm_fixdfdi (double a1) { // __fixdfdi (double a1) - register union double_long dl1; - register int exp; - register long long l; - - dl1.d = a1; - - if (!dl1.l.upper && !dl1.l.lower) - return (0); - - exp = EXPD (dl1) - EXCESSD - 64; - l = MANTD_LL(dl1); - - if (exp > 0) { - l = (long long)1<<63; - if (!SIGND(dl1)) - l--; - return l; - } - - /* shift down until exp = 0 or l = 0 */ - if (exp < 0 && exp > -64 && l) - l >>= -exp; - else - return (0); - - return (SIGND (dl1) ? -l : l); - } - - /* okay, okay: I admit it: I absolutely have _NO_ idea why __fixdfdi does not get linked in by gcc from libgcc.a - because I know it's in there: I checked with `ar x _fixdfdi.o libgcc.a` and the symbol is in there, so I'm lost - and had to fix it this way. I tried all gcc and ld options I could find: no hope :( If someone can enlighten me: - feel free to let me know at sumthinwicked@users.sf.net! Much obliged. - PS1. I think for __fixunsdfdi they have made a circumvention by having to add STATICLIBRARY EGCC.LIB - PS2. http://gcc.gnu.org/ml/gcc-bugs/2004-01/msg01596.html might have found out the same problem there - */ - -#elif defined (__WINS__) // WINS - - // let's just blatantly ignore this for now and just get it to work :P but does n't work from the debug function - int inline scumm_snprintf (char *str, unsigned long /*n*/, char const *fmt, ...) { - va_list args; - va_start(args, fmt); - vsprintf(str, fmt, args); - va_end(args); - return strlen(str); - } - - int inline scumm_vsnprintf (char *str, unsigned long /*n*/, char const *fmt, va_list valist) { - vsprintf(str, fmt, valist); - return strlen(str); - } - - #define snprintf scumm_snprintf - #define vsnprintf scumm_vsnprintf -#else // GCCE and the rest - #define snprintf(buf,len,args...) sprintf(buf,args) - #define vsnprintf(buf,len,format,valist) vsprintf(buf,format,valist) -#endif - -// somehow nobody has this function... -#define hypot(a, b) sqrt((a)*(a) + (b)*(b)) - -// Symbian bsearch implementation is flawed -void inline *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - size_t i; - - for (i=0; i < nmemb; i++) - if (compar(key, (void *)((size_t)base + size * i)) == 0) - return (void *)((size_t)base + size * i); - return NULL; -} -#define bsearch scumm_bsearch - -// we cannot include SymbianOS.h everywhere, but this works too (functions code is in SymbianOS.cpp) -namespace Symbian { -extern void FatalError(const char *msg); -extern char* GetExecutablePath(); -} -- cgit v1.2.3