From 451ab91e3827a6384981b3300e2a7000d2eaba58 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 24 Sep 2013 21:17:20 +0200 Subject: [PATCH] Core commit. Compile and run on the OpenPandora --- source/mupen64plus-core/INSTALL | 26 + source/mupen64plus-core/LICENSES | 49 + source/mupen64plus-core/README | 153 + source/mupen64plus-core/RELEASE | 587 + source/mupen64plus-core/data/font.ttf | Bin 0 -> 65932 bytes source/mupen64plus-core/data/mupen64plus.cht | 15366 ++++++++ source/mupen64plus-core/data/mupen64plus.ini | 16034 +++++++++ source/mupen64plus-core/data/mupencheat.txt | 29925 ++++++++++++++++ .../Mupen64Plus_Core_Parameters.txt | 191 + .../Mupen64Plus_Plugin_Parameters.txt | 403 + .../Mupen64Plus_v2.0_API_Versioning.txt | 109 + .../Mupen64Plus_v2.0_Core_API_v1.0.txt | 71 + .../Mupen64Plus_v2.0_Core_Basic.txt | 47 + .../Mupen64Plus_v2.0_Core_Config.txt | 313 + .../Mupen64Plus_v2.0_Core_Debugger.txt | 282 + .../Mupen64Plus_v2.0_Core_Front-End.txt | 332 + .../Mupen64Plus_v2.0_Core_Video_Extension.txt | 196 + .../Mupen64Plus_v2.0_Design_Proposal_3.txt | 103 + .../Mupen64Plus_v2.0_Plugin_API.txt | 288 + .../Mupen64Plus_v2.0_headers.txt | 327 + source/mupen64plus-core/doc/font-license | 40 + source/mupen64plus-core/doc/gpl-license | 342 + source/mupen64plus-core/doc/lgpl-license | 505 + source/mupen64plus-core/doc/new_dynarec.txt | 413 + .../projects/msvc11/mupen64plus-core.vcxproj | 234 + .../projects/msvc8/mupen64plus-core.vcproj | 685 + .../mupen64plus-core/projects/unix/Makefile | 597 + .../mupen64plus-core/src/api/api_export.ver | 69 + source/mupen64plus-core/src/api/callbacks.c | 78 + source/mupen64plus-core/src/api/callbacks.h | 39 + source/mupen64plus-core/src/api/common.c | 109 + source/mupen64plus-core/src/api/config.c | 1433 + source/mupen64plus-core/src/api/config.h | 30 + source/mupen64plus-core/src/api/debugger.c | 390 + source/mupen64plus-core/src/api/debugger.h | 46 + source/mupen64plus-core/src/api/eglport.cpp | 706 + source/mupen64plus-core/src/api/eglport.h | 108 + source/mupen64plus-core/src/api/frontend.c | 367 + source/mupen64plus-core/src/api/m64p_common.h | 90 + source/mupen64plus-core/src/api/m64p_config.h | 242 + .../mupen64plus-core/src/api/m64p_debugger.h | 202 + .../mupen64plus-core/src/api/m64p_frontend.h | 141 + source/mupen64plus-core/src/api/m64p_plugin.h | 271 + source/mupen64plus-core/src/api/m64p_types.h | 351 + source/mupen64plus-core/src/api/m64p_vidext.h | 154 + source/mupen64plus-core/src/api/vidext.c | 595 + source/mupen64plus-core/src/api/vidext.h | 38 + .../src/api/vidext_sdl2_compat.h | 802 + .../src/debugger/dbg_breakpoints.c | 217 + .../src/debugger/dbg_breakpoints.h | 43 + .../src/debugger/dbg_decoder.c | 822 + .../src/debugger/dbg_decoder.h | 61 + .../src/debugger/dbg_decoder_local.h | 1481 + .../src/debugger/dbg_memory.c | 1070 + .../src/debugger/dbg_memory.h | 112 + .../mupen64plus-core/src/debugger/dbg_types.h | 31 + .../mupen64plus-core/src/debugger/debugger.c | 104 + .../mupen64plus-core/src/debugger/debugger.h | 40 + source/mupen64plus-core/src/main/cheat.c | 457 + source/mupen64plus-core/src/main/cheat.h | 40 + source/mupen64plus-core/src/main/eventloop.c | 533 + source/mupen64plus-core/src/main/eventloop.h | 34 + source/mupen64plus-core/src/main/lirc.c | 127 + source/mupen64plus-core/src/main/lirc.h | 25 + source/mupen64plus-core/src/main/list.h | 127 + source/mupen64plus-core/src/main/main.c | 867 + source/mupen64plus-core/src/main/main.h | 77 + source/mupen64plus-core/src/main/md5.c | 382 + source/mupen64plus-core/src/main/md5.h | 92 + source/mupen64plus-core/src/main/rom.c | 536 + source/mupen64plus-core/src/main/rom.h | 140 + source/mupen64plus-core/src/main/savestates.c | 1534 + source/mupen64plus-core/src/main/savestates.h | 57 + source/mupen64plus-core/src/main/util.c | 404 + source/mupen64plus-core/src/main/util.h | 213 + source/mupen64plus-core/src/main/version.h | 39 + source/mupen64plus-core/src/main/workqueue.c | 185 + source/mupen64plus-core/src/main/workqueue.h | 66 + source/mupen64plus-core/src/main/zip/crypt.h | 131 + source/mupen64plus-core/src/main/zip/ioapi.c | 247 + source/mupen64plus-core/src/main/zip/ioapi.h | 212 + source/mupen64plus-core/src/main/zip/unzip.c | 2125 ++ source/mupen64plus-core/src/main/zip/unzip.h | 437 + source/mupen64plus-core/src/main/zip/zip.c | 2006 ++ source/mupen64plus-core/src/main/zip/zip.h | 362 + source/mupen64plus-core/src/memory/dma.c | 380 + source/mupen64plus-core/src/memory/dma.h | 33 + source/mupen64plus-core/src/memory/flashram.c | 216 + source/mupen64plus-core/src/memory/flashram.h | 36 + source/mupen64plus-core/src/memory/memory.c | 3719 ++ source/mupen64plus-core/src/memory/memory.h | 413 + .../src/memory/n64_cic_nus_6105.c | 119 + .../src/memory/n64_cic_nus_6105.h | 98 + source/mupen64plus-core/src/memory/pif.c | 592 + source/mupen64plus-core/src/memory/pif.h | 29 + source/mupen64plus-core/src/memory/tlb.c | 135 + source/mupen64plus-core/src/memory/tlb.h | 57 + source/mupen64plus-core/src/osal/dynamiclib.h | 30 + .../src/osal/dynamiclib_unix.c | 35 + .../src/osal/dynamiclib_win32.c | 35 + source/mupen64plus-core/src/osal/files.h | 60 + source/mupen64plus-core/src/osal/files_unix.c | 275 + .../mupen64plus-core/src/osal/files_win32.c | 206 + source/mupen64plus-core/src/osal/preproc.h | 57 + source/mupen64plus-core/src/osd/OGLFT.cpp | 1291 + source/mupen64plus-core/src/osd/OGLFT.h | 324 + source/mupen64plus-core/src/osd/osd.cpp | 606 + source/mupen64plus-core/src/osd/osd.h | 144 + .../mupen64plus-core/src/osd/screenshot.cpp | 235 + source/mupen64plus-core/src/osd/screenshot.h | 32 + .../mupen64plus-core/src/plugin/dummy_audio.c | 112 + .../mupen64plus-core/src/plugin/dummy_audio.h | 45 + .../mupen64plus-core/src/plugin/dummy_input.c | 85 + .../mupen64plus-core/src/plugin/dummy_input.h | 42 + .../mupen64plus-core/src/plugin/dummy_rsp.c | 61 + .../mupen64plus-core/src/plugin/dummy_rsp.h | 35 + .../mupen64plus-core/src/plugin/dummy_video.c | 130 + .../mupen64plus-core/src/plugin/dummy_video.h | 50 + source/mupen64plus-core/src/plugin/plugin.c | 545 + source/mupen64plus-core/src/plugin/plugin.h | 117 + .../src/r4300/empty_dynarec.c | 1050 + source/mupen64plus-core/src/r4300/exception.c | 144 + source/mupen64plus-core/src/r4300/exception.h | 29 + source/mupen64plus-core/src/r4300/fpu.h | 459 + .../src/r4300/interpreter.def | 79 + .../src/r4300/interpreter_cop0.def | 140 + .../src/r4300/interpreter_cop1.def | 708 + .../src/r4300/interpreter_r4300.def | 800 + .../src/r4300/interpreter_regimm.def | 29 + .../src/r4300/interpreter_special.def | 401 + .../src/r4300/interpreter_tlb.def | 249 + source/mupen64plus-core/src/r4300/interupt.c | 605 + source/mupen64plus-core/src/r4300/interupt.h | 57 + source/mupen64plus-core/src/r4300/macros.h | 90 + .../src/r4300/new_dynarec/assem_arm.c | 4568 +++ .../src/r4300/new_dynarec/assem_arm.h | 43 + .../src/r4300/new_dynarec/assem_x86.c | 4364 +++ .../src/r4300/new_dynarec/assem_x86.h | 20 + .../src/r4300/new_dynarec/linkage_arm.S | 1212 + .../src/r4300/new_dynarec/linkage_x86.S | 929 + .../src/r4300/new_dynarec/new_dynarec.c | 11065 ++++++ .../src/r4300/new_dynarec/new_dynarec.h | 38 + source/mupen64plus-core/src/r4300/ops.h | 322 + source/mupen64plus-core/src/r4300/profile.c | 100 + .../mupen64plus-core/src/r4300/pure_interp.c | 424 + source/mupen64plus-core/src/r4300/r4300.c | 1100 + source/mupen64plus-core/src/r4300/r4300.h | 94 + source/mupen64plus-core/src/r4300/recomp.c | 2674 ++ source/mupen64plus-core/src/r4300/recomp.h | 110 + source/mupen64plus-core/src/r4300/recomph.h | 308 + source/mupen64plus-core/src/r4300/reset.c | 59 + source/mupen64plus-core/src/r4300/reset.h | 31 + .../mupen64plus-core/src/r4300/x86/assemble.c | 140 + .../mupen64plus-core/src/r4300/x86/assemble.h | 838 + .../src/r4300/x86/assemble_struct.h | 33 + source/mupen64plus-core/src/r4300/x86/gbc.c | 276 + source/mupen64plus-core/src/r4300/x86/gcop0.c | 42 + source/mupen64plus-core/src/r4300/x86/gcop1.c | 135 + .../mupen64plus-core/src/r4300/x86/gcop1_d.c | 604 + .../mupen64plus-core/src/r4300/x86/gcop1_l.c | 54 + .../mupen64plus-core/src/r4300/x86/gcop1_s.c | 603 + .../mupen64plus-core/src/r4300/x86/gcop1_w.c | 56 + .../mupen64plus-core/src/r4300/x86/gr4300.c | 2050 ++ .../mupen64plus-core/src/r4300/x86/gregimm.c | 577 + .../mupen64plus-core/src/r4300/x86/gspecial.c | 1157 + source/mupen64plus-core/src/r4300/x86/gtlb.c | 76 + .../src/r4300/x86/interpret.h | 239 + .../mupen64plus-core/src/r4300/x86/regcache.c | 857 + .../mupen64plus-core/src/r4300/x86/regcache.h | 48 + source/mupen64plus-core/src/r4300/x86/rjump.c | 167 + .../src/r4300/x86_64/assemble.c | 219 + .../src/r4300/x86_64/assemble.h | 1182 + .../src/r4300/x86_64/assemble_struct.h | 34 + .../mupen64plus-core/src/r4300/x86_64/gbc.c | 295 + .../mupen64plus-core/src/r4300/x86_64/gcop0.c | 47 + .../mupen64plus-core/src/r4300/x86_64/gcop1.c | 154 + .../src/r4300/x86_64/gcop1_d.c | 710 + .../src/r4300/x86_64/gcop1_l.c | 61 + .../src/r4300/x86_64/gcop1_s.c | 709 + .../src/r4300/x86_64/gcop1_w.c | 63 + .../src/r4300/x86_64/gr4300.c | 2284 ++ .../src/r4300/x86_64/gregimm.c | 602 + .../src/r4300/x86_64/gspecial.c | 1062 + .../mupen64plus-core/src/r4300/x86_64/gtlb.c | 92 + .../src/r4300/x86_64/interpret.h | 240 + .../src/r4300/x86_64/regcache.c | 657 + .../src/r4300/x86_64/regcache.h | 47 + .../mupen64plus-core/src/r4300/x86_64/rjump.c | 112 + .../tools/build_bundle_bin.sh | 65 + .../tools/build_bundle_src.sh | 59 + .../tools/build_modules_src.sh | 44 + .../tools/cheat_code_convert.py | 118 + .../tools/install_binary_bundle.sh | 120 + .../tools/m64p_helper_scripts.tar.gz | Bin 0 -> 1629 bytes .../tools/osx_build_bundle.sh | 36 + .../tools/osx_build_instructions.txt | 52 + source/mupen64plus-core/tools/profiling.txt | 91 + source/mupen64plus-core/tools/r4300prof.c | 520 + .../tools/regtests/daily-tests.cfg | 188 + .../tools/regtests/regression-video.py | 527 + .../tools/savestate_convert.c | 396 + .../tools/savestate_convert.txt | 36 + .../tools/uninstall_binary_bundle.sh | 106 + 203 files changed, 150875 insertions(+) create mode 100644 source/mupen64plus-core/INSTALL create mode 100644 source/mupen64plus-core/LICENSES create mode 100644 source/mupen64plus-core/README create mode 100644 source/mupen64plus-core/RELEASE create mode 100644 source/mupen64plus-core/data/font.ttf create mode 100644 source/mupen64plus-core/data/mupen64plus.cht create mode 100644 source/mupen64plus-core/data/mupen64plus.ini create mode 100644 source/mupen64plus-core/data/mupencheat.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_Core_Parameters.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_Plugin_Parameters.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_API_Versioning.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_API_v1.0.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_Basic.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_Config.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_Debugger.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_Front-End.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Core_Video_Extension.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Design_Proposal_3.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Plugin_API.txt create mode 100644 source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_headers.txt create mode 100644 source/mupen64plus-core/doc/font-license create mode 100644 source/mupen64plus-core/doc/gpl-license create mode 100644 source/mupen64plus-core/doc/lgpl-license create mode 100644 source/mupen64plus-core/doc/new_dynarec.txt create mode 100644 source/mupen64plus-core/projects/msvc11/mupen64plus-core.vcxproj create mode 100644 source/mupen64plus-core/projects/msvc8/mupen64plus-core.vcproj create mode 100755 source/mupen64plus-core/projects/unix/Makefile create mode 100644 source/mupen64plus-core/src/api/api_export.ver create mode 100644 source/mupen64plus-core/src/api/callbacks.c create mode 100644 source/mupen64plus-core/src/api/callbacks.h create mode 100644 source/mupen64plus-core/src/api/common.c create mode 100644 source/mupen64plus-core/src/api/config.c create mode 100644 source/mupen64plus-core/src/api/config.h create mode 100644 source/mupen64plus-core/src/api/debugger.c create mode 100644 source/mupen64plus-core/src/api/debugger.h create mode 100755 source/mupen64plus-core/src/api/eglport.cpp create mode 100755 source/mupen64plus-core/src/api/eglport.h create mode 100755 source/mupen64plus-core/src/api/frontend.c create mode 100644 source/mupen64plus-core/src/api/m64p_common.h create mode 100644 source/mupen64plus-core/src/api/m64p_config.h create mode 100644 source/mupen64plus-core/src/api/m64p_debugger.h create mode 100644 source/mupen64plus-core/src/api/m64p_frontend.h create mode 100644 source/mupen64plus-core/src/api/m64p_plugin.h create mode 100644 source/mupen64plus-core/src/api/m64p_types.h create mode 100644 source/mupen64plus-core/src/api/m64p_vidext.h create mode 100755 source/mupen64plus-core/src/api/vidext.c create mode 100644 source/mupen64plus-core/src/api/vidext.h create mode 100644 source/mupen64plus-core/src/api/vidext_sdl2_compat.h create mode 100644 source/mupen64plus-core/src/debugger/dbg_breakpoints.c create mode 100644 source/mupen64plus-core/src/debugger/dbg_breakpoints.h create mode 100644 source/mupen64plus-core/src/debugger/dbg_decoder.c create mode 100644 source/mupen64plus-core/src/debugger/dbg_decoder.h create mode 100644 source/mupen64plus-core/src/debugger/dbg_decoder_local.h create mode 100644 source/mupen64plus-core/src/debugger/dbg_memory.c create mode 100644 source/mupen64plus-core/src/debugger/dbg_memory.h create mode 100644 source/mupen64plus-core/src/debugger/dbg_types.h create mode 100644 source/mupen64plus-core/src/debugger/debugger.c create mode 100644 source/mupen64plus-core/src/debugger/debugger.h create mode 100644 source/mupen64plus-core/src/main/cheat.c create mode 100644 source/mupen64plus-core/src/main/cheat.h create mode 100644 source/mupen64plus-core/src/main/eventloop.c create mode 100644 source/mupen64plus-core/src/main/eventloop.h create mode 100644 source/mupen64plus-core/src/main/lirc.c create mode 100644 source/mupen64plus-core/src/main/lirc.h create mode 100644 source/mupen64plus-core/src/main/list.h create mode 100755 source/mupen64plus-core/src/main/main.c create mode 100644 source/mupen64plus-core/src/main/main.h create mode 100644 source/mupen64plus-core/src/main/md5.c create mode 100644 source/mupen64plus-core/src/main/md5.h create mode 100644 source/mupen64plus-core/src/main/rom.c create mode 100644 source/mupen64plus-core/src/main/rom.h create mode 100644 source/mupen64plus-core/src/main/savestates.c create mode 100644 source/mupen64plus-core/src/main/savestates.h create mode 100644 source/mupen64plus-core/src/main/util.c create mode 100644 source/mupen64plus-core/src/main/util.h create mode 100644 source/mupen64plus-core/src/main/version.h create mode 100644 source/mupen64plus-core/src/main/workqueue.c create mode 100644 source/mupen64plus-core/src/main/workqueue.h create mode 100644 source/mupen64plus-core/src/main/zip/crypt.h create mode 100644 source/mupen64plus-core/src/main/zip/ioapi.c create mode 100644 source/mupen64plus-core/src/main/zip/ioapi.h create mode 100644 source/mupen64plus-core/src/main/zip/unzip.c create mode 100644 source/mupen64plus-core/src/main/zip/unzip.h create mode 100644 source/mupen64plus-core/src/main/zip/zip.c create mode 100644 source/mupen64plus-core/src/main/zip/zip.h create mode 100644 source/mupen64plus-core/src/memory/dma.c create mode 100644 source/mupen64plus-core/src/memory/dma.h create mode 100644 source/mupen64plus-core/src/memory/flashram.c create mode 100644 source/mupen64plus-core/src/memory/flashram.h create mode 100644 source/mupen64plus-core/src/memory/memory.c create mode 100644 source/mupen64plus-core/src/memory/memory.h create mode 100644 source/mupen64plus-core/src/memory/n64_cic_nus_6105.c create mode 100644 source/mupen64plus-core/src/memory/n64_cic_nus_6105.h create mode 100644 source/mupen64plus-core/src/memory/pif.c create mode 100644 source/mupen64plus-core/src/memory/pif.h create mode 100644 source/mupen64plus-core/src/memory/tlb.c create mode 100644 source/mupen64plus-core/src/memory/tlb.h create mode 100644 source/mupen64plus-core/src/osal/dynamiclib.h create mode 100644 source/mupen64plus-core/src/osal/dynamiclib_unix.c create mode 100644 source/mupen64plus-core/src/osal/dynamiclib_win32.c create mode 100644 source/mupen64plus-core/src/osal/files.h create mode 100644 source/mupen64plus-core/src/osal/files_unix.c create mode 100644 source/mupen64plus-core/src/osal/files_win32.c create mode 100644 source/mupen64plus-core/src/osal/preproc.h create mode 100644 source/mupen64plus-core/src/osd/OGLFT.cpp create mode 100644 source/mupen64plus-core/src/osd/OGLFT.h create mode 100644 source/mupen64plus-core/src/osd/osd.cpp create mode 100644 source/mupen64plus-core/src/osd/osd.h create mode 100644 source/mupen64plus-core/src/osd/screenshot.cpp create mode 100644 source/mupen64plus-core/src/osd/screenshot.h create mode 100644 source/mupen64plus-core/src/plugin/dummy_audio.c create mode 100644 source/mupen64plus-core/src/plugin/dummy_audio.h create mode 100644 source/mupen64plus-core/src/plugin/dummy_input.c create mode 100644 source/mupen64plus-core/src/plugin/dummy_input.h create mode 100644 source/mupen64plus-core/src/plugin/dummy_rsp.c create mode 100644 source/mupen64plus-core/src/plugin/dummy_rsp.h create mode 100644 source/mupen64plus-core/src/plugin/dummy_video.c create mode 100644 source/mupen64plus-core/src/plugin/dummy_video.h create mode 100644 source/mupen64plus-core/src/plugin/plugin.c create mode 100644 source/mupen64plus-core/src/plugin/plugin.h create mode 100644 source/mupen64plus-core/src/r4300/empty_dynarec.c create mode 100644 source/mupen64plus-core/src/r4300/exception.c create mode 100644 source/mupen64plus-core/src/r4300/exception.h create mode 100644 source/mupen64plus-core/src/r4300/fpu.h create mode 100644 source/mupen64plus-core/src/r4300/interpreter.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_cop0.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_cop1.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_r4300.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_regimm.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_special.def create mode 100644 source/mupen64plus-core/src/r4300/interpreter_tlb.def create mode 100644 source/mupen64plus-core/src/r4300/interupt.c create mode 100644 source/mupen64plus-core/src/r4300/interupt.h create mode 100644 source/mupen64plus-core/src/r4300/macros.h create mode 100755 source/mupen64plus-core/src/r4300/new_dynarec/assem_arm.c create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/assem_arm.h create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/assem_x86.c create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/assem_x86.h create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/linkage_arm.S create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/linkage_x86.S create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.c create mode 100644 source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.h create mode 100644 source/mupen64plus-core/src/r4300/ops.h create mode 100644 source/mupen64plus-core/src/r4300/profile.c create mode 100644 source/mupen64plus-core/src/r4300/pure_interp.c create mode 100644 source/mupen64plus-core/src/r4300/r4300.c create mode 100644 source/mupen64plus-core/src/r4300/r4300.h create mode 100644 source/mupen64plus-core/src/r4300/recomp.c create mode 100644 source/mupen64plus-core/src/r4300/recomp.h create mode 100644 source/mupen64plus-core/src/r4300/recomph.h create mode 100644 source/mupen64plus-core/src/r4300/reset.c create mode 100644 source/mupen64plus-core/src/r4300/reset.h create mode 100644 source/mupen64plus-core/src/r4300/x86/assemble.c create mode 100644 source/mupen64plus-core/src/r4300/x86/assemble.h create mode 100644 source/mupen64plus-core/src/r4300/x86/assemble_struct.h create mode 100644 source/mupen64plus-core/src/r4300/x86/gbc.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop0.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop1.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop1_d.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop1_l.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop1_s.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gcop1_w.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gr4300.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gregimm.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gspecial.c create mode 100644 source/mupen64plus-core/src/r4300/x86/gtlb.c create mode 100644 source/mupen64plus-core/src/r4300/x86/interpret.h create mode 100644 source/mupen64plus-core/src/r4300/x86/regcache.c create mode 100644 source/mupen64plus-core/src/r4300/x86/regcache.h create mode 100644 source/mupen64plus-core/src/r4300/x86/rjump.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/assemble.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/assemble.h create mode 100644 source/mupen64plus-core/src/r4300/x86_64/assemble_struct.h create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gbc.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop0.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop1.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop1_d.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop1_l.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop1_s.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gcop1_w.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gr4300.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gregimm.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gspecial.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/gtlb.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/interpret.h create mode 100644 source/mupen64plus-core/src/r4300/x86_64/regcache.c create mode 100644 source/mupen64plus-core/src/r4300/x86_64/regcache.h create mode 100644 source/mupen64plus-core/src/r4300/x86_64/rjump.c create mode 100755 source/mupen64plus-core/tools/build_bundle_bin.sh create mode 100755 source/mupen64plus-core/tools/build_bundle_src.sh create mode 100755 source/mupen64plus-core/tools/build_modules_src.sh create mode 100755 source/mupen64plus-core/tools/cheat_code_convert.py create mode 100755 source/mupen64plus-core/tools/install_binary_bundle.sh create mode 100644 source/mupen64plus-core/tools/m64p_helper_scripts.tar.gz create mode 100755 source/mupen64plus-core/tools/osx_build_bundle.sh create mode 100644 source/mupen64plus-core/tools/osx_build_instructions.txt create mode 100644 source/mupen64plus-core/tools/profiling.txt create mode 100644 source/mupen64plus-core/tools/r4300prof.c create mode 100644 source/mupen64plus-core/tools/regtests/daily-tests.cfg create mode 100755 source/mupen64plus-core/tools/regtests/regression-video.py create mode 100644 source/mupen64plus-core/tools/savestate_convert.c create mode 100644 source/mupen64plus-core/tools/savestate_convert.txt create mode 100755 source/mupen64plus-core/tools/uninstall_binary_bundle.sh diff --git a/source/mupen64plus-core/INSTALL b/source/mupen64plus-core/INSTALL new file mode 100644 index 0000000..1101a6e --- /dev/null +++ b/source/mupen64plus-core/INSTALL @@ -0,0 +1,26 @@ +Mupen64Plus-Core INSTALL +------------------------ + +This text file was written to explain the installation process of the +Mupen64Plus-Core module. + +If this module is part of a Mupen64Plus source code bundle, the user should run +the "m64p_install.sh" script in the root of the unzipped bundle to install all +of the included modules in the bundle. + +If this module is a standalone source code release, you should build the library +from source code and install it via the makefile, like this: + +$ cd projects/unix +$ make all +$ sudo make install + +If you want to build the Mupen64Plus-Core module for installation in a home +folder for a single user, you may build it like this (replacing +with your desired local installation path): + +$ cd projects/unix +$ make all SHAREDIR= +$ make install LIBDIR= SHAREDIR= + + diff --git a/source/mupen64plus-core/LICENSES b/source/mupen64plus-core/LICENSES new file mode 100644 index 0000000..d1bdbe3 --- /dev/null +++ b/source/mupen64plus-core/LICENSES @@ -0,0 +1,49 @@ +Mupen64Plus-Core LICENSES +------------------------- + +Mupen64Plus-Core is licensed under the GNU General Public License version 2. Please see the +included doc/gpl-license file for the terms and conditions of the GNU General Public License. +The authors of Mupen64Plus-Core are: + * Richard Goedeken (Richard42) + * Sven Eckelmann (ecsv) + * John Chadwick (NMN) + * James Hood (Ebenblues) + * Scott Gorman (okaygo) + * Scott Knauert (Tillin9) + * Jesse Dean (DarkJezter) + * Louai Al-Khanji (slougi) + * Bob Forder (orbitaldecay) + * Jason Espinosa (hasone) + * HyperHacker + * and others. + +The Mupen64Plus API documentation (located in doc/emuwiki-api-doc/*) is Copyright(C) 2009-2011 +by Richard Goedeken and is licensed under the GNU General Public License version 2. + +Mupen64Plus is based on GPL-licensed source code from Mupen64 v0.5, originally written by: + * Hacktarux + * Dave2001 + * Zilmar + * Gregor Anich (Blight) + * Juha Luotio (JttL) + * and others. + +The OGLFT library used for the On-Screen Display is based on GPL/LGPL-licensed code Copyright 2002 lignum Computing. Please see the included doc/lgpl-license file for the terms and conditions of the GNU Lesser General Public License. More information about this library is available at the following websites: + - http://oglft.sourceforge.net/index.html + - http://directory.fsf.org/project/OGLFT/ + +Additionally, mupen includes a number of components licensed under other OSI approved licenses: + +The BSD license: + * minizip by Gilles Vollant and others, ftp://ftp.info-zip.org/pub/infozip/license.html + * src/memory/n64_cic_nus_6105.c/.h, by X-Scale + +The zlib/libpng license: + * Adler-32 by Mark Adler + * libpng by Glenn Randers-Pehrson, Peter Deutsch, and Guy Eric Schalnat + * MD5 hasing code by Peter Deutsch + +The Bitstream license: + * The TrueType font (data/font.ttf) is licensed by the Bitstream license. Please see the included doc/font-license file for the terms and conditions of the Bitstream license. + + diff --git a/source/mupen64plus-core/README b/source/mupen64plus-core/README new file mode 100644 index 0000000..45c53c9 --- /dev/null +++ b/source/mupen64plus-core/README @@ -0,0 +1,153 @@ +Mupen64Plus-Core README +----------------------- + +The most current version of this README and more documentation can be found on +the Mupen64Plus wiki: + +http://code.google.com/p/mupen64plus/wiki/README + +Mupen64Plus is based off of mupen64, originally created by Hacktarux. This +package contains the only the Mupen64Plus core library. For a fully functional +emulator, the user must also install graphics, sound, input, and RSP plugins, +as well as a user interface program (called a front-end). + +README Sections + 1. Requirements for building or running Mupen64Plus + 2. Building From Source + 3. Installation + 4. Key Commands In Emulator + +1. Requirements and Pre-requisites +---------------------------------- + +*Binary Package Requirements* + + - SDL 1.2 + - libpng + - freetype 2 + - zlib + +*Source Build Requirements* + +In addition to the binary libraries, the following packages are required if you +build Mupen64Plus from source: + + - GNU C and C++ compiler, libraries, and headers + - GNU make + - Development packages for all the libraries above + +2. Building From Source +----------------------- + +If you downloaded the binary distribution of Mupen64Plus, skip to the +Installation section. To build the source distribution, unzip and cd into the +projects/unix directory, then build using make: + + $ unzip mupen64plus-core-x-y-z-src.zip + $ cd mupen64plus-core-x-y-z-src/projects/unix + $ make all + +Type 'make' by itself to view all available build options: + + $ make + Mupen64Plus makefile. + Targets: + all == Build Mupen64Plus and all plugins + clean == remove object files + install == Install Mupen64Plus and all plugins + uninstall == Uninstall Mupen64Plus and all plugins + Options: + BITS=32 == build 32-bit binaries on 64-bit machine + LIRC=1 == enable LIRC support + NO_ASM=1 == build without assembly (no dynamic recompiler or MMX/SSE code) + SHAREDIR=path == extra path to search for shared data files + OPTFLAGS=flag == compiler optimization (default: -O3) + PIC=(1|0) == Force enable/disable of position independent code + OSD=(1|0) == Enable/disable build of OpenGL On-screen display + NEW_DYNAREC=1 == Replace dynamic recompiler with Ari64's experimental dynarec + POSTFIX=name == String added to the name of the the build (default: '') + Install Options: + PREFIX=path == install/uninstall prefix (default: /usr/local/) + SHAREDIR=path == path to install shared data (default: PREFIX/share/mupen64plus/) + LIBDIR=path == path to install plugin libs (default: PREFIX/lib) + INCDIR=path == path to install core header files (default: PREFIX/include/mupen64plus) + DESTDIR=path == path to prepend to all installation paths (only for packagers) + Debugging Options: + PROFILE=1 == build gprof instrumentation into binaries for profiling + DEBUG=1 == add debugging symbols to binaries + DEBUGGER=1 == build graphical debugger + DBG_CORE=1 == print debugging info in r4300 core + DBG_COUNT=1 == print R4300 instruction count totals (64-bit dynarec only) + DBG_COMPARE=1 == enable core-synchronized r4300 debugging + DBG_TIMING=1 == print timing data + DBG_PROFILE=1 == dump profiling data for r4300 dynarec to data file + V=1 == show verbose compiler output + +3. Installation +--------------- + +*Binary Distribution* + +To install the binary distribution of Mupen64Plus, su to root and run the +provided install.sh script: + + $ su + # ./install.sh + # exit + $ + +The install script will copy the executable to /usr/local/bin and a directory +called /usr/local/share/mupen64plus will be created to hold plugins and other +files used by mupen64plus. + +NOTE: By default, install.sh uses /usr/local for the install prefix. Although +the user can specify an alternate prefix to install.sh at the commandline, the +mupen64plus binary was compiled to look for the install directory in /usr/local, +so specifying an alternate prefix to install.sh will cause problems (the +mupen64plus front-end application will not find the directory containing the +core library) unless the directory to which you install it is known by your +dynamic library loader (ie, included in /etc/ld.conf.so) + +If you want to use a prefix other than /usr/local, you may also download the +source code package and build with the PREFIX option (see below). + +*Source Distribution* + +After building mupen64plus and all plugins, su to root and type 'make install' +to install Mupen64Plus. The install process will copy the executable to +$PREFIX/bin and a directory called $PREFIX/share/mupen64plus will be created +to hold plugins and other files used by mupen64plus. By default, PREFIX is set +to /usr/local. This can be changed by passing the PREFIX option to make. NOTE: +you must pass the prefix, when building AND installing. For example, to install +mupen64plus to /usr, do this: + + $ make PREFIX=/usr all + $ sudo make PREFIX=/usr install + $ + +4. Key Commands In Emulator +--------------------------- +The keys or joystick/mouse inputs which will be mapped to the N64 controller +for playing the games are determined by the input plugin. The emulator core +also supports several key commands during emulation, which may be configured by +editing the ~/.config/mupen64plus/mupen64plus.cfg file. They are: + + Escape == Quit the emulator + 0-9 == Select virtual 'slot' for save/load state (F5 and F7) commands + F5 == Save emulator state + F7 == Load emulator state + F9 == Reset emulator + F10 == slow down emulator by 5% + F11 == speed up emulator by 5% + F12 == take screenshot +Alt-Enter == Toggle between windowed and fullscreen (may not be supported by all video plugins) + p or P == Pause on/off + m or M == Mute/unmute sound + g or G == Press "Game Shark" button (only if cheats are enabled) + / or ? == single frame advance while paused + F == Fast Forward (playback at 250% normal speed while F key is pressed) + [ == Decrease volume + ] == Increase volume + + + diff --git a/source/mupen64plus-core/RELEASE b/source/mupen64plus-core/RELEASE new file mode 100644 index 0000000..3184290 --- /dev/null +++ b/source/mupen64plus-core/RELEASE @@ -0,0 +1,587 @@ +Mupen64Plus-Core Emulator Library RELEASE +----------------------------------------- + +Mupen64Plus v2.0 - July 4th, 2013 +--------------------------------- + - Fixes for various games (DK64, Zelda, Blast Corps) + - add Ari64's dynamic recompiler for x86 (32-bit) and ARM + - improved PJ64 savestate loading + - support video window resizing (with help from video plugin and front-end application) + - Auto-detect savestate type (Mupen64Plus or PJ64) when loading from a slot + - many various code cleanups in core from casualjames + - support to build against SDL2 + - debugger code cleanup + - Project files for Visual Studio 2012 + - Makefile changes + - add support for PowerPC and MinGW32 builds + - add cross-compiling support to build Win32 executables (MXE) under Linux + +Mupen64Plus v1.99.5 - March 10, 2012 +------------------------------------ + - New feature: support for N64 internal real-time clock + - use X-Scale's PIF-CIC algorithm instead of the hard-coded challenge-response pairs + - New config parameter for path to save SRAM/EEPROM/MPK files, so they can be separated from emulator snapshots + - updated core for new Mupen64plus 2.0 API versioning scheme + - split core configuration data into 2 sections: Core and CoreEvents. Added version numbers and upgrade handling to both + - Accurately emulate the RSP DMA operation (from Bobby Smiles) + - bugfix: #290 - OnScreenDisplay text is sometimes captured in screenshots + - bugfix: when the front-end specifies an override for the configuration directory, always use this path, so that we don't load the config from there and then save it back to the default user path + - bugfix: #468 - On-screen-display problem under OSX + - bugfix: Use option SaveStatePath from config file + - bugfix: don't call SDL_Quit() until the core library is being unloaded. fixes some front-end use cases + - bugfix: #410 - segfault in dma_pi_write()-->strlen() if /home/username/.local/share/mupen64plus/ owned by root + - bugfix: for Interpreter cores, use proper math functions for ceil/floor/round/trunc instead of x87 rounding modes + - many makefile fixes and improvements + +Mupen64Plus v1.99.4 - February 22, 2010 +--------------------------------------- + - Added some type checking to ConfigGetParameter() function, and a new error type + - Bugfix: avoid segfault in the video extension code if SDL initialization fails (because video plugin fails) + - Added new CoreGetRomSettings() function for front-ends + - Allow to run dynarec in hardware DEP protected windows + - Allow core .cfg parser to accept strings without quotes around them + - API change: use new ReadScreen2() video plugin function + - New re-entrant R4300 disassembler, from tty68k/zzt32, a man who loves MIPS processors + - makefile fixes and improvements, code cleanups + +Mupen64Plus v1.99.3 - February 13, 2010 +--------------------------------------- + - New feature: configuration function ConfigGetParameterType() + - New feature: up to 1000 screenshots per ROM are allowed + - New feature: support for Gameshark 3.3 patch codes + - Bugfix: Use Dynarec by default when core supports it. If dynarec is selected but unavailable, fall back to cached interpreter + - Bugfix: screenshot directory handling code used unix-specific path separators; now is platform-independent + - Bugfix: #313 - 64-bit inline assembly code in r4300/x86_64/rjump.c needs to have underscores before the symbols names in OSX + - Bugfix: old bug in the core - hang if a ROM *without* a 16kb EEPROM type is loaded after a ROM *with* a 16kb EEPROM type + - Bugfix: rumble feature caused memory corruption + - Bugfix: Problem with zilmar API: the plugin RomOpen() functions had no way of returning errors to the core, causing crashes + - Replaced api documentation .tar.gz file with the mediawiki text + - Build script improvements: + - new feature: m64p_update.sh script can take an input argument to update to a tag or revision + - new feature: added bash script for building source packages of individual modules + - Makefile improvements: + - dont run ldconfig on make install unless user is root + - added OS type GNU/kFreeBSD + +Mupen64Plus v1.99.2 - January 6, 2010 +--------------------------------------- + - doc: added tarball of emuwiki api documentation from 2010-01-06 for backup purposes + - clean-up: removed almost all of the ifdef WIN32 statements + - bugfix: stop spamming console with "Core: couldn't open memory pack file '...' for reading" messages + - bugfix: stop spamming console with "Core: couldn't open eeprom file '...' for reading" messages + - new feature: MSVC8 project file for mupen64plus-core, refactored code for VC8 compatibility + - Makefile improvements: + - throw error if OS/CPU not supported + - use DESTDIR in install/uninstall paths + - Allow user-specified CC/CXX/LD paths + - makefile needs to install Core header files so that plugins can be built later + +Mupen64Plus v1.99.1 - December 14, 2009 +--------------------------------------- +New 2.0 architecture advantages: + - Simplified emulator Core, making it much more portable + - Removed all GUI code from plugins, making them simpler and more portable + - User interface development is not tied to Core emulator releases + - All messages from core/plugins can be filtered and shown in GUI instead of only on console + - Video Extension allows Front-end to override some video functions, ie to support embedded render window + - Startup in Fullscreen mode, instead of always starting in windowed mode and switching to FS after few seconds + - video resolution can be given via command-line parameter + - all configuration options for core and plugins are in a single config file, can be configured with a single GUI + - dummy plugins are automatically used if plugin loading fails for any reason + - core and plugins all use the same conventions for where to put data/config files +Mupen64Plus core: + - New feature: cheat code support + - New feature: Keyboard shortcuts for Core commands are now user-configurable + - New feature: can load/save PJ64 state files + - Major code cleanup, refactored build system to separate source and object files + - Removed many dependencies to simplify porting to other platforms + - Moved all of the SDL event-related stuff into a new source file eventloop.c + - Use XDG directory convention for file locations on Unix + - bugfix: frame advance feature should advance every frame, instead of every vertical interrupt (every field) + - bugfix: allow diagonal hat movements for core joystick commands + - bugfix: modified SDL event loop joystick code so that gameshark button press is captured, and joystick commands that are level-triggered instead of edge-triggered (such as fast foward) can be accommodated + - bugfix: fixed the outstanding SDL event issues by re-writing the code which handles the joystick-event-driven core commands. Now the axis-based commands use hysteresis and there is a single global event function for determining if the gameshark button is pressed + - bugfix: OSD crash after pause-stop-start-pause of emulator + - bugfix: Set video width and status, aiDacrate during savestate load + - bugfix: in pure interpreter, Dont allow to override r0 register + - bugfix #52: PJ64 load state patch from olejl77 + - bugfix #268: use aligned malloc and mprotect to set executable status for dynarec emitted code + - bugfix #51: Floating Point Register data was not correctly converted when switching between 32-bit (MIPS-I) mode and 64-bit (MIPS III). + New code more closely emulates behavior of r4300 hardware. Fixes collision problems in Banjo-Tooie + - bugfix #272: rounding mode for x86 FPU not being set correctly in interpreter and pure interpreter cores + - bugfix: many games need different ScreenUpdateSetting to work properly with Rice Video + + +Mupen64Plus v1.5 - January 4, 2009 +---------------------------------- +Major New Features: + - support for Macintosh OSX platform with Intel CPUs + - Qt4 GUI by slougi, Tillin9, and others + - Rom Cache System (r636, others), by Tillin9, Okaygo, and Hasone. +Minor New Features: + - r1235: Debugger: memory breakpoint speedup + - r1170-1178,1181: QT GUI: translations for English, Norwegian, German, and Dutch + - r1155: Use configurable key commands for special emulator functions + - r1134: got our own custom test ROM, courtesy of Marshallh + - r1046: debugger: new r4300 disassembler from ZZT32 + - r829: jttl_audio: added GTK GUI configuration dialog + - r793: soft reset (hit F9) + - r782: jttl_audio: both SDL-based and OSS-based volume control methods are now supported + - r765: added savestate conversion tool to be able to load pre-v1.5 savestate files + - r711: 7-zip support + - r692: Multi-file Zip support + - r667: GTK GUI: user-configurable columns in ROM browser + - r659: LZMA archive support + - r638: BZip2 archive support + - r629,634: LIRC - added support for speedup, slowdown, pause, and frame advance +Updates: + - r1007,1032: GTK GUI improvements + - r970, 1019: use SDL threading support instead of pthreads + - r935,938,940: Gtk GUI updates for core and Jttl + - r642,655-657,663,664,747,759,761-763,768-770,774,775,780,781,783,786,787,825,828,931: mupen64plus.ini updates: Good Names, stars, EEPROM types, players, rumble support +Bugfixes: + - r1247: rsp_hle: memory overwrite bug with Zelda:OOT + - r1234: out of bound array bug in memory access function handlers + - r1222,1223,1228,1229: Debugger fixes + - r1183: Blight Input: sometimes the axis direction would flip + - r1133: Added stop rumble to load savestate, fixes issue 165 + - r1077: GTK GUI bugfixes + - r1063: rice video: crash in MMX/SSE checking functions + - r800: logical error in strcpy loop in util.c + - r798: small bugfixes in blight_input: 1. only save config file after running config dialog, not every time DLL is closed. 2. If rumble is not available on a controller, don't allow user to switch between rumble and mempack. 3. If rumble is selected in config file but not available on a controller, select mempack instead. + - r789: 3 glN64 bugfixes (segfaults on a 64-bit system in Perfect Dark): prevent clamp values from being negative, handle TMEM wrap-arounds from wacky height/line values in texture cache load and texture CRC functions + - r788: rice video: add checks for uint32 height/width parameters which can be negative, causing segfault on 64-bit systems + - r784: 64-bit problem causing GUI crashes - gotta save/restore all the callee-saved registers around the dynarec + - r758: fixed some savestate problems + - r748: Fixed 64-bit dynarec crash in genj_idle() and genjal_idle() + - r715: Bugfixes thanks to Valgrind. Two using strcpy with source and destination overlay, i.e. strcpy(p,p+1) + - r700: set ScreenUpdateSetting=1 in rice video ini file for Conkers BFD + - r694: require bash shell scripting for install.sh + - r686: fixed OSD crash bug after running a game, disabling OSD, then running another game + - r684: OGLFT measuring functions were taking a huge chunk of CPU time. Refactored code to measure only once and store the line size and the message sizes instead of re-measuring all the time. This eliminated nearly all of the OSD overhead on my PC + - r681: Refactored OGLFT to do color setting outside of glyph compiling, so the OSD fading doesnt force bitmaps to be continually recreated with calls to renderGlyph. Seems to have cut the excessive cpu usage of the OSD about by half + - r680: removed many unused classes from OGLFT font library code + - r676: bugfix in my BYTESWAP macros + - r674: Removed glide64/Tmem_nasm.asm source file and the project dependency on nasm/yasm assemblers + - r673: removed inline assembly sections in rdp_loadblock and rdp_loadtile, including their dependency on functions in Tmem_nasm.asm. Replaced with new C code. This fixes a segfault on some 64-bit source builds + - r669: string function causing crash on 64-bit linux + - r667: issue #88 - added basic view menu in GTK GUI + - r628,633: Small patch to get glide64.so to compile with O3 optimizations + - r622: Fixed segfault in Glide64 as per issue 133 + - r619: fix LIRC build to integrate w/ new screenshot mechanism + - r608: another couple of memory leak fixes from Tub, in main/config.c + - r605: fix from Tub for free() bug in main/util.c/list_delete() + - r587: issue #111: close screenshot file after saving + +Mupen64Plus v1.4 - June 14, 2008 +----------------------------------- + - New feature: Graphical debugger for R4300 core + - New feature: On Screen Display + - New feature: KDE4 GUI (experimental) + - New feature: cheat system with Gameshark codes + - New feature: search/filter box in GTK GUI + - New feature: Single frame advance + - New feature: adjust emulator playback speed up or down in 5% increments + - New feature: Rumble Pak support with force feedback + - New feature: Map emulator functions (fullscreen, stop emulation, etc) to joystick buttons or axis movements. + - New feature: Volume up/down + - Blight Input: Individually configure each direction of X and Y axis, which allows inverting the axis + - JTTL_Audio: libsamplerate support for high quality audio resampling + - GTK GUI: Removed second status bar which was not used + - GTK GUI: Implemented accelerator keys + - GTK GUI: Replaced custom directory browser with GTK file chooser + - GTK GUI: numerous small changes and fixes + - Added Mupen64Plus 'man' (manual) page + - Removed mupen64_audio plugin, as it was unnecessary and mostly broken + - Added NoMemoryExpansion parameter to emulate 4MB console; fixes some games + - Overhaul of rom handling functions; numerous small fixes + - Bugfix: Removed NoAudioDelay core option to resolve issue #48 + - Bugfix: check for stopped state in dynarec jump function, to fix unresponsive emulator when game gets stuck in loop + - Bugfix: GTK GUI: #6 - if a ROM is selected in the ROM browser and 'play' is pressed, emulation will start + - Bugfix: GTK GUI: #62 - ROM browser column sorting works + - Bugfix: Rice Video: Support hi-res textures with different scale factors for X and Y + - Bugfix: Blight Input: don't use 100% CPU in configuration dialog + +Mupen64Plus v1.3 - March 29th, 2008 +----------------------------------- + - New feature: Glide64 video plugin for 32-bit and 64-bit, renamed project Mupen64Plus + - New feature: Combine mupen64 and mupen64_nogui into a single binary + - New feature: ability to change icon size + - New feature: support different directories for install (plugins, icons, etc) and config (save games, config files) + - New feature: support for creating/using ~/.mupen64plus dir for storing user data + - New feature: support for installation via "make install" or "./install.sh" + - New feature: support for plugins given via command line option in GUI mode + - New feature: config dialog checkbox to toggle "noask" setting + - New feature: pause/continue functionality with LIRC + - Removed messagebox utility and replaced it with cleaner alert_message/confirm_message calls + - GTK GUI: Set parent window for all popups so WM will center popup windows over the main gui window + - Added README file with information about usage of Mupen64Plus and plugins + - Removed mupen64_soft_gfx, as it didn't work + - Removed Win32 code from RSP HLE plugin, + - Change fullscreen hotkey to Alt+Enter + - Only plugin filenames (not paths) are stored in the mupen64plus.conf file + - Modified pre.mk and glide64 makefile to auto-select yasm or nasm + - Bugfix: Rice Video: Make configuration during gameplay possible again + - Bugfix: many compiler warnings and errors in Glide64 + - Bugfix: segfault in Goldeneye and Perfect Dark for 64-bit dynarec + - Bugfix: 64-bit dynarec bug in genld() + - Bugfix: buffer overflow allocating temp strings for basename/dirname + - Bugfix: GTK GUI: Exiting via File -> Exit wasn't writing out config file to disk + - Bugfix: GTK GUI: "About" menu does not pop up while emulation is running + - Bugfix: Glide64: Refactored a bunch of inline asm code with potential bugs + - Bugfix: Added plugin error checking before emulator is started + - Bugfix: Logo not loading in "about" window + - Bugfix: Segfault in plugin_scan_directory() + - Bugfix: ROM pause/continue while playing + - Bugfix: Too many dialog windows when loading a bad dump or hacked rom + - Bugfix: Closing emulation window now stops emulator + - Bugfix: Rice Video: config dialog bug, now it displays proper resolution + - Bugfix: GTK GUI: "Toolbar Style" now works + - Bugfix: Glide64: changed inline asm label syntax, for compatibility with gcc 4.3.0 + - Bugfix: Many other minor bug fixes, GTK warnings fixes, translation corrections, etc + +Mupen64-amd64 v1.2 - February 10th, 2008 +---------------------------------------- + - New feature: Dynamic Recompiler for 64-bit + - New feature: New ROM Browser for Mupen64 GUI build + - New feature: LIRC remote control integration for NOGUI build + - Added R4300 instruction counting capability to 64-bit Dynarec + - Added R4300 profile data output for 32-bit and 64-bit dynamic recompilers + - TLB Optimization / bugfix + - Revised makefiles to support PPC builds + - Bugfix: memory leaks in mupenIniApi.c + - Bugfix: corrupted filenames being saved to disk for mupen64.ini + - Bugfix: crash in jttl_audio + - Bugfix: crash when running game from gui after first time + - Bugfix: spurious noise blip when running game from gui after first time + +RiceVideoLinux v1.2 - February 10th, 2008 +----------------------------------------- + - Revised makefiles to support PPC builds + - Added more logging to hi-res texture loading + - Bugfix: Texture dumping now works + +Mupen64-amd64 v1.1 - December 9th, 2007 +---------------------------------------- + - New icons for GTK GUI + - Removed GTK 1.2 GUI build; GTK 2.0 is required now + - Added file pointer checking for frwite() calls and error logging + - Added scrolling to the the rom list widget + - Added main/version.h file to store Mupen64-amd64 package version + - Print joystick numbers along with names in blight input to tell multiple devices apart + - Merged okaygo's TLB hack for Goldeneye from Mupen64++ + - Rework GTK GUI config dialog; fixed bugs in ROM directory list + - Bugfix: segfault from playing same game twice in a row from GUI + - Bugfix: segfault from fwrite() failure in dma_pi_read in memory/dma.c + - Bugfix: exit properly instead of segfault after dyna_stop is called + - Bugfix: blight input: SDL_PumpEvents must be called from thread which initialized SDL video mode + - Bugfix: blight_input: joystick handling caused glitch in config dialog + - Bugfix: makefile: 32-bit CFLAGS must be used when doing 32-bit build on 64-bit machine + - Bugfix: Added makefile to root folder for building releases + +RiceVideoLinux v1.1 - December 9th, 2007 +----------------------------------------- + - Removed configure script and config.h; added SDL and GTK library checking and handling in main makefile + - Added capability to load 24-bit PNG files into 32-bit texture buffer + - Added more error logging to hi-res texture code + - Added combiner type logging to DeviceBuilder class + - Bugfix: added quotes around BUILD_NUMBER to prevent segfault on About box + - Bugfix: SSE vertex lighting inline ASM code was incorrect + - Bugfix: makefile: 32-bit CFLAGS must be used when doing 32-bit build on 64-bit machine + - Bugfix: segfault with hi-res textures (incorrect scale factor used when creating memory buffer) + - Bugfix: modified DrawSprite function in RenderExt.cpp to eliminate gaps between textures in Puyo Puyo 4 + - Bugfix: opengl error in ApplyTextureFilter due to wrong enum type + - Bugfix: Simplified fragment program and removed ATTRIB parameters to fix problems on Intel X3100 hardware + + +Mupen64-amd64 v1.0 - November 12th, 2007 +---------------------------------------- + - Forked from Mupen64 v0.5 + - Ported to 64-bit architecture by NMN/SirRichard42 + - Fixed texture cache problem in glN64 + - Print more information during plugin loading process + - Added blight input config file for logitech dual-action style controllers + - Added SDL_GL_SWAP_CONTROL attribute in glN64 to prevent tearing + - Changed glVoids to voids due to strange compilation bug that occurs on certain systems + - Totally refactored makefiles; now plugins are built as sub-modules + - Better logging for R4300 core selection, disallow Dynamic Recompilation for 64-bit builds at compile time + - Set execstack attribute for all mupen64 binaries, to prevent segfault when Dynamic Recompilation is used + - Lots of code cleanup + - Removed 'multi-user' mode of operation + - Removed 'configure' script and config.h file + - Refactored plugin loading code in _nogui build, much more user-friendly now + - Added comments and SDL shutdown code to main.c + - Bugfix: fixed memory leaks in plugin.c + - Bugfix: strcpy in main/gui_gtk/config.c should not copy overlapping strings + - Bugfix: blight audio: only close down audio and timer sub-systems when exiting + +RiceVideoLinux v1.0 - November 12th, 2007 +----------------------------------------- + - Forked from RiceVideo 6.1.1 beta 10 + - Ported to Linux by Hacktarux + - Ported to 64-bit architecture by SirRichard42 + - Added rudimentary debug support for Linux + - Merged all Non-Win32 changes from Mudlord's RiceVideo SVN 6.1.3.2 (mostly hi-res texture load/save) + - Added more logging information + - Tweaked Z-Buffer and Z-Bias (Decal Z-mode) handling to be like that of D3D renderer + - Added screenshot capability for Linux build + - Cleaned up Makefile, added 32-bit and debug build modes, help info + - Removed all Win32 code, massive cleanup + - Fixed uninitialized data members in several places + - Bugfix: crash in Banjo Kazooie - dont delete cached texture if its currently loaded in the g_textures array + - Bugfix: crash in Carmaggedon caused by illegal values in texture loading function + - Bugfix: screen flashes in Mario Kart and Kirby64, tweaked .ini ScreenUpdateSetting + + +what's new in 0.5: + - Core + + detection of invalid code cache for ambiguous region now use + adler32 (faster than previous algorithm) + + fixed a bug in ini file compression + + added support for framebuffer effects functions : these functions + are there to help the plugins that support framebuffer extension + to zilmar's spec. These functions are based on rice's idea. I've + worked closely with Gonetz to implement these and the only plugin + that support this feature is Glide64 0.8 (when option is enabled). + Many hard to emulate framebuffer effects are supported by this + feature. Mariokart's monitor in first race running fullspeed and + puzzle effect in banjo's intro are two examples that i can think + about but there are many more. + + detection of VI interupt rate works on weird country codes + + better detection of self modifying code in dma + + warnings fixed on new gcc versions + + rsp's dmem and imem are now contiguous in PC's memory (some windows + plugins were requiring this) + + slightly improved audio timing + + better detection of self modifying code when accessing memory + through TLB + + fixed a bug in RSP memory write + + reading from ai_current_delay register should work even when + Count register is looping + + in interpreter code : fixed a bug in jump opcodes (detection + of exceptions in delay slot in some rare conditions) + + the event scheduler has better support for Count register loops + + better AI interrupt handling (for musyx games for example) + + jump opcodes changed in pure interpreter core so that they are + timed exactly like on the other cores (easier to debug this way) + + fixed a bug when accessing memory through invalid TLB in LDL, LDR, + LWL, LWR, SWL, SDL, SDR, SWR opcodes + + added LL, SC opcodes + + two consecutive jump opcodes doesn't crash in the dynarec (result + is undefined according to the r4300 manual but some games are doing + it). + + basic implementation of fpu opcodes in dynarec + + division by 0 in FPU opcodes is returning NaN + + all jump opcodes implemented in the dynarec + + faster inside function loop with dynarec (register cache) + + various bug fixes in dynarec opcodes + + memory access improvements in dynarec + - Linux version + + GUI and all plugins have been switched to GKT2 (all old plugins + should be recompiled for GTK2) + + detection of GTK 1.2 or GTK 2 in the configure script : if both + are detected, the user can choose which one to use + + configure script rewritten so that it's compatible with standard + unix shells instead of bash + + much improved multi-user install support : if multi-user is choosen + in configure script, mupen64 should be compiled ("make") and installed + ("make install"). Then, when a user launch mupen64, it will create + automatically a .mupen64 folder in his home and put all required files + there. + + language saved and restored correctly when quitting mupen64 + + the console version (mupen64_nogui) has command line support and can + read settings from the gui version config file thanks to jogibear's patch + + autoincrement save slot option when quick saving (thanks to jdratlif's + patch) + + speed limiter in the core + + support for plugin configuration changes when a rom is running + - Windows version + + autoincrement save slot option when quick saving (thanks to jdratlif's + patch) + + stabilty improvements on the GUI (when closing a rom for example) + + added support for readScreen function to support avi recording feature + on plugins that don't use opengl or directx (ie: glide64...) + - Sound plugin + + thread synchronisation improvements + +what's new in 0.4: + - A totally new core based on a dynamic recompiler with register caching, + it doesn't compile the fpu yet but it's already much faster compared + to older versions of mupen64 :) + - Self mod code detection has been improved and emulation is faster now + - A lot of little fixes that should improve compaibitlity quite a bit + - A new video recording feature (record in own mupen64 movie format that + can be converted later into a standard avi file) + - The windows GUI has been redesigned by linker + - A lot of other things i forgot... sorry :P + +what's new in 0.3: + - All versions + + General speed up, 10-20 in most games + Save states long loading time fixed, now it should load in less than + a second + + sound sync is far more accurate now (thanks to Azimer) + it makes some additionnal games booting + + 64dd detection to fix F-zero + + a little idle loops bug has been fixed + - Windows port + + Configuration and initialisation of plugins now can be done prior + running a rom. It fixes numerous configuration issues with plugins as + well + + Recent roms menu with option to clear and freeze + + Command line arguments support with option to run in GUIless mode, + compatible with 1964 options, read more about it in pdf + + Choosing and saving of plugins used per game, access it from Rom + Properties + + Reset rom menu added + + Speed Modifier to allow game to run at any speed between 1-200% of + original + Use + and - to increase, decrease it, while in the game. And . to + return to 100%. + + Start game in fullscreen option + + Pause emulation when idle fixes + + Global plugin settings (should be unchecked if you want to use plugins + per game option from rom properties) + + Switch on/off ToolBar (ALT+T) and Status Bar (ALT+S), useful when + plugin sets wrong resolution in windowed mode, and for those who hate + toolbars :) + + Selection of columns to show in rom browser + + English language template updated + + Support for debugview by linker + Put dll in the main folder, if you want to see log output + + Tonnes of little fixes... + - RSP hle plugin + + mario kart sound fixed + +what's new in 0.2: + - Core + + better sound plugin integration + + optimizations in interrupt handling + + a totally new interpreter core (half of a compiler => far much faster) + it caches the opcodes when they're decoded + + self modifying code detection code for the new interpreter and the + compiler when it'll be implemented + + RSP plugin integration + + pif2 implemented for banjo tooie + - RSP hle plugin + + the first version of this plugin based on uhle sound code + + 3 main audio ucode implemented (based on uhle) + + mp3 ucode implemented (direct asm to c translation) + + jpeg ucode (direct asm to c translation) + + boot code for btooie and dk + + on windows: ability to use the hle part of a sound plugin while using another + to output the sound (example: using hle from Azimer's plugin and + ouputing with Jabo's plugin) + This option doesn't work with azimer's audio plugin 0.3 version + Please see more info about RSP and this feature in + readme.pdf in chapter "3.3.2 Configuration" + - Sound Plugin for linux + + a new lle sound plugin that's using the OSS api + - Windows port + + Major cleanup of gui code and bug fixes + + Gui improvements in rombrowser + + Gui changes in configuration sheets and about dialog + + Updates in language support and template + Dialog with proper credits to translators ,send us your translations now :) + + Support for screenshots from menu (depends on video plugin) (F3 key) + + Added some shortcuts for gui functions to accelerators + + Option to choose directories of plugins,screenshots and save states in sheets + + Auto limit VI/s according to game region (60 or 50) + + Ini updated with latest N64 releases + + ... + +what's new in 0.1: + - Core + + sram bug zelda oot fixed + + flashram is working + + a new interupt system that'll enabled + more accurate timing in the future but can cause + some compatibility issues right now + + bug in DMULT/DMULTU opcode fixed + + some optimizations in jump instructions + + sound plugins support implemented but not well supported + use sound at your own risk :D + + a clean tlb implementation + + tlb exception handled correctly + + compressed save states with slots + + the whole memory map has been almost completes + + newly emulated games include goldeneye, conker's bad fur day + and perfect dark :) + + - Windows port + + Zipped Cache to Rom Browser + + Multy slot save states + + Md5 based Ini + + Rom properties dialog + + Sound support + + Config plugins dialog + Allows you to chose and configure plugins + + Multy directories in rom browser + with recursion as an option + + Audit roms dialog + + Many bugs fixed and minor features added + + ... + - Linux port + + A new gui made by Blight very similar to the windows one + Everything in the gui is new so one line many new things ;) + +what's new in 0.0.90: + - this is a huge update many games are playable now :) but only pure + interpreter work on this release it will be fixed in the future + but currently i am only working on compatibility + - i have totally rewritten the pure interpreter core + - nearly all missing opcodes have been added + - interrupt code has been totally rewritten and should never crash now + - tlb code rewritten, it's faster even if it's not perfect yet + - some fpu opcodes have been debugged + - fpu precision emulation improvements (only for x86 processors) + - many bugs to allow port to big endian processors + - fixed endianness when cpu write directly to pif ram + - rewritten dma code for pure interpreter (with this core it always + work now ) + - update dp status register when a display list has been processed + it fixed a lot of roms + - implemented 8Mb RDRAM + - implemented memory pack, eeprom, sram (thanks to Jabo and Zilmar + for the pj64 source code on this part) + - flashram is partially implemented (it's enough to get zelda2 starting) + - a new debugger for linux was made by DavFR (it's for linux and + it uses gtk library) + - zip file support + - a new gui for windows port has been made by ShadowPri, it features + a rom browser with *classic* UHLE look,multy directories support , + a toolbar (thx Schibo for help on it :), multy languages support, + saving of configuration, .... + - and much more ;) + +what's new in 0.0.4: + - a new pure interpreter core (better compatibility but really slow, + will help to debug in the future) + - input plugins (a basic keyboard plugin is included and the obsidian + joystick plugin ) + - coprocessor unusable exception implemented + - gui for windows + - again many little bugs i can't remember fixed + - automatic comparison between two cores via a pipe (for debugging) + - .... + +what's new in 0.0.3: + - unaligned dma exception fix + - a little gui in gtk + - new opcodes implemented + - memory map fixes + - better initial registers (this was find in the pj64 source code + thanks Zilmar and Jabo) + - implemented Zilmar spec Gfx plugins + - included : a linux port of the tr64 plugin v0.5c + +what's new in 0.0.2: + - MARIO64 works!!! + - sound temporarly disabled (Just to not hurt your ears because + hle audio doesn't work :) + - various speed improvements + - various stupid bugs removed + +what's new in 0.0.1: + - everything it's the first public release :) + diff --git a/source/mupen64plus-core/data/font.ttf b/source/mupen64plus-core/data/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..58cd6b5e61eff273e920942e28041f8ddcf1e1b5 GIT binary patch literal 65932 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

B-* zC^QzD=7A5@!hAMQtdbVU3v~1J<@)*N#pcD<8ljf06jwpfN)(KwZpZzF^0u2a0p-|!ObcW!}m_*E{=TZbfN8XRDk9()43 z^bP|YgmykD6|i~dJ`>KjIO|O5Cb*~wU%^FHpFlKXG(&K&oz_fa8y~g3ucYqeTf%SN z{1Bc(gOdw2D+D^=XD)Ul1RKt5us+a~pieM$7kcY^nnvg+N)PIbg-7)Bgn6bKVTn*H zt=6wFZ4%ZCTcoG-n@yqcQkY(+GawWI=Qhw_x5U#9LL!ToI_MG%i6*zD2jN~o=NqTVAwyT6x1cLziBqm2}Qk#f_k%@{ls=PlC&v=#|>^ zqfp(vf`vn4HbG;4gEgfmn>-!7yMh)DKqff{^y%D@L)L=mk)TU;2341;ak^hu8^p-f zMt@207kUWELNcT^Q}75L$)kTjctCnUUnD#(Y!vJPG=xPO<7p!6MSC-k5&L#FpOqVT z8~N!FQzZ@BSG<(Jc``@lvoS78Pzkp`_uJ29xQTQkS-A(w&s@((;Fma(i2kv z3(?z6Nv0mGk3P*blnvL9HjQJG^u?@1UuK%e=Ia-mcAEk?XK+3NJJN$jRf_dZIqdA+ z0qjWAbm_|WyJZKriyJs5Ja=LuGSqZrtj8uEkdF!n$V=GFv%y4<6Z{K2_R9kmEdfy^ z_@NuP#Uk}!7=FXv9km8sKhZKgGE_QSnPj|$9;S#*su^0-{f}qemoF9!2Y?1 zP^L`${(IT~$3NG}B8T-V+m9>9kL6!KYIHDj2H!2_{UBOk>`|Q z%CK_+groTqU9HSPQUfIZh7vCND~GVVxBZqJfK?RjJo<7OWCedj|GR%w4%O9hYz~UI zgjI4eT6Xgo=rQuL$c9j)GH@io1#g@d$z?#{{&)aifwYWjcN16f+R&pRvK4EpZYa&mEorr04tO+!eKo(>%=uMGK@1GG5dR@2-+oXvu zeC{U1Sy-f$cxB}%yZ{Ol}D6Emb=TNmP9OxT;g65 z71Z`DaRBWFHnoJBquRyZh1Wkjw6tv7iN?mXQ!5XhZ@x=~=eFb>&nS<}K77x+HXc zXhSI9ytTN-JPyx;o$9U$@mTgv_ER}8pE>h#&QsZ=_D*SrgV%-1fs|Bi({63DFBf9ZpjQrxyHQ9u(84 zb-Eq3cwkIrrk3y$(DpomJ=56O_oc_q-@AAIv6q_9f^7TugLLe;F!iS!`wR2w5UR&( zNWS9ol84cfS8g#Js!WJsBZ5Z5d%I zh^N(4AWl5(X#2K$Wba8#3oj3E2>&4bR=AW#(rB8H=1L2dI_r}3NrukGGEzp%gfdrI zsA0;ZoWN0PT19Ih89P!PBFs1f5f?WdHD7#X=GkclA3UPmR?gDIrZ1?jQP{h3`w6Qs zb@J_SdZhAmXW_>q1*2$^^5KaiM-IOx`)|vcQBc>E#6GOce)V~k z2g-PHGI(G@w##swA(+Dr&Kkdf6E=1tKBh6@l;MQ!wUF@mV4^n-IxB7~zS_RQY;O?&rls^8nFD0lJ?J@CM; zF~2?5=jdanv=1?6LYoCr+flJm;-5!k*@bgk8ILy}qZpR`ze+RaE#rr{7y(`U1?$&!szI zSNXd55;=u)X}w4?Th65sx5fJAdqyqI9_yP&fcY`?TaEZn%)8ql`~MZ=-TOotua0LT zHZsH$W)gJ7`np+HE4@ZenP0N&?UFp&LiJ{nX;+V|uS3a0k$?~UjFdA06FEGN97mp` z+@Ve6?+XHJ6F&Rf%x)zk)mhhk^ybd|ZE}adLZUbYcLEb5tWV;v$AV9hExur|o@BNU z24DB>kocK!yI`rx3ev}gX}r!xb9uuN4kHrTkPNBEir^gc6neI zZXpj&o;)GMeb;Z%=vT-VfdZSBIKIbX_r~kX zrCSJ5s_X)*WdEP=d&DZObm3Sv(PXkGUUnLSY(x&%xy-fUZq^ujD%h?g4x3&t=Q#AX zoUkC6q8Mndl%^)c>r~IUfB);Z)i5p>L62W@Y)))>?E2USyxxfYEcRZk0Wzsdp{uQA zwu-1r6Vb$sHl+eR?MsSYg*QJKlJ< zxmL_OJbl_@UJS%SVBm+-xOVI1)Gx0WZa&rZaxBmFdnB0Ow_?2D{OXFq#C*YMI)9F; zZvvrj{Nxi(a>Crm^DCXU2bj~9abJF=CnhbpnpDe+b&K_jvDaB_sx~jSEVeGTEw(Rq zR684jZv{I5O`DXPc4?TEn+`o+zwywajkl;%xq0jF%JR!NLdJLL> z@s|i31n`{QRFyP5Jru4*JC~#K#EBNqLg?*tH}*FlmW>D7_!jg#pUDLETC}wao6qlQ zw5h%nT|I@~n`(T6X(+;+_=KDUKj4*MM&x8w=Eq1+cV`Gc=(|ov%Q7=6B z)4#kj#fF1&4wCHgmk~X2;JT%?(QryP>kVR# zMKseJ#DovFO7yRBtqS5kSR8yXUlempsNSm6`$uPV;80y|7sZ5Ah772G-sFo@-3e+@ zO!bq;cM|yKb#|CB%oJws3fH2usk6DCp`Wpzsh`>8CTb@WT}PjYn(=n&B% zGSQtF6`N3FtTEM?Yb;IzdI^GTlugXcEX>Mm%+7*Y2n%IlxK5Rjl$e(IaN^>`C5h`3 z8xn6N24R!EnLb|&DiSf{gYR%nzkwJ^xl8}aq>H}iqGUPTT}GB z=lQLF`CaibG3{`N4!OCWtSD>8ZL4-3kBND`M~_JljL3md zcoYiWXdc3CPEW%9u?`uz1=iaodL%ppG!Q^5Ueb>{rB!F8#- z!=EKFt{aBHAP))hP|^lrkD%xC8<0uD4-!IHh!~H6Y9dP%-TEG+2kp!HiU^<}%$LQo z#7t?J?9q=W&Bp;PJ9ca(?jhKjBw-PoFD?Sp7t0HEixD|oU|4LZ zHqJFIGS~7Gc^q!>6=H1qPWFOrl>|xJ~&r1j71G?w+d(1Cd ze=EGiUK8=#0fslMr-gUe1@V1pfhs7WG!_47jETmKZ~XeJt6zWBsC;tu?>}6H$ZTda z`TK4I+uSr0#O{YRhhKm|D0i|aQ{utfK#8aPI%<^^8cgAuMz7J_a?nJC?P`-n)}1Q5HNqf2SdgMV8ZEv zPgJ%VMbQ`{x{UG00b)1fIB|k*qOsUGmo60N>Z*)u#bw5A;%;$^?n&c%<34&od{Nx1 zd)C-s3`3ww!cm0@L4C<(2r==HaGaqd0>X%zvtCkn9S`FtTe4WDlwlZd@>p<8LMI86 z*aT_3JV`fRKi)9Olw&Eg%%_VjJLo3e^K_5yh~@W|&n)*WNnnXV;1ORnEH4%+kI;ix zm6OWJtMp~1;wnv~iDF*!XU%WXMrD{VTnJDer97540GEgXk6jfGjY_V z2B%u0tgS~%>S+qjiBr^j1e_;&l@oS#`P$)?wJcwi6Zj5jQSRf!E!=EIDpwZvtZw|4B*b+!A zOt@QgONmH^h%?5TV$BJbj@FJgx1$&IEkf2}veety)6~=4+tSC{$Cm6EL_8D$Y^0}n zyvsG+kYOBZ$+BkIJdRxQ0DV9h$8y9RaBUp8Ho-6fOLm-jl68_T$5Bj+g&D>YYl$t- zQLUeEoo`!3o-nL1tuU{$tg^1MZ8OxH>do7&+iiPHd(6*UpSK-x{NC}I5)v$PqHwFKf!s7g%2QJcLMcf}2$4XJ}@8MQEX5*(|-W;WL zu2kcNp+c5UGU;umAQr0cq<5QoB1oQW;xx=qX*gIv0ip7TO?fm=C}w$Lo-_^N@+GDh zO`%-Pv;@o_Wiy*c3dfoj3CEg?#Jv4YpKRREkOM}EauheT{gH9J%+o#C<}%4~h7h|e z+$6c97%?3%AiVpg!F9mzr8u*}D8&W@lW?QtC-@V0@L;1&io>lu9-)DA15cH2t@#^! zZCrBYn{7CU{KmGgvL)<}{9|AY{qDv1C`|PfiMv1p;QniT!c$MxEke9TO|QhCfK)MX z;7#wn7JNY`L2Zc(L53drIm$S=}GE%efc z(?xZG?$6Igxf;*jV~Ot{FGEtZeeQHJNEYJvVFJz=7*# zJ@-@E>*MQw+_^3^c->P!uA5M|@zY!Nm338HzW;O+_;QtALI!;|w1TXq5EU9aG02VBL<69@0+~m^5(I*rTH}`m2v4$-R5fR>)P>WeZR<;0lhd zDI=%o9Pm)9nT=?il|+&Ao?NrTVh#-pwK~E=Bk&G)goTA#98tC?v%_k(*`nMITT~?f zo^B4cSq$tgmm#9wVp!)6iwF-3az{p4oU#?$!ca0kD9k30cZNkpa|?MR#eVrF4h`_~ z2{8{t_W$~$o2cNpw;uTWPEEZ59sJQsuoH6Q7-NdZ9b&FD?=bU>v(TKFVoQm2j-}eV zAZ$VST=(3lB{60!*tR=ghO|4L+TptvqvboZ+(~Jk2@})OCT&%22~o<#0RwkeRy>{7 zU+~xRpXJGElO_yGn>bPV2NI#P6DzYS8=kJnoSS%OwVDzQ%2q0Kc#bhBi-ZqOS@J2x zu?}i@F6?UEBdF=1)j+g&(K%X;l&YJGnr_}2i70A~nh~b*DaBjEXo6a!W_GAGy?r(0 zrdp$(;vkD5f#)OOKOI?%p9tg-{JduHuhx9rt_C+tTSi;guBKO;nm@L!K^A{&pKIQl zN0mAJbOJS*Uf4dxFJW=m)JVJv^{^JGSN}@QVDf7 zQAYz;@E_+7e)Y>sgZ4Fpf3@c0b~PLV-)QUF)o=)WHGlNhsQX(L0@z?L1o#~@K=AXL z!TcA_ezE4`b~PLV-)QT24K!V!d;J*lW1veCkOM8AFycofn?mt4ylnqCe4gBW-l!vz6eO8>Z4Fo6eusLjinkN}T+#ZMg zj_Wje$GjobFxmMan;aCXUSxq9y^YMKc30u>0~&$+1{@DtVDSqir?fODr?hOeXKtsi zT~E~19&41!%5p}}o;`YW`Ori18U&^Va!5IgT=uOv+l?X*cslt7_!FC% znshiYGTCcvE6peT1578vBf}a4)9q16xb31!EQvCt~gnb+L>=Eq4R}P_>tA-6)HLCdU z{6_cRi)q%XmirWhpe# zG|(@U&;>V*%Z9NZf>v=i@~G|GNZ~^94OVm%{33iwJ z<1&z%NDmXLUVREvT@L*2h1cac#&Ze7 z5V|x)-Z*>qqi+Xnk&YctOx$t#<2ohj;6eIf-AyX}Ba+kqp?d@H`-D6@b|Bf{>7SI` z5&yTk@Z_GNCE%{*vX?KfqgE#khOi{ zgiU>mAN@4=qa{-w?APzTeOcSs{;rd|j$BdO<-x8aRtg*UBqZbvom^?t&)Z%!c})+$DV)wu|w|s1V zs(uI_a}wF^N$!#mWfoZ(w z&(kv_eQ;XJxnarY`V1fZzPZo)&dL_?J_sOqu%7 z)Gr_3N_Dem&zd!Rw(`@~t;$c@Gu17st}dN0vG~a0lDwe7T~{4i+AphT`VOgh>eQ)U zEnE8K)Ts|YJax(!%U66kW$M)FrRaTU`&Q-d?AfJwrqb5!RK~M1O}Q~}#K^Si^A?OR zcj!lDefD8qsxO@$=rE_yOk!_PsFZ{n&2jle=FS`hL(k@?PvYbFcg%1Cpn9 zG{{4y;^wGxI5K+Fi;D z1)ob_mR|qd^E*5X(+980{Nvrbf6Q7bUHmnYO#dYU{&Q)R`^BerAC8P(93FQ2gAacQ zgWjbHY@?is^=`(A|3FU^#ie+o=(HlZc+LWYj+6;$8Z%5YSqf~^{0bZ{HTmu`bgP-F7Q!R*Z%lE^L{@wc|+a_353Li5CTC)L<^{hC8O==)e2QFYBg{zy;UlYO#a{Xotf~^d++alKL3GPIdjh5 zXYak%+H0-7_TFn(NRTxz_{h&mXT*~OALL_}P8G?u)bN#lTw=YGu4layW!L|<-bws{y0zix&Yxqs(?g<9 z-ZNgUFGeg^nKyr2R%5?wP=B^))0J^Lg4Z3v5DYR5)=7mdq!Kq!ES$upYqF^U&#&0L z=7kh`Bfhg_Ok8`{ypR@qNacYEsf5eOI}JXDX;}EWNL!>^WL#vj+^S(}UgGcRroR1l zbotwFn>=s5^_IxU4^$C$ejml`#O1+Uc)0Ysy$0;|cI^>YuBo z`=@8l?XyBH_1}|O-^UJJWW}xp*~fz5aH4J$rkzsE*euOx87b8%W{788W0uZbWO${k z^75x|!>*vBqqjUW%P{fW*5H-0MQG8h zuLiG_JwuCL8?kYwX4x$JTduoi*Q7URMNe_x&^6cWnh3ldRY#3`^{Xf( zu)@!kpK1uWi*f=P?woQ5e)&u#zTV|AC%No55W@q;rJ#cTEO2JTWAc~-mVh;26OU=SC(E1V%krlur3ccJ^L6?9e0Wc@ zu{1s3l8=cE@tu}<%DiR1G6Ya7!K7%Ft_sW4vGCVaZmzOaS*vV=U4z|&J;S`ie8c>M zlLiL{Ctn3$;8k&d>Q$Dj;7=Xx8toqKx!!xd?|T2}q|t%V$rH9^y^#Gv&I`FO6uwaO zLZ5BL=)AITCZ+<#X%n*qI3ozNp+~;MT7;C34M+4px$ME4W~{tt(zplqT=u~DnN7HQ zu=(m=PJL)6A_x6^uY2jjho}?fzEn{e3sN-THtJ5r4fi{aAaS>6~dZ&M@oKNHYkPiWBTEGIS9u7b+Ga6kn0- z-!rSh$qWwF(l}I0!wS*3KfKR_?q>IM?#=F(-Nqu!G8DOrJ$<}=eATWR&uYg*zUQ33 zcC~t1ye@H~$;v)ximDy#&sA3M}7#@w@5s6OIHs2K8rdgtIyskB9%XdZpi0hYc z!bbFPv_=azRQ{p?duK-IUh8_L;TM&Hp%7+yKEo^kj%W!MAY6bx*`&8R^qS9YTAi6J zQ|{{bIcZj(OuJ{vygMTZVD*L=_gGniNSi0P&w@*XUdhUxmb*6>%l|H#f@jZ*EnzKW zT*Ja5Z|K#BS3mLOt9b?1?9Ad(c~^~dSFEd>`B+JGg2~o3a@`ZpKd*cA+%vT`cE=Mb z$z#S|fBl#-UGE8h&F=oYez&m{{@Y?z7fe${Io1qQQNV{I-X4U<7 z^~<`vF8US%SG*X#`u$(MscE--d{<*My7#UIxFkW7wCKIq4YM1P{MKNS&EU`(&Dav| zupwA7Vj`Ikt}hmv!h6-Ln z)HGP{vOlJK3^!MrM0rUF0qo>OFS2UYhR$Y-Jf)yG_)d8e;z#Bm)UiJtlpR%{Hr@XS$&ZEzWZ>hqjyGnT55_Z--lp~ zIzwJ^z?hrmbL9DE8}qXAVW-HZOHfeMcp_3F_V3G@Wq1KELmUL^L7pq^e z7(kzrlpOG4K$V%AndZ&wBb_o2YfZ@m1FI29CdMe$j8iPyCl6{S$FTa9Ic|4ZwYPsk z@7~qv_bdS%h(}UF|gB&KSXP(Po@cw?!^)p5c z%_(==Y|%5i7w)Xl>9yBxx?!?S4Qg9TzYClT-Ti~eeD%F|gLGUZBkJmKMaA#`n zJZA}-fRSBA1;YsnslioWe=1uV_I&l97~;vy1Xuus7VgFLR#ne{4a=R;y!aFi7H!CY zS!{r+wYnF&#_B>(_G`X%HF%&&HkZoY=iFAXmHW6 z5vv!ke%Nr!ExEZ(nVBz~yz=_sbdHq&&+wEJo zuGLCj#gf&BqxVMN{$uogM6%S&oQHWK*65iK;rVh+AH1@tv|y;qsRpzZBtIB<$fsId zgMB+P)A~PHy0b*T!_{uS%=T(l+9L(S22>ZC+^V2D(_H8dD2sDwp~YQVZOOfA7{tsw zhtAa^0w&rMpTHuc>=AXe=hJft-wJktNbq21g?JdH;pM?q<$cThm6w+HFE1-E5B3fA z3zi1^2g`!xWBZQnH@0+a|FLCb%OB|bK>5mGb8vI;h2S58`+^_i-^pMvcp6Q^oWoqh z+{VN^68RH(vAw{w(7DjH&^@i+w9;w)riZp*?(nOFK#=aHENCp z*Mno0hU!JiQF`XZTV?bKh8e1vUeSKN=I1+HBSs(k(SK+bY*Tn=`|LkWpT2MIZ@#^5 z)ccS9{=kJBX?}e8AF)j~x+i3Rf>u6xYV_!t$-DkkRfXLP%kN#bto`}(J8PyzQ{%gC zK)I3K&lolsUW<>zJ`L9P?N^x9EB!m;upNcY9qF%rXB>u6STD0L?}lQJFXbv3hk@lP z;$sXUM_e(3QeRy(4vWpFmj@U1(T0^yN}7;4zSo58xq+EEIBUkxWNf-%9dMJQ!C4<@ zNN>t$%53V@)VnFGDZ3%3DYq%FDZi3VX`zhY#`l`sXO5cbpMf!4 zy}FBIxHY|>OkJPxGg&U;OF%yVn;NA3r#9 zLI0m!*Kx0gmBy6=p1=O3>)u=@tB(g%K0gMw4I(}2e+PRt8*1ypU|DuLHny756sI>- z&i#3gC;gA)ttv3(rX^dAno7?_r~)lFGp7)N36l{i?ZhF*c49{dj$<|&P#pa;dIE3` z`yRHB2ab@$;y5haxODnGXuk`aeeW{eWxglVD1MMwjI_9d<3=P=9uiAU!mc8)TBY{& z>(!Gd53am_{+Mmkrv72ps~?Y=G_kx8;k5R=^_F48h8aJ+dE)m*P8+DX5S{O$QxocV zYJzT+!GaL5dbBbYnU4!hzy2RiO+drqI|dWy99+8cq~}}(O%|f&dHt1sox-^afoGBo z??n;c=P_+Y^cSLOKhUzUMqnz&zbQeRVS^4q@={=WA@C{v^m|04iy@BD$Ma{O(@(|X zsV61h(C+t)X{JVu!%Bjw*hP+m4`9aV6n2#J3X(*|t?L?sw`WBsAeclFtfz;AK@23_4sTlTG}*0g zFnfFVP8*))Kw$UYTDq;p;(yrpd2)+edsuyLXvz7RJJXWiyBCZrhaI)DDIbifSS|Kc zAjF*X!c*demVSwEVg!>?A-gzWSe+lfTxwUvXPC@9oIz)j&Jl}NTMfp@@pFi6)D@2H zH*HB;EvCTUXd3+5&cV~m2HakD`~2KB-)bqt^56Vf6?E&fy)x^66pcLA^+5F4!9enJ zIXP>d)3rUOjo$u-PsWuvgylp1*RcDCU~gSk|E!u4RhsLU6&$@wHe6P-As5Ry92@+# zy;Z5Z7Q?ijScu|Fqz{NbGaFZjOlZ+9 zd}+*8L*N)R4ZZdzxisoBH$7Eihnv}$Kg@F&>YmV-B(W&|oUH|x4 zcjcM&*nPjp=sq(HZ{DaLH54E&CSuA$;*8RNA#tC+i0$zH0#(JTW6TVhY+vAD4(k^d zt3&?StWLAj@`c B$Rw4SzSQ=Ui5YQD@exg+`lsp<{syr;k8E%leX-35St!f~_w0 zE+oQ7#)2sDcnf$J5l7M=`(r4OGbW;a^J0GtdAqP3@9SOKGvl;pdM;&LxEn1QdA=o% zFL3gR&1(MwQI(uuV8y5dO~9H_;}?j@pw}6`z#eAP7wA<+G+EQsa0lW|u_X?RW>l7i zHnX-+uNI*twdXLfj~h=sP9@P2S+scGFOg_LqD2UZDecg-g4mzk+TmzlH020fO#yvM<9Eh0h*iLr84cnyC5N%zvrpX`>Y%TJrOgttP z<>IVPeDyy)bV%27`0$yw!-u2%$Qpv!+9Fv2lUQ|Rl2u1NPha(E z1*}vu$_g0Z8*3&k4(KWmJQ+iRS@1N&&#YFZikI1%idaPfxR<@~G6&L}4C)65GdKd> zFSb{J27$y+Pk4(1ITHRy<)q}r{#KgLB%<1#eJ^@_^a^d4_TsEn(OnWoUb_M=Qzhg(TzmI;0r9HPG>(w;> zBLhq-IrlQF8zDBXxy)z1p|3CVssS)rWGgjo%$Opjafx+P3DXj+T^=kLR&`s|qN+_* zd#mZQ=es>BY}1@jlo zPwZ`4c;~!D(W9#qd!IyODeX&x(k%zZJg*>}z?YbQD0`D5`Ev2$5)vrQVG^Lrbup7)PrwzOV&qegm zyE3=~^Oi#)c4E$hDCR`5rXF~dAC)+(S$I0R+~A^q+#YH4KwMm zf!^^P`Ramq^8^C)3`FwP)cJQC4>OkU?-CJx@ouaPlzOKI?P{Zb6$0a;wov-#7!?>J zrdTy&6^vI+Ftb%3)!s|w#5o9(Q(G+NLhKj>$r&r&AjKOGKNa1r4U^H)2kNJoOInC4 z>E*@2B-N=ibsBV*4F;P77Tyx9zC@FFD1+d7&pAXVmp+5OE?YUpd87O26h2*N#2sr` zcq;1qMt6mHg-y{s{Z}SgQ;2{~K`%tP1@Zf0@l6p?1wNaE8N!v=RB zyol1GYr2o={>+hc-=H6>$r1exM*``G>mE_-44@k7fu?=>X~O0Ziv#9{%omn!J~w5v z@#N`$iF}``#u;8SY=!kxrtXKPvStJfrM*>ArY@(K!&jPQx9RB)uu+h6lkOhy&!aS z+_Jn_arP+69u0Y+UKHA6PrYF@EZ+ch%`bv|>`AF+>_+pfcBQ_a{G#h;R`r@u!+fV9 z86IkPlEGq0Q8v@H2(kbpP*!lu@(Peubmiw2UtvW`+}7>!7N*l%n6A>}-a-r}xHK8R z(PZ3D%oL}4l07L11ej(h&lsDr(!J8N65$&5W&9(KZY@KMa8W2CgYkkeBGb)=! zZ_#Y9WIUSBb#1aVG1kKK4V3m>6i6VMtxHzPm$VMQQ6TOoTIVfK8Jn`ww$i>bWpm2D zlz*gPDvbl3OT!9apNQHK-F`l@fb5GlHe4KA;QR_inJdrsnRY0TWrq#=#$|J?()}^X zttNS$Sc_Xe7y&n7Cs#LUyk$kIPW2IAK2UnvFFXvhvTagWrZTw zDryTqicZm0FdMH^K4Aw-4+=IPu_)UBz~R^v{JWEKcD%i@u-#VcTgXhshcj=N;2UV ze^KmpI_kRUOi>Q8m&TP6Kf$?RQGjexN_{*A_&QeLwjN| zG-UWkvB!BGm^uiH3tJ~PEWAWE%N{6+h;++^>+&v$nRPAs3g_G>=1?xMXf8TL?E;@@ z4g|jcf^=9g8FN}+;xDy)ee?9`7ap#5`mXqKYK8(Hu9i4zZEO7SwN3HE*mU1>+SJrO^j?Y#9o{{kD?9Ji5UE6e3cpSbQb$5)nr*Wxx@lt=Vs zB9H$3YV=Fisl$Y#mHrGwVHQ`g_luWf=q{5d-BCQ5W|kTxo|t1#Fs@U&iPX!9C;Ir4 zArR&}FM69P{v>Ae%Qzun^Bdx;-eXUsoWv9JMNclwV~RhCt(2E1iIwt(_)7WM6M0+W ziTR=@7v?d^6ZFyDsP%HpSL#*vcC|~VT@Cbb)@mxf{Wl1WwL zY)_-CU&7H`cVi$OTP_LrWKV4U*cwwa#pVTDb}RjPML6gBl_$PgyKUQAS;+LwH+b_a z#$Ni-rfSR!+!4%IKC{bi(0pdM-Qarz#~8g4u>WT!4jEA9z=Y&`vG41iOs&0Lqa#U?dLDzvM!DwFz>hT5N*wYd8gBFNNdr(i7ZJSdRxUw)^tZvxEGV z7q&KhkNx(WCroqRW81iH-A2>MYpxl6?PJZ&SgE$&I6^m*Ys>ltt-5#BpAA@77MJ>o zR-poy2IZnBZv8v&m^|-@)$x_#6TJ_SEM-N_Z9y-#*8G=sxBH)|YJy`KHqxX*FMKU} zL?W9fFcqU&Dmf<=>kfMMD#{AB#Icho`a3BuuoSBk3*=!z>YkbyyyE7YuLw@8-?Vh; zCixn_9yal2+?*I(x_PtQ1MamvgfBziz?!M7pv!8qIsb(t^^~VbZ^a6H=?10wJ-k^qu8+l~{y`ukPH|Z&$Bs{Rm;y zq7O-&WNFK_J#EPjy6rBT`CqQD!Cp2)krzgS1df0qcP`eLO0J8Q9?-LLQ+xH^(!SLL zvoFso9MQXeY1Pn)S^fLF-4EDoH{V)52QRuv66n=7gZ2_m!@C>7PUDgQ3-m6o{&ysS zzA~k{Qm?&2LGX>?D{a{~-=OkZ_kY1sy&GdeCw!E>5lK|seaZyChz0h5-Gw75v`mM2 zFhXIwWaulVTSDt1iZ~p4<=e{LW8Dadfu))SDH=^3j4KYlt<{W;-iv_ZQ=ho*6GW_g z>cfT6uMp*5H)QUDjneycVA+wdk?m?~5J6961)>RIQ&FrHYyIjGkjPda+w<}1x!O;A z3Y9fKoD%?3erHp&-xCifztm7~Tjc!MdD3Z>iecyjdkobIzuI_h+{~a;`$ieQF~VDBH0iL66t)(6s5r{F7t)VvV?QKz zHayj3)15LXfzsEpt=YH}baP;YF)Ntuv9{QqpqlSVm)&gE(qM)=lhX_pHm@_&qL!!A zZ6TXLV`qfCSrNCBf_<_xnlfI<&~LJCvTd?&!tVJ^?oFOe-d)yRwq5pJj$N)@?p>Z; zUJut_(9u~lbzb90BMcA z-6n_6cZ127Dxtt2`=H5sR#yVq@y)RqN6Rod7Ci+A!&%~Am;C)tvnw7TiU+3*E0G1I z_aqne&FYg|mRFWvTu@qAT2#_!V8PV|6SF7gOhcr>nYnjo-<@-JuD>7;!)UC2FX}Te z9|`iWDwv!-Ij1hW4s(P}T9d9`-@rIQO&7!oYVtMto01v=^%?b?E0leS%W^lDoGdAl zaa&@#FScgTFN^ABS{#$(;+8AIv71GeDFrD;{nZr{i+{5t^!U2aKm)oU2JxKqcw1yAA^HVAvQurU@I3c2N_=<+M#Mvd8LlU-&L_dg ztLy={6&>D}hPi5+hJgAQAHp}>6C++`2N49wosyL@EakS8*hvLEE|Ia}v1luH{7d95 z9M%;J4*wRy#sB=r;JI% z`~EmdCt`7uE{#RRI7tk;_J4|#WPZKtnePph1bO%Y&MW;;_a5ZJ`BO$?yL)2`GPrV3 z_nxd1#E@_pj=<`G?0g`2ooz!b!o&v578r1{7lKh3H(&#XVM8n;#RiE;fy2I(Z381x z47bU#L70}YAn2=AqDPx$r4|-gG8hF`efKQ?PV@)yeo9%+Q}Nzy7=@;)(XenE5i>uf(PT0V$JD0ls9PP?{o8)j?OT_o zT$cN^fD5Z65lk21!nk@zBE)lSnHWW4R*^0~n2%Kh5l!L3Wjlc+&4k&I=et^ShiMaM zj~`G!^126V)`g-k57N7qEXW$9T{d<24S9JDnVCPjb8Ym~a@4L)_b5G#ebmTck(}0f z)S7iP+kZ6RJZk;c^zY20+27`^D^B*Sq_q1AJ@?5uoyDjiW+P;i1dVX`_+%_BixFfL zT&{iBNXmndj`fb7HAWbq>Ks#My#8WMkAtg?CPvI`#JHxAmEM!>ED#4k?~<7kLAD3^ReWKYrn4{ljP(>@TysV(5juz-Jy~* zcQ`$dB)@9>nO&FVK(ug+#b)|Jn$LfgoRx`HL+4UzvGuxZW|JkdhU=PT7#+PZC z!NJ+SgSno*=7ZL>r_)2pPxjJy{8rhzUXK)8EBfZ<6z3IU=1z}YB9?yHg?_Ww0)r<_ z6_(_b)gIbYagNbS;|}te&S&@8Q-L*@J&OpA3hrQ2_MB2j*AOG?U~|qjFQjr4P6fwE z74Rg)7iiYwEN{)OvtM>o(j3Q~t_ALeo`v3pzJ>ldN%OK6W-rWHn7c4U4<24-d1!~}?K8a3ybb7EUbaSK+Fg$ik z%gkTCm94v?y6bbD?D2hlQ1s#Kw|+UZ<(5f1ru}F1?LG&q*J|1yt2gw~2A-(ffpf^_ zO#V}QLu&uL?Ea|@?QczG^lrB z%qF%*$^K5UX~m6*A+rku%h+i7d$vZ&Lt_8G-4*3UitpbQg?Fd&6busTd=&BEcXvyn zgP>=~>~mtfl<@;Btbu05o-y4?dKa272ZebbOeE@uE8Q7P{b23~+fGCgy%Sdr@$-XG zGMCCW!z5xA`aI|_^q>XWTCDA$Ex5U72O2gTy2&Pv$<|93rA&_sWJ@*(W8bK zZdUL3^ykJ?(QlzOUIC6r8^6SQlDmUB$sV`f@4yl8dP|Dq4TJxU49l6`9?gx@i6^9* zCs+{}B(5x|(rWRe0@f`Ty(emW>0!W$+Fp8i@HUS?(t;wb~-AHP1Eo70Mia&dMz=% zCWteZaDInGX;<3+znI3RZU3(V?c7HHeQWKB=}7@Gh~bA0?zfoxgI#z6X!U( zMhoxx`R9Uj`06yZ7k-4xjNifwcP~~}$uW{}!pUNmJu$@Y;mDiRzjV-@z~`mG@)C13 zm!=Q;g#{c2VS-**bY7;F8m#E(aWCF8uN_?b+;eM<-$qYu-Fi{Y9*o6~KLe)#4?u}o zF){C;M2w^38)pH~p#yfjwBY}HMbRhpm@ig7y~mWTa`o9Jsc78E@C@sD5Kac$)~!*F zR)@hJ`xz83#Kn))uhq+{cWl*C?9}f77LiqHN270RRmsn- zUfmq6GtP|Os>|&9bpFnr%f&VgJ=N{YU$C@`8za3apJ?P$sdejb{NSAJ=@x$0CM5JEA zxeA$=a5ox1{4;GY9a#&iM-#E?T@~ z>0NiWBCL=z#}UKeXoIwU0ddt(Z7B4u`=i`N1F$$YzY2zb)V|i%$irr!bvt?-7;9A5O+ z%C#%BaR_C(Olw5mH+AnbuOE49m{*tUX5MMYt6_!(TVT4s!S{W9H+N$c-hE~F>~4ho zSL)oUa~~@8@lQW~;NuA&&6PWUTl}}%l=|yGjJrrYncYC78Z4!e4_5W@b0+p%>!GNY zt#K|$8y-*bJM}Aci3im0)lb#m)q_}Tu~z+3wWw!7^oOx_~?@Cy7)J*3`% z6@C({0b13+P}(=@8Px_qL0E-Uow`FctLf@(HADSLy`}c5chsNNyXp%yQyozI)PA)^ z%~JnR>(pU&P#sdURVUV;txS@&k>a0|&)N%Enh``f@Inmgs8>@r-{tHtB9!*zYQv)n;ir*41=>Xm}=eZGKzrl>3Iyn0}|E(~rjQzG|U9PgUbt z$nYBQwN_2Q-yw2ss8kb;STL>IiYOzpa2n;a-O_fnTiTpxlhj}8^u1ryQR;W$7ximK z{lfVE4d1U5b(8vC_?3EH_(j`m@O=aH`JK=R*Ha9yYL&R&XvB%pFitY!-y(y8-Kx}k zQg5{10^H9uwW^~DTCzPUY8>*0uo7mrak@&wzN`&~SGqp|Udr?xYAL?cOuf_?^M`2L zXKEzq|CsO|^QNhx$eYFM$=zr0d?UWQ!5=4ZUnOuQG`Bp4ZyDMK9>#NJC_tI`f+yv> zRo;PB(I(;@wAUs?*Wevf^_5t|R;hNQZDsOB{u=Tz@=1Q%YoMplLuirsi)--TGvL1{ z{+jR|B6Uc7$!o%I_zIuko$`GJ-^2KZfw%Se`xXA?;qOWOy%v9W8=AWROLw)>fp=C5 z-w1ySj|hK&?`@drR2N8a8k?J{k{Sy@$T4Zc(HtuyadYvSKJ=`X^I(qDSs3*I7M zC;rOwc>fi=qAu^nX^T3;G*qxh@x{A`;VenmH>vUP!`zIxV3X8jbql=6x59sXo0_Je)S(lm zs~M1uvmo#1K-SNLoSzR#zYtP>G3ESSkn|$wmqEtYs|LvUM#%RjB@+IJ&_1G@9)x^; z2)g27=%z=YiGB>MHA9m;4&4Ol3(fU2$nBp)V*f&IfcDy`HbIv>4ej(R^{o1}dQSaD zJrAAMs(!0}2aOeiE_y+|s6;1-77&f_s@ef<(yp)-S-q}ysXt&9z#pOS_CQCx2@Urr z=()Gl+i|V7ml{p<*kS0L_n=`uh-;gp&@~@H_k5!MgL>#Q^*QwF7tmv!&{!v+v%Z2B zJV~AUFKE!O)hXyL(OPGrt3{i2YcS~~DlxoQMpzPN9BE^PFU<~@rPI1}=3TRwFPc4L zfosu>C36-|zhlONyJjqzG2L+0-Afi4?-)3ssz%_za>C09D+ntI2NG5j4kD}}+vS2= zccRdbR+^Roi$T2K1JZ0Esc+2oNL~FRp_(PM?bf4)H^R?#f=5v-Amc5p* ztjX4K)}_{vEz96vkn&M#M(UNRD^tHsOHR8t z?Ij%XI4=F^^!GDXXY4@~vS0SviF2gx&H5tymh2_j|H7iJ;W_`2^N*Z!xz^ldOgNS2 z4$U2%dvose+{L-~<*vOey(Q$(McW`yT8!qTgfv zUMwA3y1Bor|G56GWvk1tDF6Ls#>;Xp8++N_ijfud6(3bzUAYMV8Y>^J{8{Da1L_An zHsDtS_7CW;%B-rXnpL%~YGc)JtM(4OW#CT+{<-?f>Xz!`gVdnRL8EKjHJLTVH3Ms| ztQlK#Yt7u6dux7Fv#w@i&2MX7t?8&aQ1g$$nS&b!Zyx;F5X+FMLw-DD&ycTcb8By_ z{Y~w*+TFG9)_zzU9eT&*LoOeA`S{D9y8Q2#cMZFJ*rUUa1P2GN2~G*l57q})2cHN& z9SjBAgMSJh4*tg#!7Cm-)!&`^{`^wv{+5r8$_4*?GDZUY?By&kZ(+X*OhwI0YIff8-e1L;!;IG)#&x+A!r%n^~2#Fah>=tY`*)r&A6@5xt%ye=WEARIs_KJk2D>~=u0 z{E@o55pZyKGay!70oL;A)lB~b!jXidK(%}|j@LI4-b^@=xh4Vs`D!xopO0vKcLUb3 zCexW_7U68BT*&K1go_E65H2NLPFPRaK)8aik?=mgp^0!M;VQxw)(z8TD7TH}h6uMX z*Eaan^3}`Th&O{Ma#FW;wy^`8l@A#$7>f|@WBUDs2M7=Horeey6JoT5^qqXealY*o zQ=aDiv%Ee>*hPqAwxLV0+De-LgA1? z)Isjo@w$cAQhFh9D^Ej&+X!FA??T{Hp311G5cm`rArxE{0$1`>@KeOHu#*ROiokmU z2lKwPx(K~b?nsG6N=ht3ZxR?H+y-th0v#iO(&{4Bfxcg)!h9Mbl$I8=lw#$LZpU>m zP^uUujsO&F7lZ!=j^Leb7yq?JWQ<$cXa1P;I!g+*u63!=FK)8sx z785QZTuQi{Z>}e7AY4J%NO&L9G!d>OTt(Od%oM}=5ZK1|hX@4^#jro*{!ZTM!1|tI z;6d6LAr!h7tK+;DikA>4C8Tl*Ft8nW1oI`J^?E>|bqO(FLd=(t)+MBM3Ha?Gp1w@j z&h#CiLJ4VILRy!A%IhJ!g_rtLBK3tuDc919zHCKbyk|SEUj{$-1?{#&%6kZfA4*C6 zQr4lAbtonEOG*7w<}GF3Qsiw$dZBwM+Is|g!qZ(0DDUZyUe*j)K`64WzZ!(v_Gka< zkM?fI^$4aMi8}WO-33l0oC50iXHEK}56XLH5zgit<}lY>!g+*u63!=FK)8tSSxmTu za4F$(!g|66!WD##g!d6P5w0X$Mc4xQ+@IL%Pi*ujHu|eAtkpJPvOjUsADkdHZ)fYI zC-x_P`p5CJkLmXl9w0o(79AoyOxVf1$N8SKOw$Ee2HYN@q=cIqSltd-9sL||5NcS4 zUYrFu7@St7YNICsN1*gF?9rE8;|M1bN^dFyr^$O}@jbKohB-_x-l;NJ`U3AHoKJ{J ze%uj#fsrQR5<<}zWlHo#nG$_bhIkGFMPHOD(HCXvKEfu#m4vGZg(u61)iUt8)F(u^ zg|*riy&b<^?vgf2|0+}MY?olQ3_LICBZT{yem~&>!h>wlA;QCioy;peu>!rL2G9#x zT|s?aL5_uGgIZOTpays8IhbiY0&Lg~&a6aJz z!bQxxm~aWpw|dMFYN7V&?^ftA6lat^m+(Ttc7Yd zBH9Lcb@W-lk%ZTRvejxFug6CZ;(7wpOpHcwJ(<^2(C@0zN91kO`L;Q{KbLSG;hlu@ z2^SD9 zau+F7LuV`Q2x}=Zm*%;UPHUR29{d{(pe5TL%L(+X1Jb^ufT4q@Tm|a|!1W-bpy0 zZ~@^WzF{%p62hf~%L(fV8wghrHWJ>)vYH5260RZ?i7}W~++g5Du0w>|SSztz2Ll^Y zL*cibP7Wb=4MES6r?dD}`j`dUhlT3VsCv_fkkJwC_%k$ieB@KX!9At@(Hc3 zIZQv7a30~Eg!2g(5H8{y785QZTuQi{u%57ia0Ou_;e9NziEt(1D#8}Xy;{&qS|swJ zmhz#Nc4jT`(~LV}Z`6`rwUiIFln=GQk31FIvKHJcP^`yVj4qque-Z0(C^hC#;(sXK zCU@j*LxJrh@DbkvI0`A70llchC~*6BK=Ck)f>%MH@bf6pQSOT-8ik&91)%WKDDu)M zye)uh;h!1O0a3!JmdB&6a zGSg2c2Tlggi!qNOezRM^b-Mw_5sJU-7VwhX zSxmTua4F$(!g|66!WD##gy)!7JV;a6kETG*$aODp$Q0IO3TrZjHJQSiOhL^LLNbcw zUq_y)BlYVbOQ9(tmyQ6I5Q>JaQv(Ra)~bVamH8JL9l(DF{;7kF+6*YZ!8%x~@>JSb zM=q*EOXXU8gLP=HTno3(!y($sHN%)p4v>$FW`=$9i=f>(z0rSBKdjd4upw9eJh>GeL4K5~GehQwPZ} z<%(~xj@r3SiEpqD6xRcaZ?F#IDQTnl2J4^&Bqc2j>gYP^=sN1?I;=;K_sgiEj-!S; z%-qPe_y+4Bh2(AGbE~7xSqG^o*Fw`edfw`kP{pI zbZV~Y)Lhd^@#&y=A<~HdZ94sL)2X?pQ*%vceWug@Hl1~tg|c8Lfh*boMJCLGwh|~K z&{-UT&O+(UxE5dBES5ft*qa5tAa}$UHw)6{AfU+bSsa1R0{@S|wfJOaK`#iD5$J5T zYc_4d*|Z5~qxA~+#g{mnZJEtF&t{!x(6ha@yKzS(=W^y+&RolpYdh|Ut8x(tAV*1m}>=dtzfPd%(a5KRxsBJ z=32pAE0}8qb2TzoBXcz}S0i&ZGFKyWH8NKtb2T#88s=KVG;5e<4bn7YhEy=N25H(b zhanhlW}0TEX+|2k|1$8|j5P90tg;r&;~W7LdD5ba2#a}NWJ?P?e3GV=*D{aOf*vJM z#&<0kVGEQ|UJFK(0;~CE85g%e=ExgF=Cptt=K&7owP>prXhnhJ2*(pnVtTO?T4*P< zkjGjmVOqe6l71QCa>9DT2ErADjf86mn=vokLjG(af3{%WSKc7@Y74ks>LXt67IJJ0 z=5*y+#+xlzvm{XFaS*VGu#@S3+fkgo4jj;b^GWzBcNb^GWzBcNb^GWzBcNRmy04A8 zuZ_B|jk>Rmy04A8uZ_B|jk>Rmy04A8uZ_B|jk>Rmy04A8uMK#T_lxe6H4Fj;|83NL zZRpo}T#N2&11+SDqWjvY`(%}#q!)^`QTMe`_q9>?wNdxAQTMe`*R)ahwNdxAkR7|+yp|b_ zZE6`)E@!TK!Un<>gpGu2Sd-=`G_-2t8$yIK`>+l471+-Dgn2(gD0275)wv?IL} z^$^cSJ3Sli^lY?)7R|UL^K0$&Y_!v}(GE}4cH9xqMms$l?euK4qX$V!nMZ4#k0`?NhNdMqP07SlMe8wTo)4xe|D(8gr(@G9jZUC%LoN~9jcPo z19)Asl7tclq_*38{w6_Bi3_co2FnPat z&O3Yx?WLH_JeolGzO{|@k{ykGdUgZS(qKEu=nVd{b~B}|yQ0A--P zVQTF#bwQZAAWU5lrY;Cm7htpoT@a=&2vZk?sSCo?1!3xfFm*wgeLPHE5T-5&Qx}A( z3&PX|Vd{b~bwQZAAWU5lrY;Cm7lf$`!qf#}>VhzJL72KAOkEJBE(lW>gsBU{)CFPc zf-rSKn7SZLT@a=&2vc%~sS9MCJp9Gf1z~FKFm*wgx*$wl5C$$~Zc;|9Vd{b~bwQZA zAWU5lrY;Cm7lf$`!qf#}>VhzJL72KAOkEJBE(lW>gsBU{)CE{G1sNV8r6QzMgp>jw zfKpf&Kq&TAgp`VqQkWG%&x(*zuqr?)c(}n25mG8bN<~Pi2q_gIr6QzMgp`VqQV~)r zLQ27x1L++hr6QzMgp`VqQV~)rLP|wQsR$_*A*CXuRD_g@kWvv+Dnd#{NT~=Z6(OY} zq*R2IijYzfQYu19MM$X#DHS25BBWG=l!}m25mG8bO3CgAc>nQFpx9RtQYu19MM$X# zDHS25BBWG=l!}m25mG8bN<~Pi2q_gIr6Q!%K5FfK)Y|(3_|QETs`*4{_0 zy^k7UA6vAKT6-V0_C9LueUy{?sI~V|Ywx4h-bbyyk6L>_OWe;A_p`+PED@{R(8m2N zaX(Ak&l2~u#QiLBKTF)t68E#j{VZ`mOWe;A_p`+PEO9?eJirnUu*3r_@c>K2iaL~d zfF&Mai3eEX0hV}xB_3dj2Uy|(mUw_A9$<+FSmFVecz`7yV2QHkPJu!)&vlSCgLvBH zT6`J@!2<$igebj4plIqt%yo#l4l&mu<~qb&hnVXSa~)!?L(FxUxehbeVdgr_T!)$K zFmoMduEWfAn7NK2S0Ok?=2eez{CJGx?qeJw9%FwzhWALC=}aSIKN( z5ea_`Zx$%y++!T)9^*Lo7=FnenO8kVK0L;G)nlAj{fzd;XBg=!XaX67dyV9WSTFL=2_ekkHnWqvmNW7#SZDD9nwiVq?2|?Cv|Qo?T}8|A)T~C zI%$V=(hljQ9nwiVq?3BElX|d|c1S1fkWShmowP$bX@_*u4(X&F(n&j{lXgfa?T}8| zA)T~CI%$V=(hljQ9nwiVq?2|?C+(0<+993bx-7Ip?2t~{A)T~CI;mAV(duU07tD0h z4(X&F(n&j{le)E&y0w$KwUc_YlX~+w@qCLh%%xCdZy8$DSs~ zo+ihhrdQ`QIrcO;_B1*6G&%M(IrcO;_B1*6G&%M(IrcQlmp7j#JWJRGc$O_a%a)#H ziD%KqBe*YZJj*toWgE}3jc3`$v&8UOdScI_jgnqg3Y}#e&$5kYS?*c1RGvz?T`a4M zWp%NvE|%5BvbtDS7t88mSzRovi)D4OtS*+-#j?6sRu{|aVp&}*tBYlEnrkiQe>Fg%G-eS<{3@eq|;!)Y7C7*nT&$(+U%F8~B^C6;1+IsVRP2>j3 zCdEV=#0+ZQa2r;tcQ-2)Lxa$v=vapmO-FXJZ(FYzF@ zKQ<`qabTzw2TmJ|7W~kgdOoO=#bUIX%!rf&fJa6PF7eMO(1>U_28+?i^vI^y8}(NC zfujZxh#C*Dd%=R7u@_wM+6xPj{PMM0twy88YDSUBgPpHbf8is+@bc#XwiFrXkaZmXB!+8-sAL0YQY&IM4VH0%V6h%bhlZqm?i4oMoTaW-~wb*S&Btyl3u=DtE z#;^cR7 zNOJ@eF??9fpdtQQ&1OjsstL=OkqxNCes+9}_$B0&zetAEIJ<-&;S{7x&{2LdKknP@ zcJP25)C2wSM!~1iVh1UuBqWqqBTADA$xy7|!z`5*CUMJ)_+Dg2Z7<+)lO9zCPFYE- z)EEU>&A4j;$>a?&%7B6jQRuM`9h_nV-oaxgo8TjcVu1z&aA|Vl3hl941s^t)Cp>~< z7J(RW85lxX#)52kuD44*^cD0#v*aSZjxyp=C(iW@JX+kno3~1D$ug37<;j0ACf=$%4hx^cri4QsA2Co5c8Bq{u zi>k;!G&hzOoU4@6Yau@D7Ka`9Fx$cD7vTfAG&@lM>H`kKOYEqu4Ryr<9ylN#_=xqU z9()M$h!2t!_z;4l9Im6K9Eq-CFm%>&FOc~ie1L#PkOk!k3z|@n-KqzXgs?_~bVYoCUxkqERweSxX>-}Z zV-}}~AYzz+xU}FHLLdP>7udHr?GCF0C%f2fZUD$fFobj=w4C^GOU2MJtrif$0^#RG zZmXPO!_W8NL%0}06s$M`54^j#j0Uts!2ad=&|2fas zk~oeJo5uqw;PePOfB*~dj#@fAc(dRGRQI4O;lObVlA&T~o!|p0fscS494Oo>odGDh z03TKZDr+^eHa6k|1>uNO5DEXFzAnUvH%0Jawz%vbCpwVT1=VCi1L7a@memUuMt$U6 z4yzlLbs`j>)9!QH9N;o=G3o@dYeV0(8NI@;5LCiHXq3tB0y6DvA{#G2>MhB@cKDzZ zpk8*n*Xu=}@HoNF$YX^h5t#veAnY^VVzYUX*y;0Hk<4gxp-53?U_PVKn!*Z;U=(aR zofq_Z8^jNUvaqSmCSB4Dd^l|;x$6*h9_L*2CZ&9-cANuiwz%zHCsdc!4IO+|{0Cvf-zKDY}>0(`iDUj)F$TaW;Baryl?LKt$xjXo&&KuUC)R0og_Jxl_k zuuJgaw3;B7PzI!r*$l+HP%(?s>a;?gUx*KXy5IvxA~<|5;KSw-e274ceM~rM+hg+s z;i!*W@L~730W(lm-ZwS z02FxK;6}UG?QwWqPKVnCe7K-Ly=afq?sOm<@MTIu&72TbNQw4BIeL-XiNkVZ7$yeD z*ZeKTKscc1Ih{#KN$3+v9+1x~oze}NWp(=jLQln#Qi`ZfIgArMUg%*hsy&gW%DFC?G~RCZ$Sbi_a-OXk<4uN0gDFWLpn`n z4?ciQ!3VjIzyTs6RB=pB`+UF$5HI+U&`S=OHzM%y0jDXI+*|NrwfS5DFH~0yA0TM_ zgJOL?M=}cVx`123hoAUxIX&)VoRbWlF8Bba;0Sf}C#NYHHFH65yIeqo!)12)go8ca zSbe@99}r2%l#Hg@eF5SFcidjlDc%4y6W-(lK9eC@ys61{Btyj@#SD<;z$Ng}8z(kP z`QRI`7c6oSKJYGw8Pq||L_}GEc&`frMeqTNp6|&@rDP#GKTIFLJJ|<(IQ(M5q5<&_ zdCQT40#F~H*KBq>K|hzz<92y*7>vsUo$iM$krSkmjrfr63kBzP`GF4@3x45XuTQ!S zKI90gw>wpxLBpBo*>1Lf|vNKcXv>%*Fk#rs(X0ywb3QD;# z3URxW+(47XorK(OpFdWg7(T=t{0=_csi~=u5h;EYiL4F}x(M)*;&R&XGYQR21wQ=g zsSYGV#ehWvR60_^O3CiQ2apMrm}6}eNPIXge&Sw4lnsdY3qH{C!QqxTJ|NYVO3TI3 za2A^*;7Lt_Dt871A0TM_W3hm@oM}L~-vitNAFgD7k~_)kar?Y!Ubh!gC;(XkPH|g3 z9^k_)Sn|M}^bjA2M;Q((^pTN3u7K_(+za2pSOokhfgvC;;?HO0rnIf)7s;LOc6?={}DS zhG{a|gExDuUew2JP6Io55$fOL4xsfgo|2Ip_>gXck4pgYAs75Wd4Nt{PkMSfWJFpL z*f|+@d`WH>_$A%rvf*bknwt*Ml9ZX@L^6vd87MSBx5e<0hq_Rg3PXcMF2IM|?1d=9 z;RzrVq%rUT#3vyfD(?DFLD63FAwDwlJqlvfk>X7cz_f9t$S@#*4Y3!&TdoXr>3|oS z4yxOok`(X+{2-Js!|(OOo=Abv2d8*#qRTv%bjb~Y?!|Fa9>GV7&*%3h1(ITKMMCO4 zOYEmW$q#|+&B(}rj7UcaxRey!0SQE>WWaX9&lE_74B#WsE7OH!s2HdKV;EK~ez@{| zkWivag`t5G2=~Otjh6deR zx*